Cassandra 中的单数据列与多列
Single data column vs multiple columns in Cassandra
我正在使用现有的 cassandra 数据库开发一个项目。
架构如下所示:
partition key (big int)
clustering key1 (timestamp)
data (text)
1
2021-03-10 11:54:00.000
{a:"somedata", b:2, ...}
我的问题是:将数据存储在 json 字符串中有什么好处吗?
它会节省一些 space 吗?
到目前为止我只发现了缺点:
- 您不能(轻易地)在运行时 add/drop 列,因为应用程序可以覆盖 json 字符串列。
- 解析 json 字符串是目前性能的瓶颈。
不,在 Cassandra 中将 JSON 存储为字符串并没有真正的优势,除非 JSON 中的基础数据确实是无模式的。它也不会保存 space 但实际上会使用更多,因为每个项目都必须有一个键+值而不是仅仅存储值。
如果可以,我会建议将键映射到 CQL 列,这样您就可以本地存储值并更灵活地访问数据。干杯!
Erick 的回答准确无误。
我唯一要补充的是,将 JSON blob 存储在单个列中会使更新(甚至更多)成为问题。如果您更新单个 JSON 属性,则整列都会被重写。此外,原始的 JSON blob 仍然存在 ...只是“过时”,直到压缩运行。在单个列中存储 JSON blob 唯一有意义的情况是属性不更改。
我同意,将键映射到 CQL 列是更好更好的选择。
我正在使用现有的 cassandra 数据库开发一个项目。 架构如下所示:
partition key (big int) | clustering key1 (timestamp) | data (text) |
---|---|---|
1 | 2021-03-10 11:54:00.000 | {a:"somedata", b:2, ...} |
我的问题是:将数据存储在 json 字符串中有什么好处吗? 它会节省一些 space 吗?
到目前为止我只发现了缺点:
- 您不能(轻易地)在运行时 add/drop 列,因为应用程序可以覆盖 json 字符串列。
- 解析 json 字符串是目前性能的瓶颈。
不,在 Cassandra 中将 JSON 存储为字符串并没有真正的优势,除非 JSON 中的基础数据确实是无模式的。它也不会保存 space 但实际上会使用更多,因为每个项目都必须有一个键+值而不是仅仅存储值。
如果可以,我会建议将键映射到 CQL 列,这样您就可以本地存储值并更灵活地访问数据。干杯!
Erick 的回答准确无误。
我唯一要补充的是,将 JSON blob 存储在单个列中会使更新(甚至更多)成为问题。如果您更新单个 JSON 属性,则整列都会被重写。此外,原始的 JSON blob 仍然存在 ...只是“过时”,直到压缩运行。在单个列中存储 JSON blob 唯一有意义的情况是属性不更改。
我同意,将键映射到 CQL 列是更好更好的选择。