gpt4 book ai didi

java - 在不使用太多内存的情况下加快搜索缓存

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:10:58 25 4
gpt4 key购买 nike

我必须访问一个包含 380,000 个条目的数据库。我没有对数据库的写入权限,我只能读取它。我使用 map 创建了一个搜索功能,可以按名字搜索用户。这是我的过程:1 - 从数据库加载所有内容2 - 将所有内容存储到 Map<Charactere, ArrayList<User>> 中,使用Alpha字母根据名字的第一个字母存储用户。

<A> {Alba, jessica, Alliah jane, etc ...}
<B> {Birsmben bani, etc ...}

当有人搜索用户时,我会使用输入的名字的第一个字母并使用 map.get(firstletter) ,然后迭代 ArrayList 以找到所有用户。

map 我猜在内存中占用了巨大的空间(380,000 个用户对象)。我不得不增加堆大小我想让它更快。使用名字作为 Map 的键,以使其更快(有很多人具有相同的名字)。

我想到了两个解决方案:

1 - Still use a map with firstname as key (increasing the heap size again?)
2 - Use files on the disk instead of Map (Alba.dat will contain all Alba for example) and open the right file for each search. No need to incease the heap size, but are there any side effects?

哪个更好? (优点和缺点)

Update with more info

这是一个客户数据库,记录了通过电话调用我们客户服务的客户。接听电话的人必须使用客户姓名(通常是名字,然后是姓氏)进行搜索。使用 Db 搜索速度太慢。我实现的解决方案已经快得多(1/2 秒对使用数据库的 26 秒),但我想改进它。

最佳答案

恕我直言,我不认为你必须在内存中缓存所有条目,但其中的一部分,也许:

  • 也许只使用环形缓冲区,或者
  • 实现 LFU 缓存更复杂,也更有意义,它只保留 N 个最常访问的项目。参见 this question获取有关如何实现此类缓存的提示。

关于java - 在不使用太多内存的情况下加快搜索缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45229047/

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