`
sillycat
  • 浏览: 2539328 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Batch Insert in PHP MySQLi

    博客分类:
  • PHP
 
阅读更多
Batch Insert in PHP MySQLi

When I was using oracle database long time ago, I know batch insert is much faster if we do know the data we want to insert. Recently I was using PHP 5.6 and MySQL. I found out that the batch insert is hundreds of times faster.

Here is how I do the batch insert.
public function batchInsertDailyInfo($dailySpends){
$logger = $this->ioc->getService("logger");

$conn = $this->getJobDBConn();
$query = "
INSERT INTO
daily_spendings (date, job_id, daily_spending) VALUES ";
$i = 0;
foreach ($dailySpends as $spend){
if($i > 0){
$query .= ", ";
}
$i++;
$query .= "('" . "{$spend['date']}". "', {$spend['job_id']}, {$spend['spending']})";
if($i > $this->batchSize){
$conn->query($query);
$i = 0;
$query = "
INSERT INTO
daily_spendings (date, job_id, daily_spending) VALUES ";
}
}

if($i > 0){
$conn->query($query);
}

$this->closeDBConn($conn);
}

And I have a very simple PHPUNIT code to test the perf.
    //501 ms, Memory: 38.50MB, 35000 rows batch insert
    public function testBatchInsertDailyInfo(){
    $jobIDs = 4294967295;
    $date = "2016-08-23";
    $spending = 12.36;

    $spendings = array();

    //35000
    for($i = 0; $i<35021; $i++){
    $spendings[] = array(
    'job_id' => $jobIDs + $i,
    'date' => $date,
    'spending' => $spending,
    );
    }

    $this->mySQLDAO->batchInsertDailyInfo($spendings);

    }

It should relate to the size of each row as well. But this works for me in this requirement.

There is one more option, we can prepare and bind_param as well.
/**

*

* @param unknown $dailySpends

* @return unknown

*/

public function batchInsertDailyInfo3($dailySpends){

  $logger = $this->ioc->getService("logger");


  $conn = $this->getJobDBConn();



  $n = 0;

  $values = array();

  $params = array();

  foreach ($dailySpends as $spend){

  //prepare values

  $values = array_merge($values,array($spend['date'], $spend['job_id'], $spend['spend']));

  $n++;

  if($n > $this->batchSize){

  $this->batchPrepareInsert($conn, $values, $n);

  $values = array();

  $params = array();

  $n = 0;

  }

  }



  if($n > 0){

  $this->batchPrepareInsert($conn, $values, $n);

  }

  $this->closeDBConn($conn);

  }


  private function batchPrepareInsert($conn, $values, $n){

  $query = "

  INSERT INTO

  daily_spendings (date, job_id, daily_spending) VALUES(?, ?, ?)".str_repeat(",(?,?,?)",$n-1);

  $stmt = $conn->prepare($query);



  //prepare types and bind params

  $types = str_repeat("sid", $n);

  $params[] = &$types;

  for($i = 0; $i < count($values); $i++) {

  $params[] = & $values[$i];

  }

  //bind params

  call_user_func_array(array($stmt, 'bind_param'), $params);

  //excute batch

  $stmt->execute();
  }

References:
http://stackoverflow.com/questions/19512498/mysqli-multiple-row-insert-simple-multi-insert-query
分享到:
评论

相关推荐

    BatchInsert批量插入计算书.VLX

    探索者需要插件,批量插入计算书,很实惠,很实用的的插件!!!

    mongdb和oracledb已经access数据的batchInsert操作

    1. MongoDB批量Insert操作: MongoDB是一个NoSQL数据库,以JSON格式的文档存储数据。批量插入可以使用`insertMany()`方法,它接受一个文档数组作为参数。例如,在Java中,我们可以创建一个`Document`对象数组,然后...

    Spring Batch in Action英文pdf版

    Spring Batch in Action是一本专注于Spring Batch框架的书籍,由Arnaud Cogoluègnes、Thierry Templier、Gary Gregory和Olivier Bazoud合著,由Manning Publications公司出版。这本书详细介绍了如何使用Spring ...

    spring batch in action

    DESCRIPTION Even though running batch processes is an everyday task in almost all IT departments, Java developers have had few options for writing batch applications. The result? No standards, poor ...

    InBatch User Guide

    标题《InBatch User Guide》表明该文档是一份指南手册,其目的是为了指导用户如何使用InBatch这款软件。InBatch可能是一款与批量处理相关的专业软件,适用于需要进行批量生产或批量操作的场景,比如工业批量控制、...

    Spring Batch in Action

    《Spring Batch in Action》是一本深入探讨Spring Batch框架的书籍,由Arnaud Cogoluègnes、Thierry Templier、Gary Gregory和Olivier Bazoud共同编写,Manning出版社出版。这本书旨在帮助读者理解和掌握如何使用...

    Spring batch in action

    Spring Batch是一本介绍如何使用Spring Batch框架来构建批处理应用程序的专业书籍。在软件行业中,随着各种趋势的发展,例如基于Web的应用、面向服务的架构(SOA)以及事件驱动的应用,批处理应用程序虽然存在已久,...

    The Definitive Guide to Spring Batch, 2nd Edition.epub

    Work with all aspects of batch processing in a modern Java environment using a selection of Spring frameworks. This book provides up-to-date examples using the latest configuration techniques based on...

    Spring Batch In Action

    ### Spring Batch In Action #### 知识点一:Spring Batch 的简介 - **Spring Batch** 是一个基于 Java 的强大框架,专门设计用于处理大规模数据批处理任务。 - 它为开发人员提供了一套完整的工具来构建高效、可靠...

    Spring.Batch.in.Action.pdf

    《Spring Batch in Action》是一本深入探讨Spring Batch框架的专著,由Arnaud Cogoluègnes、Thierry Templier、Gary Gregory和Olivier Bazoud共同撰写。本书系统地介绍了Spring Batch的核心概念和技术细节,并提供...

    Manning.Spring.Batch.in.Action.Oct.2011

    《Spring Batch in Action》是Manning出版社在2011年10月出版的一本英文技术书籍,专门探讨了Spring Batch这一强大的批处理框架。Spring Batch是Spring生态系统的组成部分,旨在简化批量处理任务的开发,提供了一套...

    batch processing in a neural network processor

    google batch processing in a neural network processor

    EF扩展方法BulkInsert(批量添加)

    context.BulkInsert(entitiesList, options =&gt; options.BatchSize = 1000); ``` 5. **注意事项**: - 批量插入可能不适用于那些需要事务控制的场景,因为一旦开始批量插入,所有操作将作为一个单元进行,如果...

    mp-batch-insert.zip

    在"mp-batch-insert.zip"这个压缩包中,很可能包含了一种改进的批量插入实现,可能是为了提高性能或优化数据库操作。通常,这样的实现可能包括以下方面: 1. **批处理(Batch Processing)**:批处理是数据库提供的...

    BatchInsertAndUpdate Test

    在IT领域,数据库操作是日常开发中的重要环节,特别是在处理大量数据时,高效的批量插入(Batch Insert)和更新(Batch Update)技术显得尤为关键。"BatchInsertAndUpdate Test"这个项目显然是针对这一需求进行的...

    springbatch 详解PDF附加 全书源码 压缩包

    **Spring Batch 深度解析** Spring Batch 是一个强大的、全面的批处理框架,由 Spring 社区开发,旨在简化企业级应用中的批量数据处理任务。这个框架提供了一种标准的方式来处理大量的数据输入和输出,使得开发者...

    maven \"Generating project in Batch mode\"问题的解决

    当遇到"Maven Generating project in Batch mode"的问题时,通常意味着在批量模式下创建Maven项目时遇到了障碍。这篇博客文章“maven \"Generating project in Batch mode\"问题的解决”可能会提供一些解决方案。 ...

    Maning.Spring.Batch.in.Action.2012

    《Spring Batch in Action》是2012年出版的一本专著,主要聚焦于Spring Batch框架的使用和实践。Spring Batch是Spring生态系统中的一个模块,专门用于处理批量处理任务,如数据导入导出、大数据量的计算等。本书旨在...

Global site tag (gtag.js) - Google Analytics