Bigtable - read_rows 和 start_key

Posted

技术标签:

【中文标题】Bigtable - read_rows 和 start_key【英文标题】:Bigtable - read_rows and start_key 【发布时间】:2019-02-04 17:46:26 【问题描述】:

有没有办法为 Bigtable 编写 start_key?我找不到关于 start_key 语法的明确文档。

假设我有一个用户活动的 domain_timestamp 行键。

要将查询过滤到特定域,我可以使用过滤器(较慢)或 start_key(较快)。

我一直将我的start_key 字符串写为domain_,但是如果我们现在有domainuser IDtimestamp,现在我想按除特定时间以外的任何用户进行过滤,我可以使用domain_*_timestamp之类的东西吗?

【问题讨论】:

【参考方案1】:

您必须使用带有RegexStringComparator 的过滤器。您也可以setStart(domain_) 以获得更好的性能。不幸的是,这几乎要对domain_ 进行扫描并在服务器端进行过滤。

使用随机用户 ID 进行搜索可能会更快,或者如果您需要所有用户,则使用 Table.get(List<Get>),其中每个 Get 对应于单个用户。

【讨论】:

听起来更好的解决方案是保留两张表,一张使用 domain row_key,另一张使用 domain_user?所以我们得到了最快的查询速度。 那行得通。您只是无法 100% 地保持这些表同步,因为 Cloud Bigtable 没有跨表(或跨同一表中的多行)的事务。

以上是关于Bigtable - read_rows 和 start_key的主要内容,如果未能解决你的问题,请参考以下文章

BigTable Design - BigTable单元格大小的上限

BigTable 设计 - BigTable 单元格大小的上限

Bigtable中稀疏表的稀疏和目的是啥?

浅析 Bigtable 和 LevelDB 的实现

浅析 Bigtable 和 LevelDB 的实现

使用 Python 的 Bigtable 模拟器和 Google 发现资源