V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
samohyes
V2EX  ›  问与答

几万条数据中找所有带某个字符串的记录怎么找比较快?

  •  1
     
  •   samohyes · Apr 9, 2021 · 1786 views
    This topic created in 1852 days ago, the information mentioned may be changed or developed.

    lz 这方面是个小白,现在一个项目有 1 万条数据,举个例子,地址:浙江省杭州市拱墅区天翼路等。我想把所有地址含有拱墅区这三个字的记录筛选出来。我原来是很傻地用一个 list 装,一个个找。现在想着,数据量大了,用数据库存然后找会不会更快?我试了下,用 list 一个个找约有 6ms,但是对数据库不大熟,有经验地老哥指点下怎么存怎么找快一点?

    14 replies    2021-04-09 23:37:28 +08:00
    ch2
        1
    ch2  
       Apr 9, 2021
    elasticsearch 了解一下
    codehz
        2
    codehz  
       Apr 9, 2021 via Android
    (如果只是匹配字符串的话,可以先分词,然后做词向量的方法处理。。。
    但是考虑到这里似乎和地理位置相关,这个方法可能不太够用
    samohyes
        3
    samohyes  
    OP
       Apr 9, 2021
    @ch2 好嘞,我去了解下
    a5X77vajGRyLA2aF
        4
    a5X77vajGRyLA2aF  
       Apr 9, 2021
    kmp 算法,ac 自动机; 根据自己需求,选择 NFA 算法或 DFA 算法
    xarthur
        5
    xarthur  
       Apr 9, 2021 via iPhone
    这个数量才多少点……算你一条 15 个字,用 UTF-8 编码,汉字三个字节。一万条数据才 439.45KB……
    samohyes
        6
    samohyes  
    OP
       Apr 9, 2021
    @xarthur 我这情况比较特殊,6ms 对我来说已经占了我所用的一次整个流程的一半了。。。我得把这个时间再缩短下。。
    HeavyWhale
        7
    HeavyWhale  
       Apr 9, 2021
    boyer-morre
    xarthur
        8
    xarthur  
       Apr 9, 2021
    @samohyes 6ms 占了流程的一半……你整个流程才 12ms 啊。如果只是偶尔调用也不慢啊。
    coreki
        9
    coreki  
       Apr 9, 2021 via Android
    DFA 算法
    aec4d
        10
    aec4d  
       Apr 9, 2021 via iPhone
    最容易,最好理解的方法是 n-gram,空间换时间,比如 abc 分成 abc,ab,bc,a,b,c 放到字典里面,查询效率是 O(1)
    IsaacYoung
        11
    IsaacYoung  
       Apr 9, 2021
    巧了 前几天正好看到 kmp 算法
    dawangyezi
        12
    dawangyezi  
       Apr 9, 2021
    先分词,建立倒排索引,然后再找就快了。和检索引擎一个原理。也可以直接用数据库的全文检索插件做
    Ballmer
        13
    Ballmer  
       Apr 9, 2021
    最简单的 fulltext index 全文索引这种效果咋样
    billlee
        14
    billlee  
       Apr 9, 2021
    1 万条数据,如果在意的是延迟,用数据库显然是不行的,一个网络 RTT 都要几毫秒了。
    这种这是多个字符串搜索单个词,没有什么太好的优化方法了。要优化应该要从内存访问方面着手了,比如把链表改成连续内存。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3967 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 144ms · UTC 04:21 · PVG 12:21 · LAX 21:21 · JFK 00:21
    ♥ Do have faith in what you're doing.