我想在Google Cloud Bigtable(几个PetaBytes)上存储大量数据以用于服务目的。我计划使用主键(有时通过键前缀查询)访问数据。
没有计划进行数据更新。仅追加到现有表。
我的问题是:由于我不使用任何列来过滤/查询/对查询进行排序(无论如何在Bigtable中是不可能的),将数据存储在单独的列中而不是每行存储一个JSON文档是否有好处?
谢谢!
最佳答案
披露:我负责Cloud Bigtable的产品管理。
如果您不打算按每个列的粒度来检索或更新数据,那么将JSON文档存储为单个值的计划就可以了,特别是因为如果您存储每个列的数据,则列族名称本身(以及限定符)就可以了。 )也需要存储在每一行中,从而增加了存储开销,该开销与值的数量成正比,因此在您的规模上可能是有意义的。在模型中,您将Bigtable用作键值存储。
如果您决定将来将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服务器节点应该获得的性能指标,但是您应该对特定的读/写模式进行基准测试,以建立基准规范并相应地进行扩展。
祝您项目顺利!
关于json - Bigtable/HBase : Rich column family vs a single JSON Object,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37912017/