更改 ChronicleMap 的大小
Changing the size of a ChronicleMap
我在服务器中有一个 ChronicleMap
(v2.3.2) 运行,使用以下调用创建:
ChronicleMapBuilder.of(MyKey.class, MyValue.class).entries(20_000_000).createPersistedTo(pathToData);
ChronicleMap
中存储的条目数可能需要改变。因此,我设想在应用程序启动时执行以下操作:
- 从磁盘加载现有的
ChronicleMap
- 从现有
ChronicleMap
中获取最大条目数
- 如果新大小(从配置文件加载)没有不同则完成,否则...
- 使用新尺寸
创建一个新的ChronicleMap
- 将旧
ChronicleMap
的内容复制到新的
- 关闭并删除旧的
ChronicleMap
但是,我在 ChronicleMap 公开的接口中看不到任何内容,这可以让我找出创建时传递给 entries
方法的值。我假设 longSize()
只是实际存储的条目数,而不是地图的最大大小。
有没有办法找出这个值?或者也许有更好的方法来进行这种迁移?
如果在应用程序启动时执行这一系列步骤并且新大小(从配置文件加载)发生变化,您实际上将那个数量的新条目插入到映射中,即。 e.在应用程序关闭时,地图大小等于新大小(从配置加载),为什么你不能将地图的 longSize()
与新的预期大小进行比较?
无法检索映射到 entries()
配置的值,因为它甚至不是内部 ChronicleMap 状态的一部分,即。 e.它不存储在私有字段中。
防弹的方法是保留之前的配置文件,当主配置文件更新时,比较其中的大小配置。
没有根本不同和更好的方法来改进 ChronicleMap 的大小。如果您需要改变大小,ChronicleMap 不太适合。所以你需要写一些这样的样板代码。
Chronicle Map 3 可能会超出限制(最大为原始大小的 x1000),但如果大小超过最初配置的 entries()
数量,它的性能会急剧下降。
UPDATE. 同样重要的是要注意,在某些情况下,实际上您可能不需要更改大小,例如。 G。如果值很大(KB 及以上)并且条目数也很大。在这种情况下,您可以从一开始就配置最大可能的 Map 大小,但由于惰性页面分配的 Linux 特性,它不会过度使用内存。
我在服务器中有一个 ChronicleMap
(v2.3.2) 运行,使用以下调用创建:
ChronicleMapBuilder.of(MyKey.class, MyValue.class).entries(20_000_000).createPersistedTo(pathToData);
ChronicleMap
中存储的条目数可能需要改变。因此,我设想在应用程序启动时执行以下操作:
- 从磁盘加载现有的
ChronicleMap
- 从现有
ChronicleMap
中获取最大条目数
- 如果新大小(从配置文件加载)没有不同则完成,否则...
- 使用新尺寸 创建一个新的
- 将旧
ChronicleMap
的内容复制到新的 - 关闭并删除旧的
ChronicleMap
ChronicleMap
但是,我在 ChronicleMap 公开的接口中看不到任何内容,这可以让我找出创建时传递给 entries
方法的值。我假设 longSize()
只是实际存储的条目数,而不是地图的最大大小。
有没有办法找出这个值?或者也许有更好的方法来进行这种迁移?
如果在应用程序启动时执行这一系列步骤并且新大小(从配置文件加载)发生变化,您实际上将那个数量的新条目插入到映射中,即。 e.在应用程序关闭时,地图大小等于新大小(从配置加载),为什么你不能将地图的 longSize()
与新的预期大小进行比较?
无法检索映射到 entries()
配置的值,因为它甚至不是内部 ChronicleMap 状态的一部分,即。 e.它不存储在私有字段中。
防弹的方法是保留之前的配置文件,当主配置文件更新时,比较其中的大小配置。
没有根本不同和更好的方法来改进 ChronicleMap 的大小。如果您需要改变大小,ChronicleMap 不太适合。所以你需要写一些这样的样板代码。
Chronicle Map 3 可能会超出限制(最大为原始大小的 x1000),但如果大小超过最初配置的 entries()
数量,它的性能会急剧下降。
UPDATE. 同样重要的是要注意,在某些情况下,实际上您可能不需要更改大小,例如。 G。如果值很大(KB 及以上)并且条目数也很大。在这种情况下,您可以从一开始就配置最大可能的 Map 大小,但由于惰性页面分配的 Linux 特性,它不会过度使用内存。