首页 > 解决方案 > 在 Cassandra 中每次作业运行时查找大约 40k 条记录和 1.5 亿条记录?

问题描述

我正在构建一个使用 Cassandra 作为查找存储的近实时/微批量数据应用程序。每次增量运行有大约 40K 记录,而 Cassandra 表有大约 1.5 亿条记录。在每次运行中,我都需要查找 id 字段并从 Cassandra 获取一些属性。这些查找可以是随机的(不依赖于任何时间/地区/国家/地区),因此没有明确的分区方案。

我应该如何尝试对 Cassandra 表进行分区以确保体面/良好的性能(对于每 15-30 分钟运行的微批处理)?

除了分区,还有其他技巧吗?

标签: cassandraapache-kafka

解决方案


joinWithCassandraTableleftJoinWithCassandraTable函数是专门为在 Cassandra 中从 Spark 作业中高效查找数据而设计的。它通过主键或分区键执行数据获取,并且由于它由多个执行器并行执行,因此速度可能很快(尽管 ~40K 仍可能需要时间,但这取决于 Cassandra 和 Spark 集群的大小)。有关如何使用它的详细信息,请参阅SCC 的文档- 但请记住,这些函数仅在 RDD API 中可用。DataStax 的连接器版本支持所谓的“DirectJoin”——在 DataFrame API 中与 Cassandra 进行高效连接。

关于分区-这取决于您如何执行查找-您在 Cassandra 中有 1 条记录与 Spark 中的一条记录匹配?如果是,那么只需将此 ID 用作主键(在这种情况下它等于分区键)。


推荐阅读