我们有(大约)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不在考虑之列,我们正在寻找更稳定的东西(因为此问题只是项目的一部分)。
答案 0 :(得分:0)
使用Flink,假设您使用行ID作为键,则可以通过Map<column id, cell value>
将这些数据存储为状态。如果您已将Flink配置为使用RocksDB作为状态后端,那么查找单个单元很快,因为RocksDB的关键是<row id>
+ <column id>
。
您也可以按列分别键入关键字,并遍历所有行,尽管这显然会很慢-不确定给定列的1M行的“快速读取”的定义是什么。
使用这种方法,您可以使用Flink对queryable state的支持,以使查找非常容易实现。