读完这一篇How FriendFeed uses MySQL to store schema-less data
,颇有感触
文中主要表达了几个意思:
*数据量相当大的时候,维护mysql本身的索引非常困难,新增/删除索引都很费资源
*新的方案使用mysql,但是只是用他基本“数据库”的功能,而不使用“关系”的功能,就是说,只用mysql来保存数据,以及简单的单表查询,不使用join之类的功能
*没有schema,表结构很简单,只有id,last_updated,content,这样的几个字段,其中content是一个大字段,所有内容放在这里面
*索引由应用来维护,为每一条索引创建一张表,数据的增珊改由应用来进行
*查询索引由应用来进行,先查索引,然后取数据
*提供api来封装以上这些逻辑,包括数据分区逻辑的实现
这里其实是有一点问题需要解决的,由于索引自己去维护,和主表的数据肯定会有一些不一致,特别是新增索引的时候,需要异步的去初始化这个索引,而且还需要做增量,只有应用对这个一致性要求不高的时候才能使用这个方案。
还有一个问题,如果某次查询要查两个索引,同时每个索引过滤出来的数据比较多的时候,在应用这端的处理就会消耗比较大了,要对多个结果集进行处理(交集或者幷集),这个问题其实主要要根据应用的特点来看的,采用了这种数据切分的方案,对应用本身就有一些限制的,换一个角度讲,只有应用的特征适合做这种数据切分,才能应用这种方案。看起来像废话,但是是真的,没有完美的方案,只有合适的方案
。
其实以上的功能,除了分区以外,couchdb
都能支持,不过couchdb还不够成熟,至少没有一个大规模部署的先例存在。而且couchdb更彻底,索引都帮你维护了,你只需要保存你的entity,再告诉他哪些内容要索引,而且索引都是你自己写一个函数的,期待couchdb的成熟。
类似的方案以前我想过,不过不是用mysql,而是使用bdb来做存储,不过只是想了一下,没做,现在看到人家在使用了,才想起来。
还可以看看:Quick Reference to Alternative data storages
分享到:
相关推荐
《FriendFeed如何使用MySQL存储无Schema数据》 在FriendFeed的实践中,他们面临的问题是如何在不断增长的用户基数和数据量下,支持新功能的添加,同时不改变数据库的基础架构和已有的海量数据。这个问题的核心在于...
友谊赛精简版这是关于 FriendFeed 如何使用 MySQL 的想法的实现。 您应该阅读那篇文章以了解所有详细信息。长版把 MySQL 变成一个文档 db! 为什么? 每个人都对 NoSQL 感到非常兴奋。 除了删除 SQL 使事情具有神奇...
Tornado是一个开源的、高性能的Web服务器和异步网络库,由 FriendFeed 团队开发并贡献给Facebook。它最初是为了处理大量并发连接而设计的,特别是在长轮询(long-polling)和WebSockets等实时应用中表现优异。...
Tornado,又被称为“龙卷风”,最初由FriendFeed团队开发,后来被Facebook收购并开源。它的设计目标是处理大量并发连接,特别适合实时Web服务,如长轮询和WebSockets。Tornado的异步非阻塞I/O模型使得它在处理高并发...
看来此方法与FriendFeed用于在MySQL上实现无模式层的方法相同,这是非常重要的验证: 用法 要使用goatfish ,您需要做的就是创建一个从goatfish.Model继承的类。 import goatfish import sqlite3 db_connection =...
Tornado是一个Python Web框架和异步网络库,最初由 FriendFeed 团队开发,后来被Facebook收购并开源。它支持WebSockets,具有非阻塞I/O模型,特别适合处理大量的并发连接,对于构建实时、响应快速的Web应用非常理想...
同时,Django内置的SQLite数据库和强大的管理后台也是其亮点,但更大型的项目可能会选择如MySQL或PostgreSQL等更强大的数据库。 Tornado则是一个轻量级且高性能的框架,它最初为FriendFeed设计,尤其适合处理大量...
6. **数据库集成**:如果项目涉及到数据库操作,可能使用了像SQLite、MySQL或PostgreSQL等数据库。Tornado自身不包含ORM(对象关系映射),但可以与SQLAlchemy、peewee等库结合使用。 7. **部署与运行**:学习如何...
Tornado是一个异步网络库,最初由Facebook的FriendFeed团队开发,后来被Twitter收购并开源。它以其非阻塞I/O模型和强大的Web服务器能力而闻名,特别适合高并发和实时Web应用。Tornado支持WebSockets,HTTP/2,以及...
Tornado是Facebook开源的一个Web框架,最初为FriendFeed设计。它的核心特性是基于IOLoop(IO循环)的异步模型,这使得Tornado可以同时处理大量并发连接,特别适合于长连接和实时Web应用。Tornado的API设计简洁,易于...
Tornado是Python的一个异步网络库,最初由Facebook的FriendFeed团队开发,后来成为开源项目。Tornado以其非阻塞I/O模型和高并发处理能力而闻名,特别适合于实时Web应用,如聊天、推送通知和长轮询等。在构建博客系统...
Tornado 是一个异步网络库,最初由 FriendFeed 团队开发,后来被 Facebook 收购并开源。它以其高性能、非阻塞 I/O 和 Web 服务功能而闻名,特别适合构建实时 Web 应用和长连接服务。Tornado 的核心特性包括 Web ...
Tornado是一个开源的Python Web服务器和异步网络库,它最初由FriendFeed团队开发,后来被Facebook收购并开源。Tornado以其轻量级、高性能和非阻塞I/O模型而闻名,特别适合构建需要处理大量并发连接的实时Web应用,如...
5. **数据库集成**:为了存储项目数据,如任务、用户信息、进度等,系统可能会集成MySQL、PostgreSQL或其他关系型数据库,或者使用NoSQL数据库如MongoDB。Tornado框架提供了对多种数据库的支持。 6. **模板引擎**:...
Tornado是Facebook开源的一个高性能、异步网络库,最初为 FriendFeed 开发,后来被Facebook收购并贡献给了社区。Tornado以其非阻塞的IO循环(IOLoop)和基于回调的异步模型而著名,这使得它在处理大量并发连接时表现...
在管理系统中使用Python,可以快速开发出功能丰富的应用,同时Python的跨平台性使其能够在多种操作系统上运行。 接下来,我们要介绍的是Tornado框架。Tornado是由FriendFeed团队开发的,最初用于解决Facebook实时...
2. **Tornado 4.0.2**:这是一个异步网络库,最初由Facebook的FriendFeed团队开发,后来被广泛用于构建高性能的Web服务。Tornado以其非阻塞I/O和轻量级特性而著名,适合处理大量并发连接,尤其在处理WebSocket等长...
首先,Tornado是一个开源的Python Web框架和异步网络库,最初由 FriendFeed 团队开发,后来被Facebook收购并开源。Tornado 的主要特点是支持非阻塞I/O模型,使得它可以处理大量的并发连接,非常适合于长连接和实时...