【问题标题】:BigTable design for nested (array) data嵌套(数组)数据的 BigTable 设计
【发布时间】:2021-09-27 06:14:09
【问题描述】:

我们正在将数据从 BigQuery 批量加载到 BigTable。 API 通过 BigTable 中的 Cloud Functions 访问数据。标头数据和详细信息在当前架构中的两个不同调用中获取。但是,我想将标题和详细信息存储在一个列族中。到目前为止,我没有找到任何解释如何在 BigTable 中存储数组的参考资料或示例,所以我想这是不可能的。现在,就我而言,能够为 API 层提供服务的最佳替代设计是什么。 数据的简化示例,其中 call_replies 是 BigQuery 中的 STRUCT:

[
   {
      "call_id":"123",
      "caller":"Jeff",
      "call_creation_timestamp":"2020-01-01 19:20:35",
      "call_replies":[
         {
            "email":"Bladiebla@gmail.com",
            "message":"Bladiebla"
         },
         {
            "email":"jaryjary@gmail.com",
            "message":"Jaryjary"
         }
      ]
   },
   {
      "call_id":"456",
      "caller":"John",
      "call_creation_timestamp":"2020-01-01 20:20:35",
      "call_replies":[
         
      ]
   }
]

提前感谢专家的帮助!

【问题讨论】:

    标签: google-bigquery hbase google-cloud-bigtable


    【解决方案1】:

    这里有几个选项。

    1. 版本

      Bigtable 数据支持版本,因此您可以在行/列交叉处有多个单元格。对于单元格回复,您只需编写每个条目并确保您有一个允许多个版本的garbage collection rule。如果您将电子邮件和消息存储在同一列中,这将非常有用,但如果您将它们分开存储,则可能会有点挑剔,因为您必须确保每对的时间戳匹配。

    2. 字节

      Bigtable 中的所有内容都存储为字节,因此您可以在编写消息时对其进行编码,并在读取时对其进行解码。这可能会导致更多开销,但可以让您根据需要存储数据。

    【讨论】:

    • 嗨,比利,感谢您的回答。最后,我们只需将对象转储为 JSON 字符串并将其存储在一列中。它满足我们的所有需求。
    猜你喜欢
    • 2022-11-04
    • 2011-02-07
    • 2010-12-02
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多