几天前我在cassandra数据库引擎上听说过,并在上面搜索一个很好的文档。在研究了cassandra后,我得到的cassandra比其他数据引擎更具可扩展性。 我也在Amazon SimpleDB上阅读,但由于SimpleDB的限制为10GB / table,Google Datastore比Amazon SimpleDB慢,我不想使用它们(Google Datastore,Amazon SimpleDB)。因此,为了使我们的网站使用大量数据扩展特别高的写入速率,我喜欢使用Cassandra作为我们的数据引擎。
但在开始使用cassandra之前,我对“如何使用casssandra处理复杂数据”感到困惑。我给你下面的MySQL数据库结构,请阅读这个并给我一个很好的建议。
用户表
hasColum ID主要
hasColum电子邮件独特的
hasColum FirstName
hasColum LastName
类别表
hasColum ID主要
hasColum家长
hasColum类别
帖子表
hasColum ID主要
hasColum UID索引与用户链接的外键 - > ID
hasColum CID索引外键链接到Category-> ID
hasColum标题
hasColum Post Index
hasColum PunDate
评论
hasColum ID主要
hasColum UID索引与用户链接的外键 - > ID
hasColum PID索引外键链接到Posts-> ID
hasColum评论
用户组
hasColum ID主要
hasColum名称
UserToGroup表(仅限多对多关系)
hasColum UID外键链接到Users-> ID
hasColum GID外键链接到Group-> ID
最后,为了您的信息,我喜欢使用SimpleCassie PHP Class http://code.google.com/p/simpletools-php/ 因此,如果您可以使用SimpleCassie
给我示例,将会非常有帮助答案 0 :(得分:5)
来自cassandra's wiki data model reference:
与关系系统不同,在关系系统中,您可以为实体和关系建模,然后只需添加索引来支持任何必要的查询,使用Cassandra,您需要考虑提前有效支持的查询,并进行适当的建模。由于没有自动提供的索引,因此对于每个查询,您将比使用表更接近于一个ColumnFamily:查询关系。不要害怕相应地反规范化;
goog文章here。
我希望它可以帮到你。
答案 1 :(得分:5)
我会假设你的系统会有很多负载和大量数据,我会再次假设你已经尝试了一个关系型数据库并在重负载下崩溃,数百万行,每秒10k +请求等
在这些假设之后,我会告诉你,你需要改变你的想法。例如,在您的问题中,您记下了表结构,这在您考虑关系数据库时非常重要。但是在列存储(如cassandra / hbase / etc)中,它并不重要,它的请求类型很重要。因为在列存储中,您始终可以在新列中抛出新的元数据(您不会在请求中使用的额外列,但在响应中),您不必更改设计。但是在关系数据库中,您需要更改表,甚至可以获得另一个具有pk-fk关系的表。
使用cassandra(或任何其他列数据库)时,您应该在您面前拥有所有api。
示例:
如果你的api中有getAllUserPosts($userId)
,那么你应该让eighter拥有:UserPosts ColumnFamily或Posts ColumnFamily上的二级索引(在后台做类似的事情)。您还需要如何排序结果?是的,它是设计中的一个关键点,如果你希望它按创建日期排序,那么你最好在密钥或第三方机制中使用TimeUID来为你生成增加的uid。也许你想用它们的“最后更新”对它们进行排序,然后你最好在它上面放一个二级索引。
根据我的经验,我会告诉你,使用cassandra开发一些非常酷的api,或者你需要的数据是非常清楚但是当你想改变一个大的功能时,你将面临一些非常大的挑战你,要小心。还要确保你理解底层的“最终一致性”,这使得cassandra很快。因为你必须在键盘上敲打很多次以使交易工作(至少我这样做了)。当然,在某些时候你会想要对cassandra上的大量数据进行大规模操作:准备进行肉类云计算。 hadoop的。
PS:我相信这里有很多人对cassandra有很多经验和知识,那么我会帮助你设计出比我更好的系统。我只想分享我在生产中使用cassandra时所经历和理解的内容。答案 2 :(得分:4)
进行非标准化。请参阅twissandra.com和http://github.com/ericflo/twissandra
上的文档 的更多示例答案 3 :(得分:2)
这是关于Twissandra(Cassandra上的Twitter克隆)的一篇很好的文章,它讨论了基于数据访问要求的模式设计。您可能会发现它很有用http://www.rackspacecloud.com/blog/2010/05/12/cassandra-by-example/
答案 4 :(得分:0)
您是否真的在交通量方面与Google和亚马逊竞争?我建议首先考虑升级您当前的MySQL基础架构 - 您当前在群集中运行了多少个数据库服务器?你分区数据吗?
下进行。