Ignite 如何从map/set';s值是否按自定义顺序排列?

Ignite 如何从map/set';s值是否按自定义顺序排列?,ignite,Ignite,对于功能: invokeAll() 它使用包含将要处理的条目的Map/Set,我希望以自定义顺序处理每个条目,即与密钥顺序相同 在文件中: 键项的处理顺序未定义。实现可以选择以任何顺序处理条目,包括并发处理。此外,无法保证实现将使用相同的EntryProcessor实例来处理每个条目,因为在非本地缓存拓扑中可能存在这种情况 对于这一行: 实现可以选择以任何顺序处理条目,包括并发处理 我不知道怎么做,有什么例子吗? 如果我使用TreeMap/TreeSet来保存带有顺序的键,那么条目的处理

对于功能:

 invokeAll()  
它使用包含将要处理的条目的Map/Set,我希望以自定义顺序处理每个条目,即与密钥顺序相同 在文件中:

键项的处理顺序未定义。实现可以选择以任何顺序处理条目,包括并发处理。此外,无法保证实现将使用相同的EntryProcessor实例来处理每个条目,因为在非本地缓存拓扑中可能存在这种情况

对于这一行:

实现可以选择以任何顺序处理条目,包括并发处理

我不知道怎么做,有什么例子吗? 如果我使用TreeMap/TreeSet来保存带有顺序的键,那么条目的处理方式是否与TreeMap/TreeSet中的键顺序相同


顺便说一句,由于invoke有一个内部锁,invokeAll是否也会保留map/set中所有键的锁,直到entryprocessor完成?

您所指的文档实际上是从中继承的。这里的“实现”不是指
EntryProcessor
,而是JSR166(又名JCache,又名
javax.cache
包)的实现,Ignite在
IgniteCache
中实现它

本文档的意思是,
javax.cache.cache
接口的规范允许其实现以任何顺序调用
EntryProcessor
s。Ignite选择不提供任何额外的细节,也没有办法影响这里的订单


另外,请记住Ignite是分布式的,因此
invokeAll
中的条目处理本质上是并发的。如果您需要严格的顺序,那么最好对键进行迭代,并在每个键上使用
invoke

您所引用的文档实际上是继承自。这里的“实现”不是指
EntryProcessor
,而是JSR166(又名JCache,又名
javax.cache
包)的实现,Ignite在
IgniteCache
中实现它

本文档的意思是,
javax.cache.cache
接口的规范允许其实现以任何顺序调用
EntryProcessor
s。Ignite选择不提供任何额外的细节,也没有办法影响这里的订单


另外,请记住Ignite是分布式的,因此
invokeAll
中的条目处理本质上是并发的。如果您需要严格的顺序,可能最好对键进行迭代,并在每个键上使用
invoke

因此,如果我使用复制的缓存模式配置缓存,添加,然后使用TreeSet保存所有键,然后调用invokeAll,这是否可以确保按顺序访问条目?我已经使用TreeMap编写了一个示例,并检查了tranverse输出,似乎项目已按TreeMap顺序访问,我使用invokeAll代替invoke,因为我担心在逐个项调用更新值时,该值可能会被其他线程更改/更新,这些线程也会修改此缓存,但是invokeAll可以同时添加多个锁条目,以防止其他的thead更新条目值等等faster@dvlcisEntryProcessors将被并发调用,因此谈论执行顺序是不正确的。如果在事务缓存上调用此方法,则将根据提供的映射按顺序获取锁。但是实际执行将以任意顺序进行。因此,如果我将缓存配置为“缓存模式复制”,则添加,然后使用TreeSet保存所有密钥,然后调用invokeAll,这是否可以确保按顺序访问条目?我已经使用TreeMap编写了一个示例,并检查了tranverse输出,似乎项目已按TreeMap顺序访问,我使用invokeAll代替invoke,因为我担心在逐个项调用更新值时,该值可能会被其他线程更改/更新,这些线程也会修改此缓存,但是invokeAll可以同时添加多个锁条目,以防止其他的thead更新条目值等等faster@dvlcisEntryProcessors将被并发调用,因此谈论执行顺序是不正确的。如果在事务缓存上调用此方法,则将根据提供的映射按顺序获取锁。但实际执行将以任意顺序进行。