6

我想在 Google Cloud Bigtable(几个 PetaBytes)上存储大量数据以供服务。我计划使用主键访问数据,有时通过键前缀查询。

没有数据更新计划。仅附加到现有表。

我的问题是:由于我不使用我的任何列来过滤/查询/排序我的查询(无论如何这在 Bigtable 中是不可能的)将我的数据存储在单独的列中而不是每行单个 JSON 文档有什么好处?

谢谢!

4

1 回答 1

13

披露:我领导 Cloud Bigtable 的产品管理。

如果您不打算以每列粒度检索或更新数据,那么将 JSON 文档存储为单个值的计划很好,特别是因为如果您存储每列数据,则列族名称本身(以及限定符) 还需要存储在每一行中,因此会增加存储开销,这与值的数量成正比,因此可能对您的规模有意义。在您的模型中,您将 Bi​​gtable 用作简单的键值存储。

如果您确实决定将来将 JSON 拆分为许多列,则可以向现有 Bigtable 表添加额外的列族(或仅在现有列族中使用额外的列限定符)并通过并行过程重写数据,例如Hadoop MapReduce谷歌云数据流

旁注:JSON 非常冗长,占用了一些空间;虽然您可以自己预压缩它,但 Cloud Bigtable 会以原生方式(透明地)压缩数据以帮助缓解这种情况。也就是说,要考虑的一种替代方法是协议缓冲区或另一种二进制编码,以更有效地利用空间。

鉴于您计划存储数 PB 的数据,您可能需要超过30 个 Bigtable 节点的默认配额 - 如果需要,请为您的用例申请额外配额

请参阅Bigtable 性能页面,了解您对每个 Bigtable 服务器节点的预期性能的大致衡量标准,但您应该对特定的读/写模式进行基准测试以建立基线规范,并相应地进行扩展。

祝你的项目好运!

于 2016-07-05T15:21:41.090 回答