在Cassandra中拥有许多键空间和可能有数千个表是一个好主意吗?

时间:2017-04-06 10:31:50

标签: database-design cassandra bigdata database

所以,我一直在使用Cassandra,而数据库的架构设计方式对我来说相当不寻常。事实上,我只是没有足够的知识来决定这是不是一个好的设计,因为我是这个整体大数据的新手。

这是一个简化:

  • 我们有供应商
  • 每个供应商都有客户
  • 对于每个供应商,我们在Cassandra中创建自己的密钥空间。
  • 对于供应商的每个客户,我们在其供应商的密钥空间中创建大约12-15个表。像clientid_TableName
  • 之类的东西
  • 创建客户端时动态创建表。这很慢,我担心Cassandra在所有其他操作加载时都无法传播模式。
  • 所有表都具有相同的模式,任何给定的客户端都没有特殊的建模。
  • 由于我们的数据的性质,这些表中大约有5个可能有数百万甚至数十亿行。

由于Cassandra的分布式特性,我绝不会认为需要这样的“手动”数据划分,甚至有益

这个单一的应用程序将拥有数十个键空间,并且可能有数千个表键空间。这不会对性能产生负面影响吗?

我给出的印象是,此设计允许更均匀地传播数据,从而在单个表中进行搜索时导致更少的性能影响。这对我来说没有多大意义,但我没有任何理由来反驳它,因为我对Cassandra的经验以及所谓的大数据设计充其量只是非常有限。我能真正想到的唯一好处是每个供应商都有不同的键空间设置。但我认为这不会超过任何增加的复杂性。

简而言之,这是一个好主意吗?

1 个答案:

答案 0 :(得分:1)

首先,当您从RDBMS迁移到Cassandra时,您可能不得不重新设计ERD,并且在大多数情况下,移动标准和规范化架构是一个非常糟糕的决定。现在您只想将现有架构移动到Cassandra。

您为每个供应商等工作流创建了所有这些表。你需要理解为什么你这样做,如果你在Cassandra需要它。一般来说,你可以拥有许多表和许多键空间(有限制,但它们很高)但可能根本不适合Cassandra建模。

在Cassandra中,您应该根据查询构建表 而不是实体,对象,关系等......数据复制不是一个问题,而是需要在性能和存储之间进行权衡。

我建议您从Datastax学习Cassandra中的数据建模课程。这是一个很棒的课程,它完全免费::

https://academy.datastax.com/courses