我知道可以在 Cassandra 中存储 JSON,而且我也知道 Cassandra 是一种结构化查询语言。由于这两个信息,我无法确定是否应该将一些数据存储为 JSON 或是否应该添加表。
我需要实现以下几点:一个客户可以有多个地址,并且一个地址对于这个客户是唯一的。
由于我已经习惯在 MySQL 中执行此操作,因此我将直观地用表来表示这种关系:
customers <- 1 to N - addresses
但是我确实观察到一些数据可以存储为 JSON,我在 Internet 上找不到明确的答案。由于不需要使地址通用(因为它们是唯一的),我可以使用 JSON。
我应该用存储在列中的 JSON 还是相关表来表示这种关系?
首先,我们通常不建议将数据存储为 JSON,因为它不灵活且未针对 CQL 查询进行优化,这在性能和可伸缩性方面非常重要。
解析 JSON 的元素并将每个字段映射到 CQL 列几乎总是更好。
其次,将数据规范化为客户和地址表是 RDBMS 数据建模的旧方法。在 Cassandra 中,数据建模的首要原则是为每个应用程序查询设计一个表。
在您的情况下,很容易为具有多个地址的客户建模。如果您有以下应用查询:
那么您可以设计 CQL 表,使其按客户分区,每个客户都有一行或多行地址:
要获取客户的送货地址:
类似地获取客户的帐单地址: