问题标签 [chronicle-map]
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.
apache-spark - 在 Apache Spark 中使用 ChronicleMap
我们想在工作人员的 Apache Spark 中使用 ChronicleMap 在 VM 中存储共享缓存。目前,我们正在使用 Hazelcast 共享缓存,但显然,能够免费使用堆外内存并避免 tcp-ip(甚至超过 127.0.0.1)是我们喜欢 ChronicleMap 的原因,这就是我们希望能够使用它。
这个想法是让位于同一物理机器中的所有执行程序共享缓存,并且缓存将被持久化,tmpfs
以便它在 VM 本身处于活动状态之前保持有效(我们不需要在实例生命周期中持久保存这些值)和任何加入的工人都可以开始使用它。理想情况下,我们需要对存储的键进行 LRU 驱逐,尽管 ChronicleMap 不支持它,但考虑到它使用堆外内存,我想我们可以忍受这个限制,但更令人担忧的是它要求在访问期间从崩溃中恢复,这是我们设置中的一个问题。
例如,假设我们有 5 个执行程序在同一个 VM 上运行,共享缓存,其中一个 VM 在访问损坏缓存期间崩溃。其他执行者无从得知,只能让其中一人恢复,大家等待。如果至少可以保证在恢复期间或在损坏的缓存上的并发恢复或访问会引发一些异常,那将有所帮助,因为那时,访问失败的每个人都可以尝试获取文件锁,然后开始恢复过程以及其他任何访问在此期间可能会收到另一个异常,表明恢复正在进行中,最后,缓存已修复并且事情恢复正常,但从文档看来,行为只是未定义,这留下了太多疑问。
是否可以让 ChronicleMap 在我们的设置中工作?考虑到这些要求,有没有其他人成功地让它在 Apache Spark 中工作?任何建议都会有所帮助。
chronicle-map - 如何知道编年史地图的配置大小?
我们使用 Chronicle Map 作为持久存储。由于我们一直有新数据到达,我们继续将新数据放入地图中。因此,我们无法预测 的正确值net.openhft.chronicle.map.ChronicleMapBuilder#entries(long)
。当我们放入比预期更多的数据时,Chronicle 3 不会中断,但会降低性能。因此,我们希望不时使用新配置重新创建此地图。
现在是真正的问题:给定一个编年史地图文件,我们如何知道该文件使用了哪个配置?然后我们可以将其与实际数据量进行比较(此知识的来源在这里无关紧要)并在需要时重新创建地图。
scala - 使用 ChronicleMap 时出现运行时错误“找不到符号 ByteValue$$Native”
我正在处理的项目由几个组件组成——几个独立的库被编译成 JAR,以及一个引用它们的主项目。全部都是用 Scala 编写的。
我在其中一个库中内部使用 ChronicleMap,使用带有自己的编组器的自定义值类。运行主项目时出现以下错误:
这只发生在从 Intellij IDEA 运行项目时,而不是从命令行运行时。
此外,如果我设置了一个独立项目,该项目使用具有相同自定义类和编组器的相同 ChronicleMap,我从 IDE 运行它没有任何问题。仅在从 IDE 运行使用我的库的项目时才会出现此问题。
所以我认为这可能与类加载顺序有关,也可能与 IDE 中缺少的某些依赖项有关,也可能无关。
我可以做些什么来找出为什么我不能从 IDE 运行?
redis - 编年史地图 vs Redis vs Koloboke
我们有一个系统,其中在 50 台服务器上使用相同的数据集(键值对)。该数据集的更新次数约为每小时 1000 次,并且必须在这 50 台服务器之间进行复制。我们有一个主系统接收这些更新并负责将这些更新传播到其他服务器。目前,我们每小时以文件的形式将整个数据集(而不是增量更新)同步到所有服务器。然后将此数据加载到不可变的 Koloboke 地图中。每个服务器每秒处理大约 25000 个请求,每个请求对该映射进行 30 次查找。在这些服务器上接收到的请求的平均响应延迟必须最大约为 3 毫秒,因此内存中的 koloboke 映射可以很好地维护这个响应时间。
但是,我们当前跨服务器同步此数据的系统会导致问题:
1) 通常情况下,此关键数据的同步在其中一台服务器上失败,从而导致收入损失
2)由于这个数据是存储在内存中的,它不是持久化的,每次服务器重启或者每小时更新一次,我们都需要重新加载这个数据,这会影响应用程序的启动时间。
为了提高效率,我探索了 Koloboke 库中的 Redis、Chronicle Maps 和 Mutable maps。但是我遇到了所有这些限制:
Redis:Redis 支持复制和持久化。然而,在使用它的基准测试实用程序时,我发现它可以支持的查找数量仅略高于我们的平均用例(0.8-11 万个请求与 75 万,这是我们每秒的查找数量)。此外,对 redis 的调用将通过网络进行,这会损害我们 3 毫秒的平均响应时间。
Chronicle Maps:在进一步探索这一点时,我发现 Chronicle Maps 支持复制、持久性,并且每秒可以处理多达 3000 万个请求。乍一看,这似乎是一个不错的选择,但后来我发现它们不适用于多图,我们在应用程序中生成了它们。此外,它们在堆外存储数据,因此数据反序列化的成本会导致性能下降。
Koloboke:它的性能很好,服务于我们的用例,但不支持复制和持久化。
我找不到任何支持我们所有用例的东西。我正在寻找来自这个社区的建议,这些建议可以帮助我们有效地构建这个系统,而不会对性能产生任何严重的影响。对此的任何帮助将不胜感激!谢谢!
java - 在 OpenHTF ChronicleMap 上设置最大条目
我正在玩由 ChronicleMap 支持的 ChronicleSet。我已经做了一些初步测试,这对我们的需求来说非常好。与其他解决方案相比,RAM 使用效率更高,访问时间稍慢,但仍然相当快。
但是,我正在测试的一件事是设置最大条目数,它似乎没有按预期工作。
我正在使用以下代码:
根据文档,这意味着在这种情况下允许的最大条目数为 2M。但是,在测试时,我可以可靠地达到指定最大值的 2 倍,甚至更多,直到我得到这样的异常:
在这种情况下, ChronicleMap 对象调用size()
吐出4,079,238
。所以我想知道如何设置明确的限制(如上面指定的 2M),并让 Chronicle 在此之后可靠地拒绝任何添加其他元素的请求。
chronicle - 编年史地图回调
嗨,我是 Chronicle Products 的新用户,到目前为止,文档/使用看起来很流畅。
虽然我有一个问题,当映射数据在同一主机上的 JVM 之间共享时,等待数据的消费者 JVM 在数据到达时是否会收到任何类型的回调或信号,或者我们是否需要实现自定义回调机制。
想法?
chronicle - 每日编年史卷文件
我正在尝试将 Chronicle Queue 实施到我们的系统中,并且有一个关于每天滚动文件的问题,但在特定时间根据进程的本地时区。我读了几篇关于如何指定滚动周期的文章,但根据文档,纪元时间按照午夜 UTC 工作。假设每天下午 5 点本地时区运行的进程,我需要做什么来配置滚动周期?有什么建议么?
chronicle - 编年史地图中的 NavigableMap 支持?
预先感谢您的支持。
有没有办法在 Chronicle-Map 中创建 java NavigableMap ?
java - JavaEE 应用程序中的 ChronicleMap 问题
我成功地将 JavaSE8 应用程序升级到 ChronicleMap 3.14.1。我有一个 JavaEE7 应用程序,它只是 JavaSE8 应用程序的一个外观。
当从 JavaEE7 调用方法来创建 ChronicleMap 时,会引发错误。看起来“net.openhft.chronicle.hash.impl.util.jna.PosixMsync”没有加载!
JavaSE8 应用程序中不会出现此错误。
欢迎任何修复或建议。
提前致谢。
java.lang.NoSuchFieldError: C_LIBRARY_NAME 在 net.openhft.chronicle.hash.impl.util.jna.PosixMsync.(PosixMsync.java:39) 在 net.openhft.chronicle.hash.impl.VanillaChronicleHash.msync(VanillaChronicleHash.java: 878) 在 net.openhft.chronicle.map.ChronicleMapBuilder.commitChronicleMapReady(ChronicleMapBuilder.java:417) 在 net.openhft.chronicle.map 的 net.openhft.chronicle.hash.impl.VanillaChronicleHash.msync(VanillaChronicleHash.java:864) .ChronicleMapBuilder.createWithNewFile(ChronicleMapBuilder.java:1732) 在 net.openhft.chronicle.map.ChronicleMapBuilder.createWithFile(ChronicleMapBuilder.java:1589) 在 net.openhft.chronicle.map.ChronicleMapBuilder.recoverPersistedTo(ChronicleMapBuilder.java:1532) 在net.openhft.chronicle.map.ChronicleMapBuilder.createOrRecoverPersistedTo(ChronicleMapBuilder.java:1515) 在 net.openhft.chronicle.map.ChronicleMapBuilder.createOrRecoverPersistedTo(ChronicleMapBuilder.java:1500) 在 com.kem.ae.util.Utilities .mapBuilder(Utilities.java:125)
异常发生在:builder.createOrRecoverPersistedTo(mapFile);
java - ChronicleMap 没有手动关闭,从 Cleaner 中清理
我在 JavaEE7/CDI 应用程序中使用 ChronicleMap。对话范围被大量使用。很难预测用户将在哪里退出对话以关闭地图。
尽管我试图关闭 @PreDestroy 方法中的所有实例,但显然我并没有关闭所有实例。
以下错误的后果是什么:
11:20:47,866 错误 [net.openhft.chronicle.hash.impl.ChronicleHashResources] (Reference Handler) ChronicleMap{name=null, file=null, identityHashCode=1146047764} 未手动关闭,已从 Cleaner 中清除
不手动关闭地图有害吗?
地图是否在从清洁器中清理之前先关闭?
谢谢