更改ChronicleMap的大小

时间:2016-02-02 10:16:14

标签: chronicle chronicle-map

我在服务器上运行ChronicleMap(v2.3.2),使用以下调用创建:

ChronicleMapBuilder.of(MyKey.class, MyValue.class).entries(20_000_000).createPersistedTo(pathToData);

ChronicleMap中存储的条目数可能需要发展。因此,我设想在应用程序启动时执行以下操作:

  1. 从磁盘加载现有的ChronicleMap
  2. 获取现有ChronicleMap
  3. 的最大条目数
  4. 如果新的大小(从配置文件加载)没有区别则完成,否则......
  5. 使用新尺寸
  6. 创建新的ChronicleMap
  7. 将旧ChronicleMap的内容复制到新的
  8. 关闭并删除旧的ChronicleMap
  9. 但是,我在ChronicleMap公开的界面中看不到任何内容,这样我就可以找到创建时传递给entries方法的值。我假设longSize()只是实际存储的条目数,而不是地图的最大大小。

    有没有办法找出这个价值?或者也许有更好的方法来进行这种迁移?

1 个答案:

答案 0 :(得分:1)

如果在应用程序启动时执行这一系列步骤并且新的大小(从配置文件加载)发生了变化,那么实际上将这些数量的新条目插入到地图中,即。即在应用程序关闭时,地图大小等于新大小(从配置加载),为什么你不能将地图的longSize()与新的预期大小进行比较?

无法检索映射到entries()配置的值,因为它甚至不是内部ChronicleMap状态的一部分,i。即它不存储在私人领域。

防弹方法是在更新主配置文件时保留以前的配置文件,以比较其中的大小配置。

没有基本不同且更好的方法来发展ChronicleMap大小。如果您需要改进尺寸,ChronicleMap并不适合。所以你需要写一些这样的样板代码。

纪事地图3可能超出限制(原始尺寸可达x1000),但如果尺寸超过最初配置的entries()数字,则其性能会急剧下降。

更新。另外需要注意的是,在某些情况下,您实际上可能不需要更改尺寸,例如: G。如果值很大(KB及以上)且条目数也很大。在这种情况下,您可以从一开始就配置最大可能的Map大小,但由于延迟页面分配的Linux功能,它不会过度使用内存。