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

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

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

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

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

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

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

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