3

几天前我听说过 cassandra 数据库引擎,并正在寻找关于它的好文档。在学习了 cassandra 之后,我发现 cassandra 比其他数据引擎更具可扩展性。我也在 Amazon SimpleDB 上阅读过,但由于 SimpleDB 有 10GB/表的限制,而且 Google Datastore 比 Amazon SimpleDB 慢,我不想使用它们(Google Datastore、Amazon SimpleDB)。因此,为了使我们的网站在海量数据中实现特别高的写入率,我喜欢使用 Cassandra 作为我们的数据引擎。

但在开始使用 cassandra 之前,我对“如何使用 casssandra 处理复杂数据”感到困惑。我给你下面的MySQL数据库结构,请阅读这个并给我一个好的建议。

用户表
hasColum ID 主要
hasColum 电子邮件 唯一
hasColum FirstName
hasColum LastName

类别表
hasColum ID Primary
hasColum Parent
hasColum Category

Posts Table
hasColum ID Primary
hasColum UID Index外键链接到用户->ID
hasColum CID Index外键链接到Category->ID
hasColum Title
hasColum Post Index
hasColum PunDate

评论
hasColum ID 主
hasColum UID 索引外键链接到用户->ID
hasColum PID 索引外键链接到帖子->ID
hasColum 评论

用户组
hasColum ID 主
hasColum 名称

UserToGroup 表(仅用于多对多关系)
hasColum UID 外键链接到 Users->ID
hasColum GID 外键链接到 Group->ID

最后供您参考,我喜欢使用 SimpleCassie PHP 类http://code.google.com/p/simpletools-php/ 所以,如果您能给我举个使用 SimpleCassie 的例子,那将非常有帮助

4

5 回答 5

5

来自cassandra 的 wiki 数据模型参考

与关系系统不同,在关系系统中,您对实体和关系进行建模,然后只需添加索引以支持任何必要的查询,而对于 Cassandra,您需要提前考虑要有效支持哪些查询,并进行适当的建模。由于没有自动提供的索引,因此每次查询与使用表:关系的查询相比,您将更接近一个 ColumnFamily。不要害怕相应地去规范化;

这里有一篇谷歌文章。

我希望它对你有帮助。

于 2010-05-07T20:47:30.203 回答
5

我会假设您的系统负载很重,并且有大量数据通过您的系统,我再次假设您已经尝试过关系数据库并在繁重的负载下崩溃,达到数百万行,每秒 10k+ 请求等。

在这些假设之后,我会告诉你,你需要改变你的思维方式。例如,在您的问题中,您写下了表结构,这在您考虑关系数据库时非常重要。但在列存储(如 cassandra/hbase/etc)中,它并不那么重要,它的请求类型很重要。由于在列存储中,您始终可以在新列中添加新的元数据(您不会在请求中使用但在响应中使用的额外列),因此您不必更改设计。但是在关系数据库中,您需要更改表甚至使用 pk-fk 关系获取另一个表。

使用 cassandra(或任何其他列数据库)时,您应该将所有 api 放在您面前。

例子 :

如果你getAllUserPosts($userId)的 api 中有你应该有: UserPosts ColumnFamily 或 Posts ColumnFamily 上的二级索引(它在后台做类似的事情)。更进一步,您需要如何对结果进行排序?是的,它也是设计中的一个关键点,如果您希望它按创建日期排序,那么您最好使用 TimeUID 作为键,或者使用第 3 方机制来为您生成增加的 uid。也许你想用它们的“最后更新”对它们进行排序,那么你最好在上面放一个二级索引。

根据我的经验,我会告诉你,当你的 api 或者你需要的数据非常清楚时,用 cassandra 开发东西真的很酷,但是当你想改变一个大特性时,你将面临一些非常大的挑战,要小心. 还要确保您了解使 cassandra 快速的底层“最终一致性”。因为您必须多次敲击键盘才能完成交易(至少我这样做了)。当然,在某些时候,您可能希望对 cassandra 上的大量数据进行大规模操作:准备好使用云计算。Hadoop。

PS:我相信这里有很多人对 cassandra 有丰富的经验和知识,然后是我,他们会比我更好地帮助你设计你的系统。我只是想分享我在生产中使用 cassandra 时的经历和理解。

于 2011-03-02T20:49:05.857 回答
4

非规范化。请参阅 twissandra.com 和http://github.com/ericflo/twissandra上的文档

更多示例见http://wiki.apache.org/cassandra/ArticlesAndPresentations

于 2010-04-21T14:55:09.600 回答
2

这是一篇关于 Twissandra(Cassandra 上的 Twitter 克隆)的好文章,讨论了基于数据访问要求的模式设计。您可能会发现它很有用http://www.rackspacecloud.com/blog/2010/05/12/cassandra-by-example/

于 2010-05-24T11:13:40.640 回答
0

你真的在流量方面与谷歌和亚马逊竞争吗?我建议从升级您当前的 MySQL 基础架构开始——您目前在集群中运行了多少数据库服务器?你对数据进行分区吗?

C。

于 2010-04-21T17:33:34.660 回答