如何提高java运行速度?

步入狼途 2011-11-30 02:56:55
问题描述:
母串:有四万个字符串,已经放到数据库中。
子串:有6万多个字符串也放到了数据库中。
现在需要把6万子字符串,与4万个母字符串里面的母串字符串进行匹配,检索出成的字符串。

每个子串的长度一百到万不等,每个母串的长度一百到几十万不等。
每个存放子串的记录中有母串在数据库中的编号……

我的做法是:
读出所有子串,然后循环:从子串中读取母串编号,读出母串,然后用java的 indexof(String str )进行比较,成功的写入数据库。
因为数据量多,而且字符串太长,特别是用indexof(String str)判断的时候,非常耗时。
所以,即便我用了1000条线程进行操作,还是很慢……三个小时才比对了不到4000条数据……



请问有没有大侠有好的方法啊……
小弟感激涕零啊…………

...全文
408 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
privateTia 2011-12-02
  • 打赏
  • 举报
回复


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

privateTia 2011-12-02
  • 打赏
  • 举报
回复
母串 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 求教
步入狼途 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 privatetia 的回复:]
怎么语无伦次的```从新写了一遍 o(╯□╰)o

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

能说明白点吗?不是太懂哎……我们老师给我的意见是改用c语言……可是那个不熟悉啊……
步入狼途 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ticmy 的回复:]

直接sql呢

如果是oracle10g,我记得是支持全文检索的
[/Quote]

可是我用的是mysql数据库……
privateTia 2011-11-30
  • 打赏
  • 举报
回复

怎么语无伦次的```从新写了一遍 o(╯□╰)o

用java 的话 可以试试 查hash表 并且要 保存中间值 速度非常可观 (前提是 母串 要有 子串组成) 如果不是的就要 在加入到数据库的时候进行 分析 生成 可供查找的 索引或者编号 毕竟 存 不注重速度 而取出 我们能感觉到 速度
privateTia 2011-11-30
  • 打赏
  • 举报
回复
用java 的话 可以试试 查hash表 并且要 保存中间值 速度非常可观 (前提是 母串 要有 子串组成) 如果不是的话 还要进行 快速查找 就要 在加入到数据库的时候进行 分析 生成 可供查找的 索引或者编号 毕竟 存 不注重速度 而取出 我们能感觉到 速度
龙腾冰 2011-11-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yktd26 的回复:]

sql不行么?
比如说
SQL code
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,'%')
[/Quote]

说的非常的好
yktd26 2011-11-30
  • 打赏
  • 举报
回复
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,'%')
JieTouLangRen 2011-11-30
  • 打赏
  • 举报
回复
并行
在匹配算法上进行优化 KMP算法
hello131313 2011-11-30
  • 打赏
  • 举报
回复
多开几台机器分段同时操作 你能开几台就节约几倍的时间 哈哈
龙四 2011-11-30
  • 打赏
  • 举报
回复
直接sql呢

如果是oracle10g,我记得是支持全文检索的
OPPPPOP 2011-11-30
  • 打赏
  • 举报
回复
慢慢耗时间呗 这问题 这需求 期望这辈子别让我遇到……
  • 打赏
  • 举报
回复
全文搜索

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧