3

我在 GCS 中有不断增长的数据,并且将有一个批处理作业运行,可以说每天处理 100 万篇文章增量。我需要从 BigTable(包含数十亿条记录)中获取键的附加信息。对地图操作中的每个项目进行查找是否可行?批处理这些查找并执行诸如批量读取之类的操作是否有意义?或者使用 scio/beam 的这个用例的最佳方法是什么?

我在Pattern: Streaming mode large lookup tables中发现,对每个请求执行查找是推荐的流式方法,但是我不确定我是否不会通过批处理作业重载 BigTable。

你们对如何处理这个用例有任何总体或具体的建议吗?

4

2 回答 2

3

我以前帮助过其他人,但在基础数据库/梁中。您需要批量聚合密钥以获得最佳性能。每批 25 到 100 个键之间的某个地方是有意义的。如果您可以对列表进行预排序,以便您的查找更有可能在每个请求中命中更少的 Cloud Bigtable 节点。

您可以直接使用 Cloud Bigtable 客户端,只需确保使用“使用批量”设置,或者使用单例缓存客户端即可。

这肯定会对您的 Cloud Bigtable 集群产生影响,但我无法告诉您影响程度。您可能需要增加集群的大小,以免 Cloud Bigtable 的其他用途受到影响。

于 2019-03-25T16:11:52.600 回答
2

我们在 Scio 中有一个助手BigtableDoFn 。它不会批处理,但至少抽象出DoFnso processElement/map函数中的异步请求处理不会被网络往返阻塞。

于 2019-04-09T14:40:04.713 回答