我有一个C程序,它挖掘一个巨大的数据源(20GB的原始文本)并生成大量的INSERT,以便在简单的空白表(4个带1个主键的整数列)上执行.设置为MEMORY表格,整个任务在8小时内完成.完成后,表中存在大约1.5亿行.八小时对我来说是一个完全合适的数字.这是一次性交易.
当尝试将MEMORY表转换回来时问题就出现MyISAM了(A)我将为其他进程释放内存,以及(B)当我重新启动计算机时数据不会被杀死.
ALTER TABLE memtable ENGINE = MyISAM
Run Code Online (Sandbox Code Playgroud)
我现在让这个ALTER TABLE查询运行了两天多,而且还没有完成.我现在已经杀了它.
如果我最初将表创建为MyISAM,则写入速度似乎非常差(特别是由于查询需要使用该ON DUPLICATE KEY UPDATE技术).我不能暂时关掉钥匙.如果我去的话,那个表会变得超过1000倍然后我必须重新处理密钥并且基本上在150,000,000,000行上运行GROUP BY.嗯,不.
要实现的关键约束之一:INSERT查询UPDATE记录表中是否存在主键(哈希).
在尝试严格使用MyISAM的初期,我的速度达到每秒1,250行.一旦指数增长,我想这个利率会更高.
我在机器上安装了16GB的内存.什么是生成大型表的最佳方法,最终最终成为磁盘上的索引MyISAM表?
澄清:查询(INSERT ... ON DUPLICATE KEY UPDATE val=val+whatever)中有很多很多UPDATE .无论如何,这不是原始转储问题.我MEMORY首先尝试表的原因是为了加速每个INSERT发生的所有索引查找和表更改.
| 归档时间: |
|
| 查看次数: |
581 次 |
| 最近记录: |