【问题标题】:Changing the size of a ChronicleMap更改 ChronicleMap 的大小
【发布时间】:2016-06-21 15:28:48
【问题描述】:

我有一个在服务器中运行的ChronicleMap (v2.3.2),使用以下调用创建:

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

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

  1. 从磁盘加载现有的ChronicleMap
  2. 从现有ChronicleMap 中获取最大条目数
  3. 如果新大小(从配置文件加载)没有不同,则完成,否则...
  4. 使用新大小创建一个新的ChronicleMap
  5. 将旧ChronicleMap的内容复制到新的
  6. 关闭并删除旧的ChronicleMap

但是,我在 ChronicleMap 公开的界面中看不到任何内容,这将让我找出在创建 entries 方法时传递给它的值。我假设longSize() 只是实际存储的条目数,而不是映射的最大大小。

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

【问题讨论】:

    标签: chronicle chronicle-map


    【解决方案1】:

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

    无法检索映射到entries() 配置的值,因为它甚至不是内部 ChronicleMap 状态的一部分,即。 e.它不存储在私有字段中。

    防弹的方法是保留之前的配置文件,当主配置文件更新时,比较它们的大小配置。

    没有根本不同和更好的方法来发展 ChronicleMap 的大小。如果您需要改变大小,ChronicleMap 不太适合。所以你需要编写一些这样的样板代码。

    Chronicle Map 3 可能会超出限制(从原始大小增加到 x1000),但如果大小超过最初配置的 entries() 数字,它的性能会急剧下降。

    更新。另外需要注意的是,在某些情况下,实际上您可能不需要更改大小,例如。 G。如果值很大(KB 及以上)并且条目数也很大。在这种情况下,您可以从一开始就配置最大可能的 Map 大小,但不会过度使用内存,因为 Linux 具有惰性页面分配的特性。

    【讨论】:

      猜你喜欢
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 2020-11-27
      • 2013-02-08
      • 1970-01-01
      • 2018-05-08
      • 2020-09-29
      相关资源
      最近更新 更多