我有一个包含100万行的CSV数据库,我正在使用以下Seeder将其输入到Laravel中:
public function run()
{
DB::table("terms")->truncate();
DB::beginTransaction();
$csvFile = fopen(base_path("database/terms.csv"), "r");
while (($data = fgetcsv($csvFile, 100, ",")) !== FALSE) {
DB::table("terms")->insert([
"serial" => $data['0'],
"output" => $data['1']
]);
}
fclose($csvFile);
DB::commit();
}
以下是运行seeder 的迁移:
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->mediumIncrements("id");
$table->string("serial")->unique();
$table->string("output");
});
$seeder = new ItemsSeeder();
$seeder->run();
}
我不能使用分块,因为为数据创建一个Eloquent 的模型对我来说没有意义,所以我使用数据库事务来提高性能(这将摄取时间从一个小时减少到半个小时).这是一种很好的解决方案,只是它向表中额外添加了几百行.更奇怪的是,当我颠倒排序顺序来判断最后一行时,正如预期的那样,它的id
为1000000
(id
万),这表明没有添加任何额外的行.
这里发生了什么事?