日期:2014-05-16  浏览次数:20698 次

大量插入数据库的性能问题(postgre)
数据库使用postgre
有许多日志文件需要提取数据到数据库,文件大多2~3G,数据量特别大,现在要把这些数据提取出来,存入到数据库的一张表(假设表名为logtable)中,我想使用多线程分担任务可以提高效率吧。但是具体怎么设计才最好呢?

如果所有的线程都往这张logtable表插入,我感觉不是最好的办法。
有人提出将logtable划分成几张相同结构的表,logtable1,logtable2...,每条线程对一张表插入,全部数据写入完之后,将所有的表的数据集合到logtable中。这办法好么?
我数据库理论知识不太好,并且不同的数据库对表锁的设定也不完全相同,想问问像这种情况怎么做才能拥有较好的效率。

谢谢

------解决方案--------------------
事务内提交的记录数不要太多.
挑闲的时间做.
------解决方案--------------------
如果你的日志的SQL语句是INSERT 格式的
那么在PG会非常慢,比MYSQL慢很多,可以解决的方法是
每隔一段,大概几千行或更多 前加 BEGIN TRANSACTION,后面加COMMIT,使这一段在一个事务中

如果你的日志的SQL语句是COPY格式
那么在PG下很快,比MYSQL的LOAD DATA还快