怎么插入速度这和慢 本帖最后由 bcrun 于 2014-08-06 09:33:16 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Access 有 LIKE 操作符可以判定字符串的包含,你有必要把子串单独拆出了吗?多次一举! like后的字符串还不是要单独拆出来?再说是两两匹配,两字符串搭配就有900多种,900*400w*400w就是天文数字 400w条字符串,每字符串有40个字符,现要求:如果任意两字符串的公共子字符串的长度超过10,就输出。每字符串可以分为31个子串,也就第一个字符串要循环31次like,才能判断它与其他字符串是否有公共子字符串,就是这个like上个星期把我的硬盘搞烂了,除非有什么好的算法. 没有什么好说的。要么靠足量的硬件资源实现,要么靠算法优化:先手工做数据分布分析,能否做无关联的快速预判;然后设计一个和 KMP 一样能提升速度的匹配算法。 记得几年前搞数据库程序较多时,像这种用insert into语句一条条慢慢插入的写法,执行速度是每秒百条级的。虽然现在年代不同了,硬件更新换代了,但也不过就几千上万条一秒吧。所以,一般巨量数据导入都是要用专门的导入工具的。比如说MSSQL的DTS. 1.2亿一次性用 Access 处理,建索引都很慢。考虑分治法。数值子串约1亿个,10位数取值范围有为100亿。用前4位数字分组,那么就是1万组。同组数字的前4位一致,所以只要存后6位,可以直接用整数类型了。组的数据可以用二进制文件存储,每个记录就是2个Long,8字节,可以用文件长度除8得记录长度。比如你得到序号333的子串1234567890,就在组文件 1234.dat 中添加 (567890,333) 记录。平均每组是1万子串,如果太多,可以对组再拆分。每个组的数据,其实可以用抽屉法判重复。100万Long型(序号)的数组不到4M。数值子串约1200万,可以用前1、2位字符分组。只要分组数据不大,字符串判重复可以用交给数据库。 获取鼠标坐标 软件常用数据处理的问题。 请教:excel中现成表格怎么转换成宏命令? datagrid如何控制列宽?急!在线等 如何在VB中指定数据库为当前数据库,急!!(在线等待) 关于EXCEL文件中数据提取的问题? C++编写的这样的Dll文件可以在VB里面调用吗? 求教:VB中如何调用.exe文件 vb高手,不会见死不救吧! 救人一命胜造七级浮屠!! VB中的第二次弹出菜单失效,求助大侠~ 在VB中如何把text中可选的datafield添加到combo控件中
多次一举!
要么靠足量的硬件资源实现,
要么靠算法优化:先手工做数据分布分析,能否做无关联的快速预判;然后设计一个和 KMP 一样能提升速度的匹配算法。
考虑分治法。数值子串约1亿个,10位数取值范围有为100亿。
用前4位数字分组,那么就是1万组。
同组数字的前4位一致,所以只要存后6位,可以直接用整数类型了。
组的数据可以用二进制文件存储,每个记录就是2个Long,8字节,可以用文件长度除8得记录长度。
比如你得到序号333的子串1234567890,就在组文件 1234.dat 中添加 (567890,333) 记录。
平均每组是1万子串,如果太多,可以对组再拆分。
每个组的数据,其实可以用抽屉法判重复。100万Long型(序号)的数组不到4M。数值子串约1200万,可以用前1、2位字符分组。
只要分组数据不大,字符串判重复可以用交给数据库。