Cassandra:使用 UDT 最小化元数据开销
Cassandra: Minimizing metadata overhead with UDT
我有一个 40 列 RDBMS table,我正在将其移植到 Cassandra。
在 http://docs.datastax.com/en/cassandra/2.1/cassandra/planning/architecturePlanningUserData_t.html
使用估算器
我创建了一个 excel sheet,其中包含列名、数据类型、每列的大小等。
当实际数据只有 192 字节时,每个 RDBMS 行的 Cassandra 特定开销高达 1KB。
由于开销与列数成正比,我认为如果我只为不属于主键的字段创建一个 UDT 会好得多。这样,我只会产生一次列开销。
此外,我不打算 运行 查询 UDT 的内部字段。即使我确实想要那样,Cassandra 在非 PK 字段上的查询功能也非常有限。
采用这种策略好吗?有什么陷阱吗?所有这些开销是否可以通过压缩或其他一些内部操作轻松消除?
从表面上看,这并不是一个坏主意。您本质上是在另一个层次上抽象您的数据,但在某种程度上仍然可以满足您的需求。其实是个好主意。
I have a 40 column RDBMS table
这部分让我有点担心。本质上,您将创建一个具有 40 个属性的 UDT。这本身没什么大不了的。 Cassandra 应该处理得很好。
但是,虽然您可能不会查询 UDT 的内部字段,但您需要问问自己,您计划多久更新一次它们。 Cassandra 将 UDT 存储为单个列中的 "frozen" 类型。理解这一点很重要,原因有二:
- 如果不阅读 UDT 的 所有 属性,则无法读取单个 属性 UDT。
- 同样,如果不重写所有,您也无法更新 UDT 中的单个 属性。
因此在设计应用程序时应牢记这一点。只要您不会频繁更新 UDT 的各个属性,这对您来说应该是一个很好的解决方案。
我有一个 40 列 RDBMS table,我正在将其移植到 Cassandra。
在 http://docs.datastax.com/en/cassandra/2.1/cassandra/planning/architecturePlanningUserData_t.html
使用估算器我创建了一个 excel sheet,其中包含列名、数据类型、每列的大小等。 当实际数据只有 192 字节时,每个 RDBMS 行的 Cassandra 特定开销高达 1KB。
由于开销与列数成正比,我认为如果我只为不属于主键的字段创建一个 UDT 会好得多。这样,我只会产生一次列开销。
此外,我不打算 运行 查询 UDT 的内部字段。即使我确实想要那样,Cassandra 在非 PK 字段上的查询功能也非常有限。
采用这种策略好吗?有什么陷阱吗?所有这些开销是否可以通过压缩或其他一些内部操作轻松消除?
从表面上看,这并不是一个坏主意。您本质上是在另一个层次上抽象您的数据,但在某种程度上仍然可以满足您的需求。其实是个好主意。
I have a 40 column RDBMS table
这部分让我有点担心。本质上,您将创建一个具有 40 个属性的 UDT。这本身没什么大不了的。 Cassandra 应该处理得很好。
但是,虽然您可能不会查询 UDT 的内部字段,但您需要问问自己,您计划多久更新一次它们。 Cassandra 将 UDT 存储为单个列中的 "frozen" 类型。理解这一点很重要,原因有二:
- 如果不阅读 UDT 的 所有 属性,则无法读取单个 属性 UDT。
- 同样,如果不重写所有,您也无法更新 UDT 中的单个 属性。
因此在设计应用程序时应牢记这一点。只要您不会频繁更新 UDT 的各个属性,这对您来说应该是一个很好的解决方案。