cassandra - 在 Cassandra 中每次作业运行时查找大约 40k 条记录和 1.5 亿条记录?
问题描述
我正在构建一个使用 Cassandra 作为查找存储的近实时/微批量数据应用程序。每次增量运行有大约 40K 记录,而 Cassandra 表有大约 1.5 亿条记录。在每次运行中,我都需要查找 id 字段并从 Cassandra 获取一些属性。这些查找可以是随机的(不依赖于任何时间/地区/国家/地区),因此没有明确的分区方案。
我应该如何尝试对 Cassandra 表进行分区以确保体面/良好的性能(对于每 15-30 分钟运行的微批处理)?
除了分区,还有其他技巧吗?
解决方案
joinWithCassandraTable
和leftJoinWithCassandraTable
函数是专门为在 Cassandra 中从 Spark 作业中高效查找数据而设计的。它通过主键或分区键执行数据获取,并且由于它由多个执行器并行执行,因此速度可能很快(尽管 ~40K 仍可能需要时间,但这取决于 Cassandra 和 Spark 集群的大小)。有关如何使用它的详细信息,请参阅SCC 的文档- 但请记住,这些函数仅在 RDD API 中可用。DataStax 的连接器版本支持所谓的“DirectJoin”——在 DataFrame API 中与 Cassandra 进行高效连接。
关于分区-这取决于您如何执行查找-您在 Cassandra 中有 1 条记录与 Spark 中的一条记录匹配?如果是,那么只需将此 ID 用作主键(在这种情况下它等于分区键)。
推荐阅读
- mysql - 生成缓存请求结果的最佳实践
- haskell - 使用haskel实现快速排序
- visual-studio-code - VS Code 扩展列表中的扩展图标上的数字徽章是什么意思?
- java - 如何使用其片段使 RelativeLayout 可滚动?- 科特林
- r - 在使用 ggplot2 打印为条形图之前按 R 中的数字排序
- laravel-5 - yaijra 数据表中的多个数组
- android - 如何更改android studio中的默认主题?
- mongodb - 如何通过字符串输入查找集合中的项目?
- laravel - 命令线:jQuery中的poll.1000ms
- angular - 有没有办法在 Excel 阅读时将 XLSX 单元格格式更改为 Angular 中的文本?