当前位置: 首页 > 面试题库 >

Cassandra-有没有办法限制异步查询的数量?

从劲
2023-03-14
问题内容

我想知道是否有办法限制cassandra java驱动程序同时执行的查询数量?

当前,我执行许多查询,如下所示:

... 
PreparedStatement stmt = session.prepare("SELECT * FROM users WHERE id = ?");
BoundStatement boundStatement = new BoundStatement(stmt);
List<ResultSetFuture> futures = Lists.newArrayListWithExpectedSize(list.length);

for(String id : list ) {
     futures.add(session.executeAsync(boundStatement.bind(id)));
}

for (ListenableFuture<ResultSet> future : futures) {
ResultSet rs = future.get();
... // do some stuff
}

不幸的是,这可能导致NoHostAvailableException。

谢谢。


问题答案:

您可以使用信号量来限制并发查询的数量:

final Semaphore semaphore = new Semaphore(numberOfConcurrentQueries);
...
semaphore.acquire();
try {
    ResultSetFuture future = session.executeAsync("...");
    Futures.addCallback(future, new FutureCallback<ResultSet>() {
        @Override
        public void onSuccess(ResultSet result) {
            semaphore.release();
        }

        @Override
        public void onFailure(Throwable t) {
            semaphore.release();
        }
    });
} catch (Exception e) {
    semaphore.release();
}

但是到最后,情况并没有太大的不同:NoHostAvailableException信号量将阻塞(如果使用定时版本的Acquisition,则抛出该信号),而不是在超出容量时得到信号。因此,您可能还希望对触发这些查询的组件施加反压。

您可能还需要调整连接池以调整容量,请参阅我们的文档(适用于2.1,如果您使用的是2.0,请使用页面顶部的下拉列表)。



 类似资料:
  • 问题内容: 我写了一个查询来查找3月至4月美国10个最繁忙的机场。它产生所需的输出,但是我想尝试进一步优化它。 是否有任何适用于查询的HiveQL特定优化? 是适用在这里吗?我是Hive的新手,现在这是我提出的最短的查询。 表列如下: 飞机场 Flights_stats 问题答案: 按机场(内部联接)过滤,并在UNION ALL之前进行聚合,以减少传递到最终聚合简化程序的数据集。具有UNION A

  • 我们想为房间数据库构建一个过滤器,过滤器选项由用户选择。 i、 e.我们有一个带有字段(id、名称、日期、类型)的实体。用户可以按日期和/或名称过滤列表,其中包含文本和/或类型等于某个值 有办法在房间里做吗?

  • 我正在寻找一种在InitState方法上加载异步数据的方法,在构建方法运行之前,我需要一些数据。我使用的是GoogleAuth代码,我需要执行build方法,直到流运行为止。 我的initState方法是: 如有任何反馈,我将不胜感激。

  • 问题内容: 我有一个UpdateProgress控件,该控件显示为更新面板的所有异步事件的覆盖图(使用CSS)。现在,对于某些EXPAND / COLLAPSE行命令事件,我只是不想显示该updateprogress。 有办法吗? 问题答案:

  • 我知道Java中有无限的流。 有没有办法检查流是否有限? 类似这样的方法