cassandra读取查询使用springframework数据cassandra返回空结果

jjhzyzn0  于 2021-06-09  发布在  Cassandra
关注(0)|答案(1)|浏览(485)

当我执行cassandra read查询时,它总是返回空结果,但cassandra表中存在记录。
当删除操作发生时,我遇到了这个问题 在同一个分区上。
例如:分区a包含1M条记录,以前我删除了同一分区a上的900k条记录。后来我无法在同一个分区上获得剩余的10万条记录。有时抛出readtimeoutexception或返回空结果。
这是在使用springframework数据cassandra进行查询时发生的。我可以在cassandra工具(datastax或dbeaver)中执行相同的查询并获得结果。
你能帮我解决这个问题吗?

dm7nw8vv

dm7nw8vv1#

cassandra不会立即删除数据,它会标记为删除,并在配置时间后删除。与此同时,您的查询可能需要更长的时间。如果需要更快地删除数据,则需要运行compact:

./nodetool compact <ks_name> <cf_name>

在任何情况下,生产中的数据库都需要压缩以保持良好的状态。
从springboot查询100k行在时间、通过可用带宽传输的信息量和所用内存方面都是昂贵的。您能发布配置的详细信息并检查spring boot microservice服务器在查询过程中是否内存不足和正在交换吗?。

free -h

更多的东西。你能检查一下你在从spring boot查询哪个节点吗?。你能把spring boot寄来的cql贴在这里吗?。您是从cqlsh查询该节点/分区上的数据还是所有的100k行?。您是否在SpringBoot项目中使用负载均衡器、代理服务或任何其他服务(如consul)?。
为了解决网络问题,ssh连接到您希望查询的cassandra节点,并使用tcpdump检查它是否有效地从运行微服务的计算机获得连接。
假设带spring boot的机器是10.0.10.100,ssh到您认为正在接收连接的cassandra节点并执行:

sudo tcpdump | grep "10.0.10.100"

现在尝试从spring boot运行查询。
在spring引导服务器中打开iftop,查看从cassandra获取的带宽消耗是多少。

iftop

希望有帮助。请提供更多信息。
干杯

相关问题