cassandra数据库-获取大量数据

h9a6wy2h  于 2021-06-13  发布在  Cassandra
关注(0)|答案(1)|浏览(402)

有一个cassandra2.x数据库,在这个数据库中,我必须使用非主键列从一个表中选择一些数据,这是另一个使用简单where子句的表的主列。数据在缓存中使用。问题是检索过程太慢,并且使用DataStax3.x驱动程序获取timedout。有没有办法在不升级数据库软件或改变现有数据库结构的情况下获取数据。我尝试使用datastax api进行异步获取和分页,但它仍然无法处理大量数据,查询失败。

mctunoxg

mctunoxg1#

cassandra对通过主键(完全、部分或至少分区键)访问数据进行了大量优化。其他访问模式需要额外的工作。从理论上讲,您可以在相应的列上使用辅助索引,但只有在您搜索数据时才建议您至少使用分区键—如果您仅使用该列,它仍将到达所有节点并获取所有数据,因此速度会慢得多。您需要记住其他限制,例如列的基数等(您可以在这里阅读)。
以编程的方式,您也可以对数据进行完整扫描,但这并不简单 select * from table 因为它会使协调节点过载,导致超时等。相反,它应该是更复杂的解决方案-最好通过读取各个令牌范围的数据来执行扫描,将查询发送到保留相应范围的节点,而且可以并行执行—这就是spark cassandra连接器和dsbulk的工作方式(我认为您可以尝试为此任务采用dsbulk代码片段—可以将其用作库)。我还举了一个例子,说明如何使用java驱动程序执行全表扫描—您可以采用这段代码,并用过滤条件替换简单的计数。

相关问题