Cassandra 中的单数据列与多列

Posted

技术标签:

【中文标题】Cassandra 中的单数据列与多列【英文标题】:Single data column vs multiple columns in Cassandra 【发布时间】:2021-03-10 11:01:14 【问题描述】:

我正在使用现有的 cassandra 数据库开展一个项目。 架构如下所示:

partition key (big int) clustering key1 (timestamp) data (text)
1 2021-03-10 11:54:00.000 a:"somedata", b:2, ...

我的问题是:在 json 字符串中存储数据有什么好处吗? 它会节省一些空间吗?

到目前为止,我只发现了缺点:

您不能(轻松)在运行时添加/删除列,因为应用程序可能会覆盖 json 字符串列。 解析 json 字符串是目前性能的瓶颈。

【问题讨论】:

【参考方案1】:

不,在 Cassandra 中将 JSON 作为字符串存储并没有真正的优势,除非 JSON 中的底层数据确实是无模式的。它也不会节省空间,但实际上会使用更多,因为每个项目都必须有一个键+值,而不仅仅是存储值。

如果可以,我建议您将键映射到 CQL 列,以便您可以本地存储值并更灵活地访问数据。干杯!

【讨论】:

【参考方案2】:

埃里克的回答是正确的。

我唯一要补充的是,将 JSON blob 存储在单个列中会导致更新(甚至更多)问题。如果更新单个 JSON 属性,则整个列都会被重写。此外,原始 JSON blob 仍然存在...只是“过时”,直到压缩运行。将 JSON blob 存储在单个列中唯一有意义的情况是属性不发生变化。

我同意,将键映射到 CQL 列是一个非常更好的选择。

【讨论】:

以上是关于Cassandra 中的单数据列与多列的主要内容,如果未能解决你的问题,请参考以下文章

Excel 2010 比较多列(2 列与其他 2 列)

在 Cassandra 数据库中编写存储过程

国内哪些互联网公司使用了 Cassandra 数据库?

带有分组的单列表中的 MySql 多列选择

EMR LinkageError 上的 Spark + Cassandra

一些Cassandra+YCSB异常