7.こんな感じのテーブルレコードにCREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT,`mail` varchar(255) NOT NULL,`pass` varchar(255) NOT NULL,`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (`id`)
8.こんな処理private function passHash(){Log::info(‘passHash’.’_start’);while(true){$datas = DB::table('users')->where(DB::raw('length(pass)'), '<', 50)->limit(100)->get();if ($datas->isEmpty()) {break;}foreach($datas as $data){$datas = DB::table('users')->where('id', $data->id)->update(['pass' => Hash::make($data->pass)]);}}Log::info('passHash'.'_end');}
16.データ準備(通常)• 大体15秒程度。mysql> SELECT * FROM `users` ORDER BY `update_time` DESC LIMIT 1;+-------+------------------+---------------+---------------------+| id | mail | pass | update_time |+-------+------------------+---------------+---------------------+| 10000 | 99 mail@mail.com | 99 abcdefghij | 2019-05-19 11:17:57 |+-------+------------------+---------------+---------------------+1 row in set (0.01 sec)mysql> SELECT * FROM `users` ORDER BY `update_time` ASC LIMIT 1;+----+-----------------+--------------+---------------------+| id | mail | pass | update_time |+----+-----------------+--------------+---------------------+| 1 | 0 mail@mail.com | 0 abcdefghij | 2019-05-19 11:17:42 |+----+-----------------+--------------+---------------------+1 row in set (0.00 sec)
22.ハッシュ(通常)private function passHash(){Log::info('passHash'.'_start');while(true){$datas = DB::table('users')->where(DB::raw('length(pass)'), '<', 50)->limit(100)->get();if ($datas->isEmpty()) {break;}foreach($datas as $data){$datas = DB::table('users')->where('id', $data->id)->update(['pass' => Hash::make($data->pass)]);}}Log::info('passHash'.'_end');}• さっき作成した1万件で実行。
23.• 大体9分17秒程度。mysql> SELECT * FROM `users` ORDER BY `update_time` DESC LIMIT 1;+-------+--------------------+--------------------------------------------------------------+---------------------+| id | mail | pass | update_time |+-------+--------------------+--------------------------------------------------------------+---------------------+| 10000 | 0 99 mail@mail.com | $2y$10$oFmEp9d6qtK5WrvUtQ4PRevs8BtFK5CcLEF04qD4Vl0TdQaAY2yMa | 2019-05-19 12:14:41 |+-------+--------------------+--------------------------------------------------------------+---------------------+1 row in set (0.01 sec)mysql> SELECT * FROM `users` ORDER BY `update_time` ASC LIMIT 1;+----+--------------------+--------------------------------------------------------------+---------------------+| id | mail | pass | update_time |+----+--------------------+--------------------------------------------------------------+---------------------+| 1 | 68 0 mail@mail.com | $2y$10$JdBPfgEMn2kAJm2sotn9NObS7hHzuoZwfamx0VrrtQHuhBlxMu5rm | 2019-05-19 12:05:24 |+----+--------------------+--------------------------------------------------------------+---------------------+1 row in set (0.01 sec)ハッシュ(通常)
24.ハッシュ(swoole)private function passHashSwoole($count){Log::info('passHashSwoole'.'_start');$coefficient = 2;$parent = $count / $coefficient;$child = $count * $coefficient;for($i = 0;$i < $parent;$i++){$sql = DB::table('users')->limit($child);if ($i > 0) {$sql->offset($i * $child);}$datas = $sql->get();go(function () use ($datas) {$mysql = $this->getMysql();foreach($datas as $data){$pass = Hash::make($data->pass);$id = $data->id;$data = $mysql->query("update users set pass = '$pass' where id = $id;");}});Log::info('passHashSwoole_child'.'_end');}Log::info('passHashSwoole'.'_end');}• 色々あって何とか辿りついたソース。
25.ハッシュ(swoole)mysql> SELECT * FROM `users` ORDER BY `update_time` DESC LIMIT 1;+------+---------------------+--------------------------------------------------------------+---------------------+| id | mail | pass | update_time |+------+---------------------+--------------------------------------------------------------+---------------------+| 8794 | 64 97 mail@mail.com | $2y$10$dJEFSl9CikhSv.E4ICumMO3uOCqbVvK2E0uTzZWON8tPAejrIm5wq | 2019-05-19 14:54:31 |+------+---------------------+--------------------------------------------------------------+---------------------+1 row in set (0.01 sec)mysql> SELECT * FROM `users` ORDER BY `update_time` ASC LIMIT 1;+----+-------------------+--------------------------------------------------------------+---------------------+| id | mail | pass | update_time |+----+-------------------+--------------------------------------------------------------+---------------------+| 1 | 5 0 mail@mail.com | $2y$10$PFUJN/mKBE3uVNtX/GpE6Oaz5I.VjEFkRxWvh2wiFStQySkdSQJcy | 2019-05-19 14:45:58 |+----+-------------------+--------------------------------------------------------------+---------------------+1 row in set (0.01 sec)
27.• 大体8分33秒程度。mysql> SELECT * FROM `users` ORDER BY `update_time` DESC LIMIT 1;+------+---------------------+--------------------------------------------------------------+---------------------+| id | mail | pass | update_time |+------+---------------------+--------------------------------------------------------------+---------------------+| 8794 | 64 97 mail@mail.com | $2y$10$dJEFSl9CikhSv.E4ICumMO3uOCqbVvK2E0uTzZWON8tPAejrIm5wq | 2019-05-19 14:54:31 |+------+---------------------+--------------------------------------------------------------+---------------------+1 row in set (0.01 sec)mysql> SELECT * FROM `users` ORDER BY `update_time` ASC LIMIT 1;+----+-------------------+--------------------------------------------------------------+---------------------+| id | mail | pass | update_time |+----+-------------------+--------------------------------------------------------------+---------------------+| 1 | 5 0 mail@mail.com | $2y$10$PFUJN/mKBE3uVNtX/GpE6Oaz5I.VjEFkRxWvh2wiFStQySkdSQJcy | 2019-05-19 14:45:58 |+----+-------------------+--------------------------------------------------------------+---------------------+1 row in set (0.01 sec)ハッシュ(swoole)
45.• 大体4分39秒程度。mysql> SELECT * FROM `users` ORDER BY `update_time` DESC LIMIT 1;+-------+---------------------+--------------------------------------------------------------+---------------------+| id | mail | pass | update_time |+-------+---------------------+--------------------------------------------------------------+---------------------+| 10000 | 91 99 mail@mail.com | $2y$10$60bx7lqjuNUys/tHUC3pOOkooM6AyN2/KabeP3flsmGWXfAn7HoRG | 2019-05-19 15:23:22 |+-------+---------------------+--------------------------------------------------------------+---------------------+1 row in set (0.01 sec)mysql> SELECT * FROM `users` ORDER BY `update_time` ASC LIMIT 1;+----+-------------------+--------------------------------------------------------------+---------------------+| id | mail | pass | update_time |+----+-------------------+--------------------------------------------------------------+---------------------+| 1 | 0 0 mail@mail.com | $2y$10$h6ziNoQHFSTsMbe8qOKJ8O/FDfM80vmy21/9nt7Q6H76aV9lcC1VW | 2019-05-19 15:18:43 |+----+-------------------+--------------------------------------------------------------+---------------------+1 row in set (0.01 sec)ハッシュ(swoole)