Cassandra:使用UDT最大限度地减少元数据开销

时间:2015-10-20 19:47:51

标签: cassandra cassandra-2.1

我有一个40列的RDBMS表,我正在移植到Cassandra。

使用http://docs.datastax.com/en/cassandra/2.1/cassandra/planning/architecturePlanningUserData_t.html

处的估算工具

我创建了一个包含列名,数据类型,每列大小等的Excel工作表。 当实际数据只有192个字节时,每个RDBMS行的Cassandra特定开销高达1KB。

由于开销与列数成正比,我认为如果我只是为不属于主键的字段创建UDT会好得多。这样,我只会产生一次列开销。

另外,我不打算在UDT的内部字段上运行查询。即使我确实想要这样,Cassandra的查询功能非常有限,可用于非PK领域。

采用这是一个好策略吗?有任何陷阱吗?通过压缩或其他一些内部操作是否可以轻松消除所有这些开销?

1 个答案:

答案 0 :(得分:2)

从表面上看,这根本不是一个坏主意。您实际上是在另一个层面上抽象数据,但在某种程度上仍然可以管理以满足您的需求。这实际上是好的思考。

  

我有一个40列的RDBMS表

这部分让我有点担心。基本上,您将创建一个包含40个属性的UDT。本身并不是什么大不了的事。卡桑德拉应该处理得很好。

但是,虽然您可能不会查询UDT的内部字段,但您需要问问自己计划更新它们的频率。 Cassandra将UDT作为“冻结”类型存储在单个列中。理解这一点很重要,原因有两个:

  1. 如果不阅读UDT的所有属性,则无法读取UDT的单个属性。
  2. 同样,如果没有重写所有,也无法更新UDT中的单个属性。
  3. 因此,在设计应用程序时应牢记这一点。只要您不会频繁更新UDT的各个属性,这对您来说应该是一个很好的解决方案。