【问题标题】:How to handle designing issue of cassandra table output used into another cassandra table input?如何处理用于另一个 cassandra 表输入的 cassandra 表输出的设计问题?
【发布时间】:2019-08-31 01:37:07
【问题描述】:

有两个表如下:

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* 表中填充结果。

对于 web 服务端点,最终用户可以通过 require where 条件并从 first(model_vals) C* 表中获取数据。

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

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

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

【问题讨论】:

    标签: nosql datastax cassandra-3.0 nosql-aggregation


    【解决方案1】:

    您有多种选择,具体取决于您需要完成的工作的复杂程度。一般来说,听起来您需要某种流框架,在将新数据写入记录的同时,还执行一些业务逻辑并写入第二个表。

    想到的一些技术是,

    1. Spark 流媒体
    2. Flink
    3. 顶点

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

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

    【讨论】:

    • 谢谢你 Russel,一如既往的及时和乐于助人。是的,正如我所说的,我已经在使用 spark sql。但是如何将 C* 分区映射到 spark 分区、任何关于它的示例或博客?
    • 映射 Cassandra 和 spark 分区通常并不重要,这个细节级别由 spark Cassandra 连接器在后台处理。也许您可以再问一个更具体的问题?
    猜你喜欢
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2018-08-18
    • 2014-02-04
    • 2014-08-18
    • 2019-04-09
    • 1970-01-01
    相关资源
    最近更新 更多