我想在googlecloudbigtable(几PB)上存储大量的数据以供服务。我计划使用主键访问数据,有时通过键前缀查询。未计划数据更新。仅附加到现有表。我的问题是:既然我不使用任何列来过滤/查询/排序我的查询(这在bigtable中无论如何都是不可能的),那么将数据存储在单独的列而不是每行一个json文档中有什么好处吗?谢谢!
yqlxgs2m1#
披露:我负责云bigtable的产品管理。如果您不打算按每列粒度检索或更新数据,那么将json文档存储为单个值的计划是很好的,特别是因为如果您存储每列数据,则列族名称本身(和限定符)也需要存储在每行中,从而增加存储开销,它与值的数量成比例,因此在你的尺度上可能是有意义的。在您的模型中,您将使用bigtable作为一个简单的键值存储。如果您决定在将来将json拆分为许多列,那么可以向现有bigtable表中添加其他列族(或者只在现有列族中使用其他列限定符),并通过并行过程(如hadoop mapreduce或google cloud dataflow)重写数据。旁注:json非常冗长,占用了一点空间;虽然您可以自己预压缩它,但cloudbigtable本机压缩数据(透明地)以帮助缓解这种情况。也就是说,要考虑的一个替代方案是协议缓冲区或另一个二进制编码,以便更有效地利用空间。考虑到您计划存储多PB的数据,您可能需要超过30个bigtable节点的默认配额。如果需要,请为您的用例请求额外配额。请参阅bigtable性能页面,了解每个bigtable服务器节点的大致性能度量,但是您应该对特定的读/写模式进行基准测试,以建立基准规范,并相应地进行扩展。祝你的项目好运!
1条答案
按热度按时间yqlxgs2m1#
披露:我负责云bigtable的产品管理。
如果您不打算按每列粒度检索或更新数据,那么将json文档存储为单个值的计划是很好的,特别是因为如果您存储每列数据,则列族名称本身(和限定符)也需要存储在每行中,从而增加存储开销,它与值的数量成比例,因此在你的尺度上可能是有意义的。在您的模型中,您将使用bigtable作为一个简单的键值存储。
如果您决定在将来将json拆分为许多列,那么可以向现有bigtable表中添加其他列族(或者只在现有列族中使用其他列限定符),并通过并行过程(如hadoop mapreduce或google cloud dataflow)重写数据。
旁注:json非常冗长,占用了一点空间;虽然您可以自己预压缩它,但cloudbigtable本机压缩数据(透明地)以帮助缓解这种情况。也就是说,要考虑的一个替代方案是协议缓冲区或另一个二进制编码,以便更有效地利用空间。
考虑到您计划存储多PB的数据,您可能需要超过30个bigtable节点的默认配额。如果需要,请为您的用例请求额外配额。
请参阅bigtable性能页面,了解每个bigtable服务器节点的大致性能度量,但是您应该对特定的读/写模式进行基准测试,以建立基准规范,并相应地进行扩展。
祝你的项目好运!