【问题标题】:How to create complex structure in Cassandra with CQL3如何使用 CQL3 在 Cassandra 中创建复杂的结构
【发布时间】:2013-11-24 11:09:54
【问题描述】:

我在 cassandra 中呈现复杂的数据结构时遇到问题。 JSON 数据示例:

{
  "A": {
    "A_ID" : "1111"
    "field1": "value1",
    "field2": "value2",
    "field3": [
      {
        "id": "id1",
        "name": "name1",
        "segment": [
          {
            "segment_id": "segment_id_1",
            "segment_name": "segment_name_1",
            "segment_value": "segment_value_1"
          },
          {
            "segment_id": "segment_id_2",
            "segment_name": "segment_name_2",
            "segment_value": "segment_value_2"
          },
          ...
        ]
      },
      {
        "id": "id2",
        "name": "name2",
        "segment": [
          {
            "segment_id": "segment_id_3",
            "segment_name": "segment_name_3",
            "segment_value": "segment_value_3"
          },
          {
            "segment_id": "segment_id_4",
            "segment_name": "segment_name_4",
            "segment_value": "segment_value_4"
          },
          ...
        ]
      },
      ...
    ]
  }
}

将只使用一个查询: 按 A_ID 查找。

我认为这些数据应该存储在一个 TABLE(列族)中,并且没有序列化/反序列化操作以提高效率。 如果 CQL 不支持嵌套映射和列表,我该怎么做?

【问题讨论】:

    标签: cassandra data-modeling cql cql3


    【解决方案1】:

    Cassandra 2.1 增加了对嵌套结构的支持:https://issues.apache.org/jira/browse/CASSANDRA-5590

    “仅将其存储为 json/protobuf/avro/etc blob”的缺点是您必须读取和重写整个 blob 才能更新任何字段。因此,至少您应该将顶级字段拉入 Cassandra 列,并酌情利用 collections

    【讨论】:

    • Cassandra 2.1 有预定的发布日期吗?
    【解决方案2】:

    由于您将其仅用作键/值,因此您实际上可以将其存储为 JSON,或者更有效地保存数据,例如 BSON 或事件 Protobuf。

    我个人会将其存储在 Protobuf 记录中,因为它不会保存在您的情况下可能重复的字段名称。

    【讨论】:

    • 非常感谢您的回答。
    猜你喜欢
    • 2012-06-07
    • 1970-01-01
    • 2011-10-06
    • 2011-12-07
    • 1970-01-01
    • 2018-12-12
    • 2014-07-12
    • 2017-09-10
    • 1970-01-01
    相关资源
    最近更新 更多