如何向數(shù)據(jù)庫快速的寫入百萬條數(shù)據(jù)
創(chuàng)新互聯(lián)建站從2013年創(chuàng)立,先為徐聞等服務(wù)建站,徐聞等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為徐聞企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
現(xiàn)在我的處理方式是讀取原數(shù)據(jù)庫表的所有數(shù)據(jù),大概有一百萬條吧,然后放到一個數(shù)組里面,循環(huán)向目標數(shù)據(jù)庫寫數(shù)據(jù)(兩個數(shù)據(jù)庫之間的數(shù)據(jù)遷移,表結(jié)構(gòu)不同,我是寫的php腳本來查詢導(dǎo)入的),一開始速度還可以,但是現(xiàn)在幾乎一秒鐘一條了
php導(dǎo)出數(shù)據(jù)excel有專門的庫,當導(dǎo)出少量數(shù)據(jù)的時候速度很快,但是當數(shù)據(jù)量大的時候就會存在服務(wù)器內(nèi)存不夠之類的。
所以在導(dǎo)出大量數(shù)據(jù)的時候就應(yīng)該分頁查詢數(shù)據(jù),避免服務(wù)器宕機。正好PHP提供了fputcsv函數(shù)可以將數(shù)據(jù)寫入到csv文件中。
這樣我們就可以使用PHP對數(shù)據(jù)進行分頁查詢,再寫入到csv文件中。
建表
phinx\bin\phinx.bat migrate -e production
建設(shè) phinx.yml文件
paths:
migrations: %%PHINX_CONFIG_DIR%%\database\migrations
seeds: %%PHINX_CONFIG_DIR%%\database\seeds
environments:
default_migration_table: phinxlog
default_database: development
production:
adapter: mysql
host: localhost
name: jitamin2
user: root
pass: ‘‘
port: 3306
charset: utf8
development:
adapter: mysql
host: localhost
name: development_db
user: root
pass: ‘‘
port: 3306
charset: utf8
testing:
adapter: mysql
host: localhost
name: testing_db
user: root
pass: ‘‘
port: 3306
charset: utf8
數(shù)據(jù)遷移命令如下:
phinx\bin\phinx.bat seed:run -e production
%%PHINX_CONFIG_DIR%%\database\seeds下面的文件示例CreateGroupsTable.php如下:
?php
/*
* This file is part of Jitamin.
*
* Copyright (C) Jitamin Team
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use Jitamin\Foundation\Security\Role;
use Phinx\Seed\AbstractSeed;
class UserSeeder extends AbstractSeed
{
/**
* Run Method.
*/
public function run()
{
$data = [
[
‘username‘ = ‘a(chǎn)dmin‘,
‘password‘ = bcrypt(‘a(chǎn)dmin‘),
‘email‘ = ‘a(chǎn)dmin@admin.com‘,
‘role‘ = Role::APP_ADMIN,
],
];
$users = $this-table(‘users‘);
$users-insert($data)
-save();
}
}