我有一个带有3个节点的cassandra 2.0.5群集设置。多个服务使用具有单独密钥空间的相同群集。由于表中blob条目的大小,遍历所有行的查询会导致OutOfMemory错误并导致群集崩溃。这对我来说是不可接受的,因为不同的服务使用相同的群集,而不应该影响其他群集。
现在,有一种方法可以使用fetchSize参数限制每个查询一次在内存中加载的行数,并使用大多数驱动程序支持集群2.0协议的查询。
default_fetch-size值为5000,我想将此值重写为小于500的值以避免OOM错误。我不能假设所有客户端在发出昂贵的查询时都会使用小的fetchSize。有办法吗?我在cassandra.yaml中找不到任何这样的配置。
我可以在每个键空间级别设置此值,因此对特定键空间的所有查询都会有一个较小的default_fetch_size吗?
答案 0 :(得分:0)
我所知道的是,您只能设置特定语句的提取大小。 statement.setFetchSize(100);
答案 1 :(得分:0)
要在所有语句上设置fetchsize,可以在构建会话时在QueryOptions中执行此操作。像这样的东西,
Session session = Cluster.builder()
.addContactPoint("127.0.0.1")
.withQueryOptions(new QueryOptions().setFetchSize(100))
.build().connect();
如果要为不同的键空间使用不同的fetchsize,则为每个键空间维护会话对象。像这样的东西,
Session sessionForKeyspace1 = Cluster.builder()
.addContactPoint("127.0.0.1")
.withQueryOptions(new QueryOptions().setFetchSize(100))
.build().connect("keyspace1");
Session sessionForKeyspace2 = Cluster.builder()
.addContactPoint("127.0.0.1")
.withQueryOptions(new QueryOptions().setFetchSize(200))
.build().connect("keyspace2");