使用 IgniteSet 作为 Ignite 连续查询的动态远程过滤器的一部分

Using IgniteSet as part of dynamic remote filter for Ignite's Continuous Query

有没有人尝试过使用 IgniteSet 或类似的数据结构在连续查询中设置远程过滤器?关于 IgniteSet 如何工作以及这个问题的文档并不多。基本上我的用例如下:

我有一个使用 Ignite 实现的分布式缓存。用户根据某些条件对我的缓存中的实时更新感兴趣。我将有不止一个用户订阅这些更新。我不打算 运行 n 个连续查询,而是 运行 使用由某种分布式数据结构支持的远程过滤器对 n 个用户进行一次连续查询。

我认为 IgniteSet 可以为我工作。但我不确定这将如何影响我的应用服务器在生产环境中的性能,因为我不完全确定 IgniteSet 将如何工作(由于关于该主题的文档很少)。基本上,如果我需要更新 ignite set 数据结构,它是否也会为所有远程节点动态更新,这是否意味着我将开始接收可能在这些远程节点上评估(为真)的过滤器更新?

    qry.setRemoteFilterFactory(new Factory<CacheEntryEventFilter<PersonKey, Person>>() {
            @Override public CacheEntryEventFilter<PersonKey, Person> create() {
                return new CacheEntryEventFilter<PersonKey, Person>() {
                    @Override public boolean evaluate(CacheEntryEvent<? extends PersonKey, ? extends Person> e) {

                        //IgniteSet maintained outside of filter
                        return igniteSet.contains(e.getKey().getCity());
                    }
                };
            }
        });

抱歉,如果我在这里遗漏了一些明显的东西。

如有任何帮助,我们将不胜感激!

IgniteSet 由缓存支持,与所有 Ignite 缓存一样,旨在让所有节点在更新可用时立即看到更新。
请参阅:https://ignite.apache.org/docs/latest/data-structures/queue-and-set 了解配置设置。

您提出的设计受竞争条件的影响。连续查询的消费者可能会在适当的编写者有机会更新给定的 IgniteSet 之前进入。

使用适当的同步机制来解决所有边缘条件。 Examples/Descriptions 这里:https://ignite.apache.org/features/datastructures.html