跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 求一个支持并发读写的数据结构
未分類
6 2 月 2021

求一个支持并发读写的数据结构

求一个支持并发读写的数据结构

資深大佬 : yujianwjj 5

场景是,先加载 500 万个 sha256 字符串到内存中,后面会需要大量的对这 500 万个字符串进行查找操作。

现在的实现方法是用 map,先单线程加载 500 万个字符串到 map 中,但是插入效率低。有没有其他支持并发写,且查询效率高的数据结构。

写和读是分开的。不存在同时读写的情况。

大佬有話說 (15)

  • 資深大佬 : Leigg

    你这个题目和内容是相反的呀。

  • 資深大佬 : wunonglin

    goroutine+chan 可以么

  • 資深大佬 : gfreezy

    tries 书

  • 資深大佬 : wingoo

    map 可以根据 key 先拆掉, 不要放在一个 map 中

  • 資深大佬 : Maboroshii

    4L 正解, 对 key 做一个 hash,分成很多份。

  • 資深大佬 : ppyybb

    你这要求需要细化下
    用的啥语言?要多久加载能满足要求?查询延迟要求是多少?有多少线程会去查?是在线 service 还是一次性脚本,还是别的定时 job ?这些都影响设计。

    假如是 java,你直接上 concurrenthashmap 是否可以满足需求?

    或者像前面说的那样,把 key 分段读写。

    复杂点,能不能先并发插入 concurrenthashmap,先应付着查询,然
    后台起个线程再慢慢拷贝到普通 map,弄完了来个原子交换。缺点是内存峰值会大不少

  • 資深大佬 : ppyybb

    @ppyybb 忽略我,原来在 go 节点下面

  • 資深大佬 : securityCoding

    分段吧 ,空间换时间

  • 資深大佬 : asAnotherJack

    分段

  • 資深大佬 : xyjincan

    Redis 可以存吗

  • 資深大佬 : 1011

    写效率低,你就去优化写效率

    影响 map 读写效率的的因素:
    1. 哈希的计算
    2. 扩缩容
    3. 处理哈希冲突

    ps.已知条件太少,单从你给的条件看,可做的“优化”多了去了

  • 資深大佬 : renmu123

    哈希插入和查询都是 o1 的,除非有碰撞,那就找个合适的碰撞函数,你已经放内存里了。
    插入慢就多线程。

  • 資深大佬 : Dongxiem

    这个是静态存储吗?如果是只读不写,建议食用 groupcache 。

  • 資深大佬 : xeaglex

    Trie

  • 資深大佬 : SignLeung

    ConcurrentMap,可以并发插入

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具