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 中的单数据列与多列的主要内容,如果未能解决你的问题,请参考以下文章