与优化的读取一起存储键值对的方法,与流处理引擎一起使用

时间:2019-03-19 17:53:42

标签: apache-spark redis streaming spark-streaming rocksdb

我们有(大约)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不在考虑之列,我们正在寻找更稳定的东西(因为此问题只是项目的一部分)。

1 个答案:

答案 0 :(得分:0)

使用Flink,假设您使用行ID作为键,则可以通过Map<column id, cell value>将这些数据存储为状态。如果您已将Flink配置为使用RocksDB作为状态后端,那么查找单个单元很快,因为RocksDB的关键是<row id> + <column id>

您也可以按列分别键入关键字,并遍历所有行,尽管这显然会很慢-不确定给定列的1M行的“快速读取”的定义是什么。

使用这种方法,您可以使用Flink对queryable state的支持,以使查找非常容易实现。