2015-01-16 31 views
0

我有一个cassandra 2.0.5群集设置与3个节点。多个服务使用具有单独密钥空间的相同群集。由于表中blob条目的大小,遍历所有行的查询会导致OutOfMemory错误并导致群集崩溃。这对我来说是不能接受的,因为不同的服务使用相同的群集,而且不应该影响其他服务。如何覆盖default_fetch_size对cassandra集群或密钥空间的任何查询?

现在,有一种方法可以限制每次查询使用fetchSize参数在一次查询时加载到内存中的行数,其中大多数驱动程序支持cluster 2.0协议。

default_fetch-size值为5000,我想将此值覆盖为像500这样的小值以避免OOM错误。我不能假设所有客户端都会在发出昂贵的查询时使用小的fetchSize。有没有办法做到这一点?我在cassandra.yaml中找不到任何此类配置。

我可以为每个密钥空间级别设置此设置,因此对特定密钥空间的所有查询都将具有较小的default_fetch_size?

回答

0
  1. 要设置的所有语句FETCHSIZE,你可以做,在QueryOptions当你建立你的会话。事情是这样的,

    Session session = Cluster.builder() 
         .addContactPoint("127.0.0.1") 
         .withQueryOptions(new QueryOptions().setFetchSize(100)) 
         .build().connect(); 
    
  2. 如果你想有不同的FETCHSIZE针对不同keyspaces然后为每一个密钥空间会话对象。类似这样的,

    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"); 
    
0

我知道你只能设置特定语句的获取大小。 statement.setFetchSize(100);

相关问题