缩放Cassandra for Multiple vs Single table

时间:2015-01-13 12:08:00

标签: performance database-performance cassandra-2.0

我有一个用例,我将存储用户的活动。

我正在考虑两种方法

  1. 为每个用户创建表
  2. 创建一个单独的表格。
  3. 与我们将为所有用户存储数据的第二种方法相比,在第一种方法中,单一用户的性能提取数据变得更容易。

    我们在Cassandra的桌子数量是否有限制?

    我已阅读其他关系数据库的帖子,他们不建议使用多个表。

    我在Cassandra中尝试了单表和多表的方法。

    对于多表,我担心db中的表增加。

    对于单一表格,我担心行数增加超过十亿。

    请有人建议我应该使用哪种方法。

3 个答案:

答案 0 :(得分:3)

我不知道任何专为处理数百万个表而设计的数据库系统。它可能是一个坏主意,因为每个表都必须通过将几个元信息与它相关联来管理(名称,数据位置,访问控制,......)。在扩展时,仅管理大量表格的工作量可能会成为一个大问题。使用单个表格。

答案 1 :(得分:2)

NoSQL DB旨在提高水平可伸缩性。如果你采用cassandra的任何基准测试,它将证明它的水平扩展能力。

方法1:

虽然您的表增加了,但您可以将它们放在不同的服务器上(分片)。你不用担心。将来,如果您的用户增加到非常高的容量,那么为每个用户创建一个新表可能是不可行的(至少从性能角度来看)。考虑好的分片策略(基于Region,数据大小等)

方法2:

如果单个表亿行不是问题(这也会提供良好的性能。)具有良好配置和正确的数据库调优(缓冲区,索引,查询)的单个服务器也将提供良好的结果。

恕我直言根据当前和未来视角的编码,使用和可维护性的易用性来选择策略(我认为如果用户数量较少并且随着时间的推移不变,则第二选项会更好)。

答案 2 :(得分:0)

您可以使用单个表并使用userid作为主键。因此,Cassandra将根据主键分区物理存储您的数据。在这种情况下,您始终必须在选择的查询中传递userid,例如

select * from tbl_user_data where userid = 'shahid'