我们有包含(大约)20M
行和50,000
列的数据(静态)。这是一个稀疏数据,我们需要快速读取单个单元格值或给定列(该列的所有行)。输入是一个流数据,我们希望根据来自数据库的值(上面提到的值)聚合输入(最后一个x
分钟)。
我们需要一些关于如何实现最低延迟的建议:1. We store the values in the Apache Spark in-memory (on-heap or off-heap) and also process the data using the same. 2. We store the values in Redis/RocksDB and process the data in Apache Spark.
Apache Flink被排除在考虑之外,因为在向堆栈中添加新框架时遇到了阻力,我们正在寻找更稳定的框架(因为这个问题只是项目的一部分)。
发布于 2019-03-20 22:23:21
使用Flink,假设您使用行id作为键,那么您可以通过Map<column id, cell value>
将此数据存储为状态。在幕后,如果你已经将Flink配置为使用RocksDB作为状态后端,那么查找单个单元会更快,因为进入RocksDB的关键是<row id>
+ <column id>
。
您还可以单独按列键入,然后遍历所有行,尽管这显然会更慢-不确定对于给定列的1M行的“快速读取”的定义是什么。
使用这种方法,您可以使用Flink对queryable state的支持来使查找非常容易实现。
https://stackoverflow.com/questions/55247197
复制相似问题