在mysql数据库中插入800万行文件

时间:2014-10-12 16:17:57

标签: java mysql database

我有一个包含搜索引擎查询日志的文件,其中包含以下列:id,timestamp,session,user,document,query,Activity。

查询可以在文件中多次出现,我在Mysql db中创建了2个表:

查询:

+------------------+--------------+------+-----+---------+----------------+
| Field            | Type         | Null | Key | Default | Extra          |
+------------------+--------------+------+-----+---------+----------------+
| id               | int(11)      | NO   | PRI | NULL    | auto_increment |
| query            | varchar(256) | YES  |     | NULL    |                |
| interaction_freq | int(11)      | YES  |     | NULL    |                |
+------------------+--------------+------+-----+---------+----------------+

相互作用:

+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| id             | int(11)      | NO   | PRI | NULL    | auto_increment |
| interaction_id | int(11)      | YES  |     | NULL    |                |
| data           | timestamp    | YES  |     | NULL    |                |
| session        | varchar(256) | YES  |     | NULL    |                |
| user           | int(11)      | YES  |     | NULL    |                |
| document       | int(11)      | YES  |     | NULL    |                |
| query_id       | int(11)      | NO   | MUL | NULL    |                |
| activity       | int(11)      | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+

第一个表保存每个单个查询,在第二个表中,我有具有特定查询的每一行的信息,由query_id引用。 在第一个表中,还保存了interaction_freq(具有该查询的Interaction表中的行数)。

我的文件包含超过800万行和150万个独特查询,所以我希望最后第一个表有150万行,第二个表有800万行。

问题是插入阶段非常慢。该过程快速插入前150.000个唯一查询,但在处理其他查询之后。我正在使用一个由8个8核Intel Xeon节点(32GB RAM)和18-ish Avante四核Xeon 2.4 / 2.66GHz(8GB RAM)组成的集群。

一开始第一个表的“查询”字段是唯一的,所以我认为这可能是问题所在。我通过检查插入行的Java程序内部的唯一性来删除了唯一约束。那并没有解决问题。我试图让这个过程保持运行超过48小时,并且在第一个表中没有达到200.000行。

我想有一个我无法弄清楚的问题...

我打算使用xml文件作为一种可能的解决方法,但是拥有mysql数据库中的所有信息真的可以派上用场......

0 个答案:

没有答案