处理非常大的集合的缓存
Handling caching of very large set
我有 Set
个 BigInteger
想要缓存。
此套装最大尺寸为 ~100K
。
我正在使用的应用程序非常轻便:它没有很多内存(堆大约 256mb
)并且不使用数据库(团队正在考虑稍后使用,但现在它不可能)。
初始化后,它收到 BigInteger
的大 array
,需要存储在 File
中以备将来使用。
然后应用程序需要检查特定 BigInteger
是否存储到给定文件中。
考虑到内存影响,我需要做什么才能有效地存储这些值然后检查文件中是否存在给定值?
让我们假设每个 BigInt 占用 20 个字节。然后其中的 100k 占用 ~2MB,不到堆大小的 1%。希望它是您负担得起的东西,只保留在 RAM 中。
我会对它们进行排序并放入一个数组中,然后使用 binary search 有效地检查特定值是否在数组中。
更新:数组是最紧凑的表示;一棵树仅在三个指针上每个项目就会浪费 12 到 24 个字节。
BigInt 的大小为 variable,但您可以假设 100K BigInt 对象不会使用超过 10MB。存储它们以便快速搜索任何人的最简单方法是使用 TreeSet,它是 SortedSet 的实现。
我有 Set
个 BigInteger
想要缓存。
此套装最大尺寸为 ~100K
。
我正在使用的应用程序非常轻便:它没有很多内存(堆大约 256mb
)并且不使用数据库(团队正在考虑稍后使用,但现在它不可能)。
初始化后,它收到 BigInteger
的大 array
,需要存储在 File
中以备将来使用。
然后应用程序需要检查特定 BigInteger
是否存储到给定文件中。
考虑到内存影响,我需要做什么才能有效地存储这些值然后检查文件中是否存在给定值?
让我们假设每个 BigInt 占用 20 个字节。然后其中的 100k 占用 ~2MB,不到堆大小的 1%。希望它是您负担得起的东西,只保留在 RAM 中。
我会对它们进行排序并放入一个数组中,然后使用 binary search 有效地检查特定值是否在数组中。
更新:数组是最紧凑的表示;一棵树仅在三个指针上每个项目就会浪费 12 到 24 个字节。
BigInt 的大小为 variable,但您可以假设 100K BigInt 对象不会使用超过 10MB。存储它们以便快速搜索任何人的最简单方法是使用 TreeSet,它是 SortedSet 的实现。