问题描述:
       母串:有四万个字符串,已经放到数据库中。
       子串:有6万多个字符串也放到了数据库中。
现在需要把6万子字符串,与4万个母字符串里面的母串字符串进行匹配,检索出成的字符串。每个子串的长度一百到万不等,每个母串的长度一百到几十万不等。
每个存放子串的记录中有母串在数据库中的编号……我的做法是:
    读出所有子串,然后循环:从子串中读取母串编号,读出母串,然后用java的 indexof(String str )进行比较,成功的写入数据库。
    因为数据量多,而且字符串太长,特别是用indexof(String str)判断的时候,非常耗时。
    所以,即便我用了1000条线程进行操作,还是很慢……三个小时才比对了不到4000条数据……    请问有没有大侠有好的方法啊……
小弟感激涕零啊…………
    

解决方案 »

  1.   

    直接sql呢如果是oracle10g,我记得是支持全文检索的
      

  2.   

    并行
    在匹配算法上进行优化 KMP算法
      

  3.   

    sql不行么?
    比如说
    SELECT c.id, c.text, p.text  FROM test.child c
    left join test.parent p on c.pid = p.id
    where p.text like concat('%',c.text,'%')
      

  4.   

    用java 的话 可以试试 查hash表 并且要 保存中间值 速度非常可观 (前提是 母串 要有 子串组成) 如果不是的话 还要进行 快速查找 就要 在加入到数据库的时候进行 分析 生成 可供查找的 索引或者编号 毕竟 存 不注重速度 而取出 我们能感觉到 速度 
      

  5.   


    怎么语无伦次的```从新写了一遍 o(╯□╰)o用java 的话 可以试试 查hash表 并且要 保存中间值 速度非常可观 (前提是 母串 要有 子串组成) 如果不是的就要 在加入到数据库的时候进行 分析 生成 可供查找的 索引或者编号 毕竟 存 不注重速度 而取出 我们能感觉到 速度  
      

  6.   


    可是我用的是mysql数据库……
      

  7.   

    母串 abc def ghigkl mn abd =1+2+3+4+5=15 (空格是为了表达分段 实际是不需要空格的) 字串 abc = 1, def =2 , ghigkl =3 , mn =4  abd = 5 循环查找表(把每次子串的值进行计算保存成的表(计算耗时也非常大))的时候 仅仅比较 子串值 与 母串分段值即可得到位置 比较的是 表值 已大大减小循环次数如果 存入sql时候 无视速度 可以 吧 母串中的 所有 a 与z的位置进行记录(或者更多)  这样 比较的时候 直接 子串遍历 子串 az 位置 (或者更多) 进行 比较 就OK了   1个字母占总 字母数的 26分之1还如果 :根本没时间进行预处理  那就记录 第一次出现 字符不等的位置 然后 下次直接从 不等的位置开始 比较   Ex : qwertqwqwerqwerty  子串 qwerty 第一次比较 剩下的母串为 qwqwerqwerty 第二次剩下母串为 
    qwerqwerty 第三次 qwerty 已经出来结果了 还有就是1000个线程 只会减慢 运行速度`! 线程上下文切换需要时间 因为你根本没有那么多 cpu 我不知道 为啥 你老师 让你用c 求教
      

  8.   

    没用过 各种数据库  
    还是建议 楼主 查查 mysql文档 听从 楼上 各位的 简单 建议