gpt4 book ai didi

php - 为虚拟数据创建批量 MySQL 插入脚本

转载 作者:行者123 更新时间:2023-11-29 22:30:10 25 4
gpt4 key购买 nike

例如,我需要在一些大型数据集(1M - 50M)上测试一些查询,但我在编写快速执行此操作的流程时遇到了困难。

我有下面的代码,它是根据我在另一篇 SO 帖子中找到的版本稍加修改的:

set_time_limit(0);

$db_host = 'localhost';
$db_name = 'test';

$db_user = '';
$db_pass = '';

$entries = 1000000;
$entry_words_min = 250;
$entry_words_max = 1000;

/*
End configuration
*/

function get_rand_word( $len_min, $len_max ) {
for ( $i = 0; $i < ( rand( 0, $len_max - $len_min ) + $len_min ); $i++ ) {
$word .= chr(rand(65, 90));
}
return $word;
}
function get_title() {
for ( $i = 0; $i < ( rand( 4, 10 ) ); $i++ ) {
$title .= get_rand_word( 2, 9 ) . ' ';
}
return $title;
}
function get_fulltext() {
for ( $i = 0; $i < ( rand( 250, 500 ) ); $i++ ) {
$fulltext .= get_rand_word( 2, 9 ) . ' ';
}
return $fulltext;
}

$dsn = 'mysql:dbname=' . $db_name . ';host=' . $db_host;

try {
$dbh = new PDO($dsn, $db_user, $db_pass);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
die();
}

$sth = $dbh->prepare('INSERT INTO `sphinx` (`some_id`,`title`,`content`) VALUES (:some_id, :title, :content)');

$counter = 0;

for ( $i = 0; $i < $entries; $i++ ) {
$sth->execute(array(
':some_id' => mt_rand(1,65000),
':title' => get_title(),
':content' => get_fulltext()
));
$counter++;
}

echo $counter . ' rows inserted';

但是插入速度相当慢;仅插入 500k 行就花费了几个小时。我知道我可以编写一个批量插入查询,但我不认为为一百万个插入编写一个批量插入查询是一个好主意;我猜它可以一次分解为 10k 之类的,但想检查是否有更好/更干净的方法可用。

最佳答案

您可以使用https://github.com/fzaninotto/Faker 。您可以创建一个循环并根据需要伪造任意数量的记录。全部带有随机数据。

关于php - 为虚拟数据创建批量 MySQL 插入脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29876976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com