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

Posted

技术标签:

【中文标题】Bigtable / HBase:丰富的列族与单个 JSON 对象【英文标题】:Bigtable / HBase: Rich column family vs a single JSON Object 【发布时间】:2016-10-21 02:08:15 【问题描述】:

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

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

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

谢谢!

【问题讨论】:

【参考方案1】: 推荐的答案 Google Cloud

披露:我负责 Cloud Bigtable 的产品管理。

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

如果您决定将来将 JSON 拆分为多个列,您可以将其他列族添加到现有 Bigtable 表(或仅在现有列族中使用其他列限定符)并通过并行重写您的数据进程如Hadoop MapReduce或Google Cloud Dataflow。

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

鉴于您计划存储数 PB 的数据,您可能需要 30 个 Bigtable 节点中的 more than the default quota — 如果需要,请为您的用例提供 request additional quota。

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

祝你的项目好运!

【讨论】:

以上是关于Bigtable / HBase:丰富的列族与单个 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

gcp bigtable 中的列族是啥,数据如何存储在 bigtable 中?

如何从 google bigtable 中删除特定的列族数据

为什么不建议在 HBase 中使用过多的列族

为什么不建议在 HBase 中使用过多的列族

HBASE表设计

HBase-2HBase的原理和架构