1

我需要能够从 Java 程序中查找字符串对(例如 URL)的信息。信息本身很小,例如只是一个数字。但是会有数百万甚至数十亿个字符串,我需要查找其中任何两个的信息,并且我需要为大量对执行此操作,每秒执行更多次。

理想情况下,这将用作缓存:如果尚未存储特定的一对字符串,我将需要存储与其关联的数字。存储在缓存中的对的总数将远小于可能的对总数。或者,也可以通过定期添加新批次对来完成,甚至可能重新创建数据结构。首要目标是在不占用大量内存的情况下快速查找。

这应该尽可能快,但是因为缓存中的对数可能非常大,我认为这不应该是一种依赖于内存中加载的所有内容的方法。

任何想法如何解决这个问题?我很确定这之前一定已经解决了数千次,但我宁愿从一开始就尝试解决这个问题。

4

1 回答 1

3

大多数解决方案假设a)您有足够的内存来完成任务或b)您正在使用数据库。如果您想要快速查找访问,我建议确保您有足够的内存。您可以通过将 URL 编码为 UTF-8 或 ISO-8859-1(每个字符使用一个字节)来使 URL 更紧凑

另一种选择是使用快速 SSD 和内存映射文件,但这并非易事。

即使值很小,您仍然需要存储键以确保查找正确。

顺便说一句,十亿个字符串使用 100 个字节,每个字符串需要 100 GB,这不像以前那么大。当然,100 GB 的 SSD 的成本并不高。

于 2013-09-09T15:15:26.527 回答