google-bigquery - 嵌套(数组)数据的 BigTable 设计
问题描述
我们正在将数据从 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":[
]
}
]
提前感谢专家的帮助!
解决方案
您在这里有几个选择。
版本
Bigtable 数据支持版本,因此您可以在行/列交叉处有多个单元格。对于单元格回复,您只需编写每个条目并确保您有一个允许多个版本的垃圾收集规则。如果您将电子邮件和消息存储在同一列中,这将非常有用,但如果您将它们分开存储,则可能会有点挑剔,因为您必须确保每对的时间戳匹配。
字节
Bigtable 中的所有内容都存储为字节,因此您可以在编写消息时对其进行编码,并在阅读时对其进行解码。这可能会导致更多开销,但可以让您按照您认为合适的方式存储数据。
推荐阅读
- python - Kivy: TypeError: object.__init__() 只接受一个参数(要初始化的实例)
- ruby - 打包器文档生成中缺少文件
- mysql - 获取存在特定值的行,如果不存在则显示具有其他值的行
- r - 如何在密度图中添加来自 geom_vline 的 x 截距作为标签?
- javascript - 这种循环行为在 Swiper 中是否可行?
- node.js - 查找文档及其引用的文档
- azure - 如何在 Azure 应用服务上安装二进制文件?
- c - SO_RCVTIMEO 超时值在 recv_from API 中不生效
- reactjs - 400 Bad Request 错误与烧瓶服务器反应客户端的 socketio
- php - 签名表现形式 - 使用签名图像添加日期和时间