【问题标题】:How to override default_fetch_size for any query to a cassandra cluster or keyspace?如何覆盖对 cassandra 集群或键空间的任何查询的 default_fetch_size?
【发布时间】:2015-11-27 06:39:59
【问题描述】:

我有一个带有 3 个节点的 cassandra 2.0.5 集群设置。多个服务使用具有不同键空间的同一个集群。由于表中 blob 条目的大小很大,遍历所有行的查询会导致 OutOfMemory 错误并使集群崩溃。这对我来说是不可接受的,因为不同的服务使用同一个集群,一个不应该影响其他服务。

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

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

我可以为每个键空间级别设置此值,以便对特定键空间的所有查询都具有更小的 default_fetch_size 吗?

【问题讨论】:

    标签: cassandra cql cassandra-2.0


    【解决方案1】:
    1. 要为所有语句设置 fetchsize,您可以在构建会话时在 QueryOptions 中执行此操作。像这样的,

      Session session = Cluster.builder()
              .addContactPoint("127.0.0.1")
              .withQueryOptions(new QueryOptions().setFetchSize(100))
              .build().connect();
      
    2. 如果您想为不同的键空间设置不同的 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");
      

    【讨论】:

      【解决方案2】:

      据我所知,您只能设置特定语句的提取大小。 statement.setFetchSize(100);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-09
        • 1970-01-01
        • 2012-10-08
        • 2016-07-21
        • 2016-08-02
        • 1970-01-01
        • 2016-11-18
        相关资源
        最近更新 更多