Apache Ignite 连续查询会错过一些更新吗?

Posted

技术标签:

【中文标题】Apache Ignite 连续查询会错过一些更新吗?【英文标题】:Can Apache Ignite Continuous Queries miss some update? 【发布时间】:2017-03-15 09:22:16 【问题描述】:

我们正在测试 Apache Ignite 连续查询,在测试期间,我们注意到一些连续查询错过了缓存的一些更新。 我们的用例如下:

我们有一个馈送器(它是服务器节点的一部分),它每秒向 1000 个缓存提供数据 我们有一个客户端程序(它是服务器节点的一部分),它打开 1000 个连续查询,每个缓存 1 个连续查询

因此,这些连续查询中的一些会不时错过缓存更新。我们想知道连续查询错过一些缓存更新的事实是否“正常”。

我们还对 500、250、100 个缓存进行了测试,结果相同。

此外,我们还想知道可以创建多少缓存和连续查询? Apache Ignite 是否支持创建数十万个缓存和连续查询?

【问题讨论】:

您是否发现任何异常情况?你使用远程过滤器吗? 不抛出异常。已使用远程过滤器,但在测试期间返回 true。 如何检查更新事件是否丢失?同一条目的多次更新是否有可能在同一批次中结束? 这个 feeder 可以同时更新相同的键吗?您使用哪种缓存原子性模式(ATOMIC 或 TRANSACTIONAL)?如果是 ATOMIC,你有什么类型的写排序模式(CLOCK 或 PRIMARY)? @symbicator 基本上,缓存是由 json 对象提供的。一个新的 json 对象被放入缓存中,其中的键是插入顺序。所以,key 是 0, 1, 2, ... 在客户端,我们获取这些 json 对象并通过检查没有缺少键来检查我们是否收到了所有对象。 【参考方案1】:

在连续查询中绝不应该丢失通知。如果这真的发生了,那很可能是产品或测试中的错误。我建议与 Apache Ignite 社区分享您的测试。

【讨论】:

在清理代码以共享它并添加更多日志时,更新似乎并没有丢失,但其中一些更新并未按放入缓存的顺序接收。测试的源代码可以在这里找到:github.com/ctranxuan/ignite-cq-bench-parent。有一个 README.md【参考方案2】:

通过 Ignite 邮件列表 (http://apache-ignite-users.70518.x6.nabble.com/Can-a-Continuous-Queries-miss-some-updates-order-td11620.html#a11623) 得到答案:

连续查询 (CQ) 保证每个条目都会保留事件的顺序。例如:

cache.put(key1, 100);
cache.put(key2, 100);
cache.put(key1, 200);
cache.put(key2, 200);

CQ 保证 key1 的事件将按以下顺序接收 (1, 100) --> (1, 200) 但您可以比 key1 更早地获得 key2 的事件。 Ignite 对缓存和 CQ 的数量没有限制。

感谢 Nikolai Tikhonov!

【讨论】:

以上是关于Apache Ignite 连续查询会错过一些更新吗?的主要内容,如果未能解决你的问题,请参考以下文章

Apache Ignite:是不是有可能做这些事情?

如何在 Apache Ignite 中使用 Write-behind 和外键

索引 Apache Ignite 缓存与优化的内存 CassandraDB

apache ignite系列:使用ddl和dml脚本初始化ignite并使用mybatis查询缓存

收集 Apache Ignite 的统计信息

Apache Ignite 索引性能