gpt4 book ai didi

java - 获取大对象的 'snapshots'

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:06 25 4
gpt4 key购买 nike

我面临以下问题。一个线程正在构建和更新树对象。为了验证树,需要计算该树的哈希值。因此,第二个线程连续计算该树的哈希值。

现在我遇到了以下问题:该树的大小约为 300mb,我想确保在计算哈希值时树不会改变,就像拍摄快照并计算它的哈希值一样。

我的猜测是我有以下两个选择:

  1. 在计算哈希值时阻止写入树。(不太理想,因为计算需要相当长的时间)
  2. 通过复制该对象来拍摄“快照”。然后计算hash。(也不是很好,因为还需要 300MB 内存)

是否有一种常见的技巧或模式可以拍摄大对象的“快照”而不只是复制它们?

(我的猜测是,这需要对树对象进行深刻的更改,但我很感激每一个提示。)

提前致谢,

PS:我不知道这对这个问题是否重要,但我正在使用 Java (1.8)

最佳答案

我认为在计算新哈希值时既不应该阻塞,也不应该复制或拍摄整个树的快照,特别是当树占用大约 300 mb 的内存时。

相反,我会采取另一种方法。我会使用增量哈希函数。我不是这些问题的专家,但迄今为止我知道的最好的一个是来自 greenrobot common 的 Murmur3F实用程序库。请检查他们的 sample 。

Murmur3F 允许您多次调用其 update() 方法。然后调用 getValue() 来获取实际的哈希值。您可以多次这样做。因此,每次修改时,我不会在单独的线程中重新计算整个树的哈希值。例如,使用 Murmur3F 哈希实现,我会在每次更新树时使用 update() 方法,并在树的 getHash() 上使用 getValue()

关于java - 获取大对象的 'snapshots',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28570487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com