如何为对 cassandra 集群或键空间的任何查询覆盖 default_fetch_size?
How to override default_fetch_size for any query to a cassandra cluster or keyspace?
我有一个带有 3 个节点的 cassandra 2.0.5 集群设置。多个服务使用具有不同键空间的同一个集群。由于 table 中的 blob 条目很大,遍历所有行的查询会导致 OutOfMemory 错误并使集群崩溃。这对我来说是 unacceptable,因为不同的服务使用同一个集群,一个不应该影响其他。
现在,有一种方法可以使用 fetchSize 参数来限制每次查询一次加载到内存中的行数,大多数驱动程序都支持 cluster 2.0 协议。
default_fetch-size 值为 5000,我想将此值覆盖为更小的值,例如 500,以避免 OOM 错误。我不能假设所有客户端在发出昂贵的查询时都会使用较小的 fetchSize。有办法吗?我在 cassandra.yaml 中找不到任何此类配置。
我可以按键空间级别设置它吗,以便对特定键空间的所有查询都将具有较小的 default_fetch_size?
据我所知,您只能设置特定语句的提取大小。 statement.setFetchSize(100);
要在所有语句上设置 fetchsize,您可以在构建会话时在 QueryOptions 中进行设置。像这样,
Session session = Cluster.builder()
.addContactPoint("127.0.0.1")
.withQueryOptions(new QueryOptions().setFetchSize(100))
.build().connect();
如果您想为不同的键空间设置不同的提取大小,则为每个键空间维护会话对象。像这样,
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");
我有一个带有 3 个节点的 cassandra 2.0.5 集群设置。多个服务使用具有不同键空间的同一个集群。由于 table 中的 blob 条目很大,遍历所有行的查询会导致 OutOfMemory 错误并使集群崩溃。这对我来说是 unacceptable,因为不同的服务使用同一个集群,一个不应该影响其他。
现在,有一种方法可以使用 fetchSize 参数来限制每次查询一次加载到内存中的行数,大多数驱动程序都支持 cluster 2.0 协议。
default_fetch-size 值为 5000,我想将此值覆盖为更小的值,例如 500,以避免 OOM 错误。我不能假设所有客户端在发出昂贵的查询时都会使用较小的 fetchSize。有办法吗?我在 cassandra.yaml 中找不到任何此类配置。
我可以按键空间级别设置它吗,以便对特定键空间的所有查询都将具有较小的 default_fetch_size?
据我所知,您只能设置特定语句的提取大小。 statement.setFetchSize(100);
要在所有语句上设置 fetchsize,您可以在构建会话时在 QueryOptions 中进行设置。像这样,
Session session = Cluster.builder() .addContactPoint("127.0.0.1") .withQueryOptions(new QueryOptions().setFetchSize(100)) .build().connect();
如果您想为不同的键空间设置不同的提取大小,则为每个键空间维护会话对象。像这样,
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");