将批处理数据与存储在 BigTable 中的数据合并

Join batch data with data stored in BigTable

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

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

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

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

您可以直接使用 Cloud Bigtable 客户端,只需确保使用 "use bulk" 设置,或者使用单例来缓存客户端。

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

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