Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将虚拟数据插入mysql fast_Php_Mysql_Codeigniter_Records - Fatal编程技术网

Php 将虚拟数据插入mysql fast

Php 将虚拟数据插入mysql fast,php,mysql,codeigniter,records,Php,Mysql,Codeigniter,Records,我在我的调试模型中有一个函数,我想用它来向我的应用程序添加虚拟数据,以测试它的速度等等 问题是,在将每个记录添加到db之前,它需要将记录添加到2个不同的表中,并检查重复的用户名等,因此需要一点时间 另外,这个过程将重复大约$total不同的虚拟记录,我想在for循环中一次添加这些记录 例如,对于我想要添加的100个新用户,大约需要5秒钟才能继续 这一次可以吗?还是我需要优化它 如果我想一次添加100010000个用户怎么办??可能吗 编辑: 调用函数以插入数据: public function

我在我的调试模型中有一个函数,我想用它来向我的应用程序添加虚拟数据,以测试它的速度等等

问题是,在将每个记录添加到db之前,它需要将记录添加到2个不同的表中,并检查重复的用户名等,因此需要一点时间

另外,这个过程将重复大约$total不同的虚拟记录,我想在for循环中一次添加这些记录

例如,对于我想要添加的100个新用户,大约需要5秒钟才能继续

这一次可以吗?还是我需要优化它

如果我想一次添加100010000个用户怎么办??可能吗

编辑: 调用函数以插入数据:

public function registerRandomUsers($total = 1){
    $this->load->model("misc_model");
    $this->load->model("encryption_model");
    $this->load->model("signup_model");

    for ($i=1;$i<=$total;$i++){
        $username = $this->misc_model->generateRandomString(15);
        $flag = false;
        while ($flag == false){
            if ($this->user_model->usernameExist($username)){
                $username = $this->misc_model->generateRandomString(15);
            }else{
                $flag = true;

                $password = 'Test123';
                $email = $username.'@email.com';
                $data = array(
                    'username' => $username,
                    'password' => $password,
                    'email' => $email
                );
                $this->signup_model->submitRegistration($data);
                $userdata = $this->user_model->getUserData($username, "username");
            }
        }
    }
}
公共函数registerDomainUsers($total=1){
$this->load->model(“杂项模型”);
$this->load->model(“加密模型”);
$this->load->model(“注册模型”);
对于($i=1;$imisc_model->generateRandomString(15);
$flag=false;
while($flag==false){
如果($this->user\u model->usernameExist($username)){
$username=$this->misc_model->generateRandomString(15);
}否则{
$flag=true;
$password='Test123';
$email=$username.@email.com';
$data=数组(
“用户名”=>$username,
“密码”=>$password,
'email'=>$email
);
$this->signup\u model->提交注册($data);
$userdata=$this->user\u model->getUserData($username,“username”);
}
}
}
}

如果您不担心使用随机字符串作为用户名,只需设置
$email='user.$i.@email.com';
(这样您就不必担心冲突)。运行速度慢的主要原因是,在循环的每次迭代中,您都会向数据库发送一个新的查询-生成批量插入字符串的速度要快得多,如:

INSERT INTO user (email,pass)
VALUES ('user1@email.com','Test123')
,      ('user2@email.com','Test123')
,      ('user3@email.com','Test123')
,      ('user4@email.com','Test123')
,      ('user5@email.com','Test123');

通过这种方式,您可以避免向数据库发送10000个查询的tcp通信开销,并让它一次完成所有操作。

我认为如果您真的在寻找一些真实的样本/测试数据,您应该使用


这是迄今为止我见过的最好的查询之一。

按照以下方式构建您的查询

$conjuctions = str_repeat("('dummy@email.com','test pass'),", 20); // 20 dummy datas
$query = "INSERT INTO user (email,pass) VALUES ".substr($conjunctions,0,str_len($conjuctions).";"
                                               // ^ This is to remove the last comma

@scibuff使用函数更新了帖子。您可以从generatedata.com生成CSV或SQL文件,然后如果您的文件是CSV,您可以使用load file加载,请参阅下面的URL以获取更多帮助。如果是SQL,您可以从命令行登录到mysql并执行以下操作:>>使用;>>source/home/myname/Downloads/testdata.SQL和this应该针对选定的数据库运行所有测试数据SQL insert脚本,就这样完成了。问题是我无法存储相同的电子邮件、用户名和用户id,因此它们需要不同…我可以像$SQL一样追加。=“($email.'$pass'),”;关于主sqlquery@Mikey,bulk insert语句的唯一问题是,它的目的是测试“真实世界”的用户注册?bulk insert对于注册来说不是典型的,因为它们会单独处理。但是,正如您所指出的,它会加速此脚本。