问题标签 [hazelcast-imap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Hazelcast 弹簧配置
<hz:map>
在段中创建的标签applicationContext
与在段中定义的标签之间有什么区别<hz:config>
?
它们有什么关系?
我知道<hz:map>
inapplicationContext
会导致创建一个 IMap 类型的 bean,而当没有时它不会<hz:map>
。
但是,当定义了一个 bean 并且随后<hz:map>
在 hazelcast 配置下具有相同名称时,以下配置会做什么?
hazelcast - 每次更新该条目时,都会更改 Map 中条目的 TTL 值
我正在尝试使用 Hazelcast Map 并发现Expiration time for an entry = Last Updated Time + TTL
。
但我想把它作为
Expiration Time for an entry = Creation Time + TTL
. 有人可以建议如何实现此功能吗?这种行为以前存在,为什么它被改变了?
java - Hazelcast IMap 中的嵌套集合
我有一个 hazelcast 实例,我正在从中获取地图。
我想在其中存储一个嵌套集合(例如 List<List<Definition >>)。
定义=> 类(这实现了可序列化)
cacheKey => 唯一键
对象=> 嵌套集合
ttl => 生存时间
我收到一个异常:java.io.NotSerializableException: java.util.ArrayList$SubList
我第一次使用榛树。有谁知道这是为什么?
请指教。
谢谢
java - 与 Hazelcast 中的 EntryProcessor 和 MapListener 一起使用时,IMap.unlock() 中的性能问题
HZ 版本:3.5.3
我面临一个性能问题,IMap.unlock(key)
大约需要 4-5 秒才能完成执行。场景如下:
我有一个employeeList IMap
,它companyId
根据员工列表(ArrayList<Employee>
)存储。每个值 (Arraylist) 可能包含 1500000 名员工。
Employee
是一个定义如下的 POJO。
为了添加一个新员工,我编写了一个入口处理器SimpleEntryProcessor
,它将一个新员工添加到列表中并返回 true。
为了打印驱逐键,我将以下 MapListener 添加到employeeMap。
IMap 配置如下。
在这种情况下,IMap.unlock()
需要4-5 秒才能完成执行。
当我注释掉代码employeeListMap.addEntryListener(...)
(即没有 MapListener)时,IMap.unlock()
方法只用了 1ms。
这是 hazelcast 的一个未解决的问题吗?任何指针都会有很大帮助。
注意:我知道我应该存储<employeeId, Employee>
在一个单独的employee IMap
和<companyId, <list of emp ids>
不同companyEmps IMap
的地方以获得更好的结果。但是,由于代码的遗留性质,这是不可能的。
session - Tomcat Hazelcast 会话存储会话属性消失
我正在尝试在 AWS 上设置 Tomcat 集群,并且由于 AWS 不支持 IP 多播,因此其中一种选择是使用 DB 进行 Tomcat 集群
这很好理解,但是,由于与数据库调用相关的性能损失,我目前正在考虑将 Hazelcast 作为会话存储。当前的 Hazelcast 过滤器方法对我不起作用,因为 Web 应用程序上还有其他过滤器,它们有些干扰,更好和更清洁的方法是使用自定义商店实现配置 PersistenceManager 并在 tomcat/ 上配置相同的过滤器conf context.xml,配置部分如下:
会话保存在 Hazelcast 实例中,来自 tomcat 的跟踪如下:
上面的跟踪如果来自存储实现覆盖的“保存”方法,代码如下:
其中“sessionStore”是 Hazelcast 分布式地图。
store对应的'load'方法如下:
现在,最有趣的事情之一是,虽然“存储”方法以 60 秒的默认间隔被调用,但“加载”方法永远不会被调用,其净影响是任何保存的会话属性都会在一段时间后丢失,这是最不寻常的。从技术上讲,一旦调用了“保存”方法并且将管理器配置为每 5 秒换出一次,任何绑定到会话的新会话属性都将保存在 Hazelcast 中。
但是,会话属性丢失(新的),旧的仍然存在。但是无论它是什么,都不会调用“加载”方法(至少我没有看到跟踪)。
对此的一些帮助将不胜感激。
java - 向 Hazelcast 添加新的键/值对
假设我有一个圣诞节列表对象,其中包含一个用于圣诞礼物的 ArrayList 和另一个用于接收者的 String。我有这个客户的以下方法:
现在假设我想为“Amy”添加一个新列表,IMap 不包含匹配“Amy”的键。如何添加这样的条目?请注意,以上主要是伪代码,但问题已经给我带来了无穷无尽的麻烦。该文档也没有太大帮助。默认情况下,我认为 Hazelcast 的任何新 IMap 都是空的。
所以基本上,我正在尝试在 Hazelcast IMap 中初始化一个新的键/值对。我尝试使用christmasListImap.put() 和christmasListImap.set(),但它们似乎都不起作用。至少,我需要知道如何为 IMap 添加一个新的 Key 来识别。
java - 使用 Java 进行批量更新和单个异步更新,分布式应用程序
我想问你一个关于我们实际面临的架构问题的问题。
- 我们有一个分布在多个服务器上的应用程序
- 我们通过activeMQ消费数据。
- 我们有一个名为 Price 的对象需要保持同步。
- 这个对象可以被多次接收。
- 价格有一个名为“lastUpdate”的字段,我们需要使用最新的“lastUpdate”存储/更新价格。
- 不保证最后收到的价格比上一个价格具有最新的 lastUpdate。
为了让一切保持同步,我们有 3 种方法(我们必须使用所有这些方法)
- 我们可以接收价格的异步更新/插入(使用监听器)
- 每 15 分钟,我们将要求生产者将过去 15 分钟内更改的所有价格发送给我们(计划任务)
- 我们每 1 小时更新一次所有价格(schduledTask)
使用的技术:
- ActiveMQ 作为总线
- Hazelcast 作为分布式地图在插入之前进行同步
- JPA
现在如何工作:每次添加/更新异步价格时,我们都会执行:
这就是我们要更新/保留的每个价格所做的事情(单个和批量更新/插入方法都调用这个)
问题是任务需要很长时间(30/40 秒)才能完成,而我们希望在 4/5 秒内完成(平均处理 10 万个价格)。我们使用的逻辑似乎没有任何方法可以提高性能。所以我认为我们需要改变保持数据同步的方式......有什么建议吗?
编辑:
按照 pveentjer 的建议,我扩展了 EntryProcessor 类,以便可以在构造函数中传递要更新的价格地图:
}
我看到在 EntryProcessor 中我们可以只发送键值。但是我们只使用 price.getId() 作为键。
caching - 一旦达到配置的条目数/大小,就无法刷新 haselcast 缓存
想要清除榛树缓存。这样一旦缓存达到 Max Entries 或 Max Heap Size,就将其刷新到文件中。
hazelcast.xml 中的配置
测试代码
在 entryEvicted 我只得到第三个条目对象
一旦达到最大大小,有没有办法将缓存内容刷新到文件/数据库中?
java - 就其线程模型而言,hazelcast 如何执行映射条目驱逐?
我知道<min-eviction-check-millis>
在 hazelcast 配置中定义了在检查此地图的分区是否可驱逐之前应该经过的最短时间(以毫秒为单位)。因此,在每个配置的时间间隔内,都会根据配置的驱逐策略在地图中执行驱逐。我有以下与该领域相关的问题。
Q1。驱逐操作是否在操作线程上运行?
Q2。驱逐操作会锁定它正在处理的整个分区吗?
Q3。如果我要遵循默认值 100 毫秒(我认为这是一个非常小的值),我是否需要预期任何性能损失。
Q4。在以下场景中执行驱逐操作的频率。
请注意,虽然没有配置驱逐策略和百分比,但最大空闲时间设置为 1800 秒。
对上述问题的回答将帮助我对在大规模部署中用于这些配置的值做出明智的决定。
hazelcast - Hazelcast 中的高密度内存(本机内存大小限制)
我正在使用 Hazelcast 3.5.3 和 3.6 企业版来实现高密度内存,首先初始化池化本机内存,然后初始化堆外内存。WHich 工作正常并创建了本机内存,我可以在 Hazelcast 管理控制台中检查。
我的问题是:我们如何设置本机内存的上限,所以如果我将启动两个或一个 Hazelcast 实例,那么在分配本机内存期间它不会超过该上限。
感谢您提前回复。
谢谢