V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
samohyes
V2EX  ›  问与答

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

  •  1
     
  •   samohyes · 71 天前 · 758 次点击
    这是一个创建于 71 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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