如何解决嵌套数组数据的 BigTable 设计
我们正在将数据从 BigQuery 批量加载到 BigTable。 API 通过 BigTable 中的 Cloud Functions 访问数据。标头数据和详细信息在当前架构中的两个不同调用中获取。但是我想将标题和详细信息都存储在一个列族中。到目前为止,我没有找到任何解释如何在 BigTable 中存储数组的参考或示例,所以我想这是不可能的。现在,就我而言,能够为 API 层提供服务的最佳替代设计是什么。 数据的一个简化示例,其中 call_reply 是 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":[
]
}
]
提前感谢专家的帮助!
解决方法
这里有几个选项。
-
版本
Bigtable 数据支持版本,因此您可以在行/列交叉处有多个单元格。对于单元格回复,您只需编写每个条目并确保您有一个允许多个版本的 garbage collection rule。如果您将电子邮件和消息存储在同一列中,这将非常有效,但如果您将它们分开存储,则可能会有点挑剔,因为您必须确保每对的时间戳匹配。
-
字节
Bigtable 中的所有内容都存储为字节,因此您可以在编写消息时对其进行编码,并在读取时对其进行解码。这可能会导致更多的开销,但允许您根据需要存储数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。