- Hazelcast 教程
- Hazelcast - 首页
- Hazelcast - 简介
- Hazelcast - 设置
- Hazelcast - 第一个应用程序
- Hazelcast - 配置
- 设置多节点实例
- Hazelcast - 数据结构
- Hazelcast - 客户端
- Hazelcast - 序列化
- Hazelcast 高级
- Hazelcast - Spring 集成
- Hazelcast - 监控
- Map Reduce 与聚合
- Hazelcast - 集合监听器
- 常见陷阱与性能技巧
- Hazelcast 有用资源
- Hazelcast - 快速指南
- Hazelcast - 有用资源
- Hazelcast - 讨论
Hazelcast - 常见陷阱与性能技巧
单机 Hazelcast 队列
Hazelcast 队列存储在单个成员上(以及不同机器上的备份)。这意味着队列可以容纳一台机器所能容纳的任意数量的项。因此,添加更多成员不会扩展队列容量。如果在队列中加载超过机器所能处理的数据量,可能会导致机器崩溃。
使用 Map 的 set 方法而不是 put
如果我们使用 IMap 的 put(key, newValue),Hazelcast 会返回 oldValue。这意味着,在反序列化上花费了额外的计算和时间。这也包括从网络发送更多数据。相反,如果我们对 oldValue 不感兴趣,我们可以使用 set(key, value),它返回 void。
让我们看看如何存储和注入对 Hazelcast 结构的引用。以下代码创建了一个名为“stock”的映射,并在一个地方添加 Mango,在另一个地方添加 Apple。
//initialize hazelcast instance HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance(); // create a map IMap<String, String> hzStockTemp = hazelcast.getMap("stock"); hzStock.put("Mango", "4"); IMap<String, String> hzStockTemp2 = hazelcast.getMap("stock"); hzStock.put("Apple", "3");
但是,这里的问题是我们两次使用了 getMap("stock")。虽然此调用在单节点环境中看起来无害,但在集群环境中会造成缓慢。getMap() 函数调用涉及到对集群中其他成员的网络往返。
因此,建议我们将对映射的引用存储在本地,并在操作映射时使用该引用。例如 -
// create a map IMap<String, String> hzStock = hazelcast.getMap("stock"); hzStock.put("Mango", "4"); hzStock.put("Apple", "3");
Hazelcast 使用序列化数据进行对象比较
正如我们在前面的示例中看到的,需要注意的是,Hazelcast 在比较键时不会使用反序列化对象。因此,它无法访问我们在 equals/hashCode 方法中编写的代码。根据 Hazelcast,如果两个 Java 对象的所有属性的值相同,则这些键相等。
使用监控
在大型分布式系统中,监控起着非常重要的作用。使用 REST API 和 JMX 进行监控对于采取主动措施而不是被动反应非常重要。
同构集群
Hazelcast 假设所有机器都是平等的,即所有机器都具有相同的资源。但是,如果我们的集群包含一台性能较低的机器(例如,内存较少、CPU 能力较低等),那么如果计算发生在该机器上,就会导致速度变慢。更糟糕的是,较弱的机器可能会耗尽资源,从而导致级联故障。因此,Hazelcast 成员必须具有相同的资源能力。