我使用的是部署在3个不同vm上的3节点cassandra3.0.14。我有大量的数据(数十亿),我想快速搜索我的Cassandra架构。
我对Cassandra做了很多研究,但仍然面临一些我无法理解的问题:
1-当我使用cqlsh时,我可以做一个查询来分析我的所有数据库 SELECT DISTINCT val_1 FROM myTable;
正在工作。
但是,我不能使用java代码和datastax驱动程序发出相同的请求。我的脚本返回: Caused by: com.datastax.driver.core.exceptions.OperationTimedOutException: [/XX.XX.XX.XX:9042] Timed out waiting for server response
2-某些请求正在使用cqlsh工作,但发出更具体的请求将导致请求超时: OperationTimedOut: errors={'127.0.0.1': 'Client request timeout. See Session.execute[_async](timeout)'}, last_host=127.0.0.1
例如,如果我提出这个请求: SELECT val_1 FROM myTable where time>'2018-09-16 09:00:00';
会有用的 SELECT val_1 FROM myTable where time>'2018-09-16 09:00:00' and time<'2018-09-17 09:00:00';
会导致超时
我把我的请求超时时间改为60秒,但我知道这不是一个好的做法。我还增加了我的read\ u request\ u timeout\ in\ ms和range\ u request\ u timeout\ in\ ms,但我仍然有以前的问题。
有人会有同样的问题吗?
-尼古拉斯
2条答案
按热度按时间watbbzwu1#
这是因为你用Cassandra的方法不正确。只有在查询中指定了分区键时,范围操作、distinct等才能发挥最佳效果。否则,cassandra将需要扫描整个集群,试图找到所需的数据,这将导致即使在中型数据库上也会超时。不要使用
ALLOW FILTERING
强制执行查询。在cassandra中,数据库结构是围绕要执行的查询建模的。我建议从税务学院学习ds201和ds220课程。
aamkag612#
尝试在java代码中调整客户端超时,如下所示: