当我执行cassandra read查询时,它总是返回空结果,但cassandra表中存在记录。
当删除操作发生时,我遇到了这个问题 在同一个分区上。
例如:分区a包含1M条记录,以前我删除了同一分区a上的900k条记录。后来我无法在同一个分区上获得剩余的10万条记录。有时抛出readtimeoutexception或返回空结果。
这是在使用springframework数据cassandra进行查询时发生的。我可以在cassandra工具(datastax或dbeaver)中执行相同的查询并获得结果。
你能帮我解决这个问题吗?
1条答案
按热度按时间dm7nw8vv1#
cassandra不会立即删除数据,它会标记为删除,并在配置时间后删除。与此同时,您的查询可能需要更长的时间。如果需要更快地删除数据,则需要运行compact:
在任何情况下,生产中的数据库都需要压缩以保持良好的状态。
从springboot查询100k行在时间、通过可用带宽传输的信息量和所用内存方面都是昂贵的。您能发布配置的详细信息并检查spring boot microservice服务器在查询过程中是否内存不足和正在交换吗?。
更多的东西。你能检查一下你在从spring boot查询哪个节点吗?。你能把spring boot寄来的cql贴在这里吗?。您是从cqlsh查询该节点/分区上的数据还是所有的100k行?。您是否在SpringBoot项目中使用负载均衡器、代理服务或任何其他服务(如consul)?。
为了解决网络问题,ssh连接到您希望查询的cassandra节点,并使用tcpdump检查它是否有效地从运行微服务的计算机获得连接。
假设带spring boot的机器是10.0.10.100,ssh到您认为正在接收连接的cassandra节点并执行:
现在尝试从spring boot运行查询。
在spring引导服务器中打开iftop,查看从cassandra获取的带宽消耗是多少。
希望有帮助。请提供更多信息。
干杯