【问题标题】:Google Cloud Bigtable Update or Insert with Versioning带有版本控制的 Google Cloud Bigtable 更新或插入
【发布时间】:2018-10-18 08:12:47
【问题描述】:

我想知道是否应该使用update 查询来更新我的行数据或使用maxversions 并启用版本控制并插入。

我确实理解这可能取决于我需要存储什么样的数据,但只是想知道查询(选择)具有版本控制或非版本控制的数据之间是否存在性能差异。或者insertupdate之间存在性能差异。

【问题讨论】:

  • 插入是什么意思?您会在写入 Cloud Bigtable 的每个单元格上设置显式版本吗?
  • 通过在表格中放置一行而不包含任何版本。就像here
  • 在没有明确版本的情况下放置一行意味着使用“now()”作为时间。

标签: bigtable google-cloud-bigtable


【解决方案1】:

性能受行大小和从服务器返回的数据量的影响。

Bigtable 必须为每个请求读取整行。这将是读取的限制因素。在某些大小(100s+ 的 MB)下,系统性能会在任何时候加载具有该行的平板电脑时降低。当行大小达到 GB 时,您将遇到大问题。

在查询时,性能也会受到从服务器返回的数据量的影响。如果您将GetScan 限制为行的一小部分,您仍然可以获得不错的性能较低的“大行”范围。每行单元格等限制和/或仅检索几个限定符将有助于降低网络成本。

一般来说,如果可以的话,最好保持行更小。这通常通过“插入”和对列族的某种年龄/版本限制的组合来完成。

【讨论】:

  • 所以数据是否有多个版本,获取数据的性能取决于大小。这意味着如果我不需要任何数据(版本)历史记录,我应该只更新目标行。我说的对吗?
  • 不使用明确的时间戳意味着您默认每次都创建新单元格。通常,假设您有 GC 规则,这将起作用。您还可以始终明确地选择一个一致的时间戳,这也将是有效的。
  • @SolomonDuskis 是语句“Bigtable 必须为每个请求读取整行”。尚真?在另一个 SO 问题/答案中,您提到 GCP Cloud Bigtable 将所有列族都放在一个位置组中;所以我想知道当我们只从大表中获取列族的一个子集时,大表主机仍然需要读取整行(所有列族),然后才能返回给我想要的内容。这将帮助我们设计 bigtable 架构。
  • Bigtable(内部非云版本)可以读取来自不同区域组的列族。此时,Cloud Bigtable 产品不提供创建位置组的功能,因此将一次性读取所有行。
  • @SolomonDuskis 感谢您的回答!我的团队对此很疑惑(内部表和 Cloud bigtable 之间的区别之一)。
猜你喜欢
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-22
相关资源
最近更新 更多