Способы хранения пар ключ-значение с оптимизированным чтением для использования вместе с механизмом потоковой обработки - PullRequest
0 голосов
/ 19 марта 2019

У нас есть данные (статические) с (приблизительно) 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 голосов
/ 20 марта 2019

С Flink, если вы используете идентификатор строки в качестве ключа, тогда вы можете сохранить эти данные как состояние через Map<column id, cell value>.Если вы настроили Flink на использование RocksDB в качестве бэкэнда состояния, то поиск одной ячейки будет быстрым, поскольку ключом к RocksDB является <row id> + <column id>.

.Отдельно вводите по столбцам и выполняйте итерацию по всем строкам, хотя это, очевидно, будет медленнее - не уверен, что такое определение «быстрого чтения» для 1M строк данного столбца.

При таком подходе вызатем можно использовать поддержку Flink для запрашиваемого состояния , чтобы сделать поиск очень простым для реализации.

...