我正在解析大型日志文件(5 + GB)并提取临时放置的分析行(呼叫名称和执行时间)。我想将这些行插入MySql数据库。
我的问题是:每次解析时我是否应该执行insert语句,或者是否有一些最佳实践可以加速一切?
答案 0 :(得分:7)
如果有任何方法可以进行批量插入,那将有很大帮助(或者至少将数据分批发送到数据库,而不是每次都进行单独调用)。
修改强>
LOAD DATA INFILE听起来更快; o)
答案 1 :(得分:3)
有更好的选择。 见http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html
在您的情况下,我认为将相关记录写入文件然后使用LOAD DATA INFILE是最好的方法。
答案 2 :(得分:1)
对于小型更新,事务数量对性能至关重要。因此,如果您可以在同一个事务中执行多个插入,那么它将会更快。我会先为每笔交易尝试100次插入。
答案 3 :(得分:0)
如果您不想按照Galz链接中的建议(这是优秀的BTW),那么尝试打开连接并准备一次语句,然后循环执行插入的日志文件(使用premared语句) ,然后最后在结束时关闭语句和连接。这不是最快的插入方式,但它是坚持“正常”JDBC方法的最快方式。
答案 4 :(得分:0)
来自java JDBC batch insert
实施例: 您可以对每个插入执行此操作:http://code.google.com/p/hunglish-webapp/source/browse/trunk/src/main/java/hu/mokk/hunglish/lucene/Indexer.java#232
执行此操作批次的大小可以通过可用内存来确定。
答案 5 :(得分:0)
除了插入速度之外,您可能遇到的另一个问题是内存。无论使用何种方法,您都需要考虑内存使用情况,因为记录是从文件加载的。除非您对处理速度有严格的要求,否则使用具有可预测内存占用的方法可能会更好。