The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
yujianwjj

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

  •  
  •   yujianwjj · Jan 26, 2021 · 3229 views
    This topic created in 2107 days ago, the information mentioned may be changed or developed.

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

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

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

    16 replies  •  2021-01-31 21:53:19 +08:00
    Leigg
    Leigg
    Jan 26, 2021 via iPhone
    1
    你这个题目和内容是相反的呀。
    shakaraka
    shakaraka
    Jan 26, 2021
    2
    goroutine+chan 可以么
    gfreezy
    gfreezy
    Jan 26, 2021
    3
    tries 书
    wingoo
    wingoo
    Jan 26, 2021
    4
    map 可以根据 key 先拆掉, 不要放在一个 map 中
    Maboroshii
    Maboroshii
    Jan 26, 2021
    5
    4L 正解, 对 key 做一个 hash,分成很多份。
    ppyybb
    ppyybb
    Jan 26, 2021 via iPhone
    6
    你这要求需要细化下
    用的啥语言?要多久加载能满足要求?查询延迟要求是多少?有多少线程会去查?是在线 service 还是一次性脚本,还是别的定时 job ?这些都影响设计。

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

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

    复杂点,能不能先并发插入 concurrenthashmap,先应付着查询,然
    后台起个线程再慢慢拷贝到普通 map,弄完了来个原子交换。缺点是内存峰值会大不少
    ppyybb
    ppyybb
    Jan 26, 2021 via iPhone
    7
    @ppyybb 忽略我,原来在 go 节点下面
    securityCoding
    securityCoding
    Jan 26, 2021
    8
    分段吧 ,空间换时间
    asAnotherJack
    asAnotherJack
    Jan 26, 2021
    9
    分段
    xyjincan
    xyjincan
    Jan 26, 2021 via Android
    10
    Redis 可以存吗
    1011
    1011
    Jan 26, 2021
    11
    写效率低,你就去优化写效率

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

    ps.已知条件太少,单从你给的条件看,可做的“优化”多了去了
    renmu123
    renmu123
    Jan 26, 2021 via Android
    12
    哈希插入和查询都是 o1 的,除非有碰撞,那就找个合适的碰撞函数,你已经放内存里了。
    插入慢就多线程。
    Dongxiem
    Dongxiem
    Jan 27, 2021
    13
    这个是静态存储吗?如果是只读不写,建议食用 groupcache 。
    xeaglex
    xeaglex
    Jan 27, 2021
    14
    Trie
    SignLeung
    SignLeung
    Jan 27, 2021
    15
    ConcurrentMap,可以并发插入
    YouLMAO
    YouLMAO
    Jan 31, 2021 via Android
    16
    Trie tree,怎么用 map 呢,占太多内存当然太慢了大哥
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1334 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 19:23 · PVG 03:23 · LAX 11:23 · JFK 14:23
    ♥ Do have faith in what you're doing.