我有一个包含搜索引擎查询日志的文件,其中包含以下列: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数据库中的所有信息真的可以派上用场......