Bigtable / HBase:丰富的列族与单个 JSON 对象

Bigtable / HBase: Rich column family vs a single JSON Object

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

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

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

谢谢!

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

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

如果您决定在将来将 JSON 分成许多列,您可以向现有的 Bigtable table 添加额外的列族(或者只使用额外的现有列族中的列限定符)并通过 Hadoop MapReduce or Google Cloud Dataflow.

等并行过程重写数据

旁注:JSON 非常冗长,占用了一些 space;虽然您可以自己进行预压缩,但 Cloud Bigtable 会以本机方式(透明地)压缩数据以帮助缓解这种情况。也就是说,要考虑的一种替代方法是 protocol buffers 或另一种二进制编码,使用 space.

更有效

鉴于您计划存储数 PB 的数据,您的用例可能需要 more than the default quota of 30 Bigtable nodes—if so, please request additional quota

请参阅 Bigtable performance page 以了解每个 Bigtable 服务器节点应预期的大致性能衡量标准,但您应该对特定 read/write 模式进行基准测试以建立基准规范,并相应地缩放。

祝你的项目好运!