我有一个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领域。
采用这是一个好策略吗?有任何陷阱吗?通过压缩或其他一些内部操作是否可以轻松消除所有这些开销?
答案 0 :(得分:2)
从表面上看,这根本不是一个坏主意。您实际上是在另一个层面上抽象数据,但在某种程度上仍然可以管理以满足您的需求。这实际上是好的思考。
我有一个40列的RDBMS表
这部分让我有点担心。基本上,您将创建一个包含40个属性的UDT。本身并不是什么大不了的事。卡桑德拉应该处理得很好。
但是,虽然您可能不会查询UDT的内部字段,但您需要问问自己计划更新它们的频率。 Cassandra将UDT作为“冻结”类型存储在单个列中。理解这一点很重要,原因有两个:
因此,在设计应用程序时应牢记这一点。只要您不会频繁更新UDT的各个属性,这对您来说应该是一个很好的解决方案。