由于需要向数据库中导入数据,使用了mysql数据库,不使用trigger的时间只需要3秒钟就可以导入2,3条记录,但是由于需要做些统计信息,所以需要大约70多秒,这个时间也是可以接受的。
但是现在存在的问题是:数据库里面有20个table,每个table分别从各自对应的一个文件(也就是说有20个文件)中导入,而且trigger的操作都是相同的,在这些操作中只与该表格自身有关,与其他表格没有关系。所以采用了20个线程,每个线程使用自己的一个数据库链接,分别导入数据。但是实际运行效果发现大约需要3分钟。这个时间难以接受,因为要争取实时处理。
其中有些table是很小的,不到1万条数据的大约有14个,2万到3万的有3个,1万到2万的有3个.
另外,每个table没有指定type,不知道是否与这个有关?
数据库连接应该没有问题,都是成功的。
我查看了一下系统管理(linux下top),发现程序运行时,CPU占用了大约20%,然后比较耗费内存的进程是:migration/x, 其中x从0到3,不知道是否是这个有关?
或许是数据库不能同时和20个线程交互?但是插入记录的时间各个表格是互不相关的。
不知道问题出现在哪里?还请高手指点一下,谢谢。

解决方案 »

  1.   

    如果没有指定表的type,默认应该是myisam表。这种表的导入可以使用load data infile 语法,导入数据是相当的快啊。但前提是文件中的内容格式要与load data infile语法相兼容。楼主可以试一试
      

  2.   

    呵呵,是说的有点长,但是只有说明白了才能更好的理解,更好的给出建议不是?
    另外,楼上的那位朋友,我用的就是load data infile
    如果不使用trigger的话,只需要2到3秒,但是因为使用了trigger,所以速度变慢很多
      

  3.   

    trigger有问题,我觉得你先把数据到进取,看看花多长时间,导完之后,然后使用sql语句处理trigger的业务逻辑,因为trigger是插入一条记录就会执行业务逻辑,如果记录数很多,这样的业务逻辑要执行很多次,还不如全部load完之后,统一处理一下trigger的业务逻辑。当然,这样降低了数据的时时性。