相关疑难解决方法(0)

限制方法在N秒内调用M个请求

我需要一个组件/类来限制某些方法的执行到N秒内的最大M次调用(或ms或nanos,无关紧要).

换句话说,我需要确保我的方法在N秒的滑动窗口中执行不超过M次.

如果您不知道现有的课程,请随时发布您的解决方案/想法如何实现这一点.

java throttling

128
推荐指数
7
解决办法
8万
查看次数

Cassandra如何处理阻塞datastax java驱动程序中的execute语句

阻止从com.datastax.driver.core.Session执行fethod

public ResultSet execute(Statement statement);
Run Code Online (Sandbox Code Playgroud)

评论这种方法:

该方法阻塞,直到从数据库接收到至少一些结果.但是,对于SELECT查询,它不保证已完全接收结果.但它确实保证从数据库收到了一些响应,特别是保证如果请求无效,则此方法将抛出异常.

来自com.datastax.driver.core.Session的非阻塞执行方法

public ResultSetFuture executeAsync(Statement statement);
Run Code Online (Sandbox Code Playgroud)

此方法不会阻止.一旦查询传递到底层网络堆栈,它就会返回.特别是,从此方法返回并不保证查询有效或甚至已提交到活动节点.访问{@link ResultSetFuture}时,将抛出与查询失败有关的任何异常.

我有关于它们的02个问题,因此如果你能帮我理解它们会很棒.

假设我有100万条记录,我希望所有这些记录都能到达数据库(没有丢失).

问题1:如果我有n个线程,则所有线程将具有发送到数据库所需的相同数量的记录.所有这些都继续使用阻塞执行调用向cassandra发送多个插入查询.如果我增加n的值,它是否也有助于加快我需要将所有记录插入cassandra的时间?

这会导致cassandra的性能问题吗?Cassandra是否必须确保对于每个插入记录,群集中的所有节点都应立即知道新记录?为了保持数据的一致性.(我假设cassandra节点甚至不会考虑使用本地机器时间来控制记录插入时间).

问题2:通过非阻塞执行,我如何确保所有插入成功?我知道的唯一方法是等待ResultSetFuture检查插入查询的执行.有什么更好的办法吗?非阻塞执行更容易失败然后阻塞执行的可能性更高吗?

非常感谢您的帮助.

cassandra datastax-java-driver datastax

4
推荐指数
1
解决办法
2033
查看次数