Как справиться с проблемой проектирования вывода таблицы Кассандры, используемой при вводе другой таблицы Кассандры? - PullRequest
0 голосов
/ 09 апреля 2019

Есть две таблицы, как показано ниже:

CREATE TABLE model_vals (
    model_id int,
    data_item_code text,
    date date,
    data_item text,
        pre_cal1 text,
    pre_cal2 text,
        pre_cal3 text,
    pre_cal4 text,
        pre_cal5 text,
    pre_cal6 text,
    PRIMARY KEY (( model_id, data_item ), date)
) WITH CLUSTERING ORDER BY ( date DESC )


CREATE TABLE prapre_calulated_vals (
    id int,
    precal_code text,
    date date,
    precal_item text,
    pre_cal1 text,
    pre_cal2 text,
    pre_cal3 text,
    pre_cal4 text,
    pre_cal5 text,
    pre_cal6 text,
    PRIMARY KEY (( id, precal_item ), date)
) WITH CLUSTERING ORDER BY ( date DESC )

После обработки входных данных от Kafka с использованием spark-sql данные результата вставляются в первую (model_vals) C * таблицу. Которые также служат конечным точкам некоторых веб-сервисов.

Другой бизнес-логике нужны данные сверху первой (model_vals) C * таблицы, обработайте ее, заполнив повторы в второй (prapre_calulated_vals) C * таблице.

Для конечной точки веб-службы конечный пользователь может передать требование где и получить данные из первой таблицы (model_vals) C *.

Но для дальнейшей обработки мне нужно прочитать всю первую (model_vals) C * таблицу, обработать данные, выполнить другой набор вычислений и заполнить вторую (prapre_calulated_vals) C * таблицу.

Первая (model_vals) C * таблица имеет миллион записей, поэтому мы не можем загрузить всю таблицу за один раз для обработки ..

Как справиться с этим сценарием в C *? Какие альтернативы у меня есть, чтобы справиться с этой ситуацией?

1 Ответ

1 голос
/ 10 апреля 2019

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

Некоторые технологии, которые приходят на ум,

  1. Spark Streaming
  2. Flink
  3. Апекс

Все эти технологии имеют коннекторы для Cassandra, которые позволяют считывать как целые таблицы, так и части таблиц эффективным образом для объединения новых данных. Конечно, это будет медленнее, чем методы агрегации плоских файлов или меньшие запросы к небольшим объемам данных.

Если вам не нужен потоковый подход, поскольку вы уже используете Spark, я бы предложил использовать следующий запрос SparkSQL для заполнения вашей финальной таблицы.

...