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将被并发调用,因此谈论执行顺序是不正确的。如果在事务缓存上调用此方法,则将根据提供的映射按顺序获取锁。但实际执行将以任意顺序进行。