我想在Google Cloud Bigtable(一些PetaBytes)上存储大量数据用于服务目的。我计划使用主键访问数据,有时使用键前缀查询。
未计划任何数据更新。仅附加到现有表格。
我的问题是:因为我不使用任何列来过滤/查询/排序我的查询(这在Bigtable中是不可能的)无论如何将数据存储在单独的列而不是单个JSON文档中是否有任何好处每排?
谢谢!
答案 0 :(得分:5)
披露:我领导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服务器节点应该达到的性能衡量标准,但您应该对特定的读/写模式进行基准测试,以建立基线规范,并相应地进行扩展。
祝你的项目好运!