如何处理用于另一个cassandra表输入的cassandra表输出的设计问题?

问题描述 投票:0回答:1

有两个表如下:

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 )

在使用spark-sql处理来自Kafka的输入数据之后,将结果数据插入到第一个(model_vals)C *表中。这进一步服务于一些Web服务端点。

另一个业务逻辑需要来自第一个(model_vals)C *表的数据,在第二个(prapre_calulated_vals)C *表中处理填充的restuls。

对于Web服务端点,最终用户可以通过require where condition并从第一个(model_vals)C *表获取数据。

但是进一步处理我需要读取整个第一个(model_vals)C *表,处理数据,做其他计算并填充第二个(prapre_calulated_vals)C *表。

第一个(model_vals)C *表有数百万个记录,所以我们不能一次加载整个表来处理..

如何在C *中处理这种情况?我有什么办法来处理这种情况?

nosql datastax cassandra-3.0 nosql-aggregation
1个回答
1
投票

根据您需要完成的复杂程度,您有多种选择。一般来说,听起来你需要某种流式框架,同时将新数据写入记录,还要做一些业务逻辑并写入第二个表。

想到的一些技术是,

  1. Spark Streaming
  2. 弗林克
  3. 顶尖

所有这些技术都具有Cassandra连接器,能够以高效的方式读取整个表以及表的一部分,以便与新数据进行连接。当然,这比平面文件上的聚合技术要慢,或者对微量数据进行较小的请求。

如果您不需要流式处理方法,因为您已经在使用Spark,我建议使用后续的SparkSQL查询来填充您的最终表。

© www.soinside.com 2019 - 2024. All rights reserved.