问题标签 [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.

0 投票
2 回答
1448 浏览

hazelcast - Hazelcast mapstore 基于地图名称

我有一个 Hazelcast 实例,它根据地图名称组织数据。地图名称是动态的,所以在 Hazelcast 实例启动之前我不知道它们会是什么。我现在想通过 MapStore 功能将此数据存储在数据库中,但保留我设置的组织与地图名称。在查看 MapStore 功能时,我看不到任何检索对象来自的地图或地图名称的方法。看起来我得到的只是 MapStore 实现中的键值对。

从更广泛的角度来看,有没有办法获取有关需要存储的键值对的任何信息(不仅仅是地图名称)?我想传递一些有关如何存储数据的知识...我知道调用 map.put(..) 时的信息,但我不知道如何将该信息传递给 MapStore 调用...

0 投票
1 回答
1939 浏览

java - Hazelcast SlowOperationDetector 用于识别执行时间少于 1 秒的操作

我有一个性能用例,我需要在其中识别某些process()调用,EntryProcessor这需要超过 300 毫秒。我尝试使用SlowOperationDetector以下配置。

我给出了一个在内部休眠 1 秒的示例测试代码process()

当配置的阈值小于 1000 毫秒时,我看不到任何日志。所以在这个例子中,我没有看到任何缓慢的操作堆栈跟踪或日志。

如果我将睡眠时间更改为 2 秒,并将慢操作阈值更改为 1 秒,慢操作检测器将启动并显示日志。

这是一个错误SlowOperationDetector还是我在这里遗漏了什么?

0 投票
2 回答
8832 浏览

hazelcast - HazelCast 获取所有分布式地图名称

现在我们正在使用默认选项 .getMap() 创建地图。我们不使用 getConfig().addMapConfig 选项,因为我们希望避免检查地图是否为空等,以避免每次需要访问地图时调用此代码(由接口 getMap() 抽象的客户端代码)。

现在的问题是,如果我们想销毁某些地图,我们希望遍历所有地图名称并仅销毁符合特定条件的地图。由于我们不添加到 MapConfig,我们无法使用 getConfig().getMapConfigs().keyset() 来获取地图名称。

现在我们正在尝试使用 .getDistributedObjects() 进行迭代。唯一担心的是分布式对象作为一个整体加载到内存中(我希望不是..),或者只是加载到 DistributedObject 引用中的 ID 和名称(如代理)。我无法从代码中弄清楚。这样做是个好主意还是有更好的方法来获取地图对象引用。请帮忙

0 投票
1 回答
503 浏览

hazelcast - 面临 hazelcast 备份的问题 - 同步备份不起作用

我使用 Hazelcast 作为分布式键值存储。我将存储大约。100k 键为了在 hazelcast 集群节点之间实现更强的数据一致性,我使用 IMap 的同步备份作为分布式数据结构。

在 2 个 Unix 盒子中运行 2 个节点的 hazelcast 集群,问题:在任一节点中加载 1000 条记录的样本数据时,我没有看到同步发生备份,即使我已明确将同步备份设置为 1,从日志中验证了它,以及 hazelcast 管理中心。当我关闭集群的一个 hazelcast 节点时,数据会丢失,即数据没有从同步备份中恢复。

任何人都可以建议以下提到的任何配置是否丢失或与同步备份冲突?

请在下面找到我用来做 poc 的简要 hazelcast.xml 配置:

0 投票
2 回答
1674 浏览

java - Hazelcast 为聚合的基于谓词的供应商抛出 java.io.NotSerializableException

下面是我尝试使用 Hazelcast 客户端在 hazelcast 上运行聚合的代码。第一个聚合效果很好,但第二个聚合抛出 java.io.NotSerializableException: co.near.hazelcast.AggregateExperiment

我的代码:

错误信息:

任何帮助深表感谢。谢谢

0 投票
0 回答
1228 浏览

java - Hazelcast IMap.entrySet() 不返回所有条目

我正在研究一个通过 MapStore 实现持久保存在 MySQL 数据库中的分布式 IMap 的简单示例。我在数据库表中手动输入了 6 个条目,我想使用 Hazelcast 的 IMap 读取它们。

如果我读到这样的条目:

一切正常。当我调试数据库访问时,我看到在第一个 get() Hazelcast 首先预加载键 4、3、5、6,然后是键 1。在第二个 get() 上它加载键 2。在随后的 4 个 get() 行中,密钥已经存在于 personMap 中,因此没有数据库访问权限。到目前为止,一切都很好。

现在,当我将片段替换为:

在循环初始化时,在 entrySet() 调用中,Hazelcast 仅加载键 3、4、5 和 6。因此,此循环不打印键 1 和 2,只打印键 3、4、5 和 6。

任何想法为什么会这样?这是 Hazelcast 3.6

注意:当然,当我在键 1 到 6 已经显式加载后调用 entrySet() 时,例如通过将两个片段组合在一个“运行”中,然后 entrySet() 会看到所有键。仅当 entrySet() 是对 personMap 的第一次实际访问时才会出现问题。

更新:在调用 entrySet() 之前,我还尝试了显式加载:

结果是一样的——只加载了键 3 到 6。我的集群只包含一个节点。

0 投票
1 回答
1113 浏览

java - Hazelcast FREE_HEAP_PERCENTAGE 政策未按预期工作

当满足 JVM 上配置的最小可用堆百分比时, Hazelcast 的FREE_HEAP_PERCENTAGE最大大小策略不会驱逐映射条目。

下面是一个说明这个问题的测试用例。如果使用其他策略类型(包括USED_HEAP_PERCENTAGE)运行测试,它会按预期工作,以便在达到此最大大小时逐出条目。但是,如果它与 一起运行FREE_HEAP_PERCENTAGE,则永远不会从映射中逐出条目,尽管事实上可用堆百分比超出了允许的百分比(例如,可以在运行管理中心时确认)。

经过进一步调试,我想知道 Hazelcast 是否EvictionChecker可能错误地计算了空闲堆百分比。在调试时,我发现计算出的空闲堆百分比大于 100。它的计算使用available / total,但如here所述,这可能应该是available / max相反的吗?

我的配置或预期的FREE_HEAP_PERCENTAGE策略使用有问题吗?或者这是一个 Hazelcast 错误?

规格:Hazelcast 3.6,-Xmx256m

0 投票
1 回答
866 浏览

java - Hazelcast 不同的密钥聚合

有没有办法使用Hazelcast 聚合来获得不同的IMap关键属性?

Aggregations.distinctValues()属性提取器一起允许获得不同的属性;但是,我不确定如何使用聚合获得不同的关键属性。

0 投票
1 回答
300 浏览

java - 在 Hazelcast 中更新关系数据

可以说我有以下对象:

使用上面的代码,Hazelcast 将松散 foo 和 bar 之间的关系。如,如果我更新 bar,那么 foo 也不会像这样更新:

在上面的示例中,sameFoo.bar.x 从未使用新值 20 进行更新。Hazelcast 中有没有办法更新每个实例?

我可以编写自己的引擎来记住所有内容的存储位置并更新我找到的每个对象的每个实例,但这会使写入过于昂贵。

或者我可以以某种方式在地图之间建立指针,但这会减慢读取速度......对于解决这个问题的任何帮助将不胜感激!

0 投票
2 回答
2264 浏览

java - Hazelcast MapStore 加载与 TTL

有没有办法使用自定义 TTL加载地图条目?MapStore

用例:我的每个映射条目都有一个自定义过期时间,此时条目不再有效(TTL 不仅用于限制内存映射的大小,而且 TTL 应用于每个条目,而不是地图配置)。我最初条目放入地图时设置了此 TTL,过期时间保留在我的底层持久性地图数据存储中,但在从数据库加载条目时我无法重置此 TTL。

MapLoader文档似乎表明这可能是不可能的:

加载的条目将被放置到分布式映射中,并且它们将保留在内存中,直到它们被显式删除或隐式驱逐(如果配置了驱逐)。

如果无法使用 来完成此操作MapStore,则剩下的一些选项似乎是:

  • 不要使用MapStore,而是从我的持久数据存储中显式查找条目,使用所需的 TTL 加载这些值
    • 这可能是可行的,但是通过这种方法,我不再能够利用MapStore
  • 运行一个后台线程,定期显式驱逐这些过期条目,而不是依赖 Hazelcast 的自动驱逐
    • 这只是很多开销(额外的线程、查询和条目处理),并且需要我的应用程序代码在使用之前检查条目的有效性(因为映射中可能存在过期的条目)

有没有其他方法可以使用我忽略的 Hazelcast 干净/轻松地完成此任务?