MySQLである程度大量のダミーデータをシュッと用意する

はじめに

先日まで自分のところにインターンを受け入れていました。

インターンでは簡単なWebアプリケーションを作れるようになってもらおうと、sinatra + MySQLで簡易instagramを作ってもらうお題を出しました

詳しい内容はこちら

docker-composeでSinatra + Nginx + MySQL を動かす時のハマりポイント

お題の一環でDBのIndexについての理解を深めてもらう課題を出しました。

そのため、ある程度多めのデータが必要になりました。

適当なscriptを書いて実行してもよかったのですが、今回は以前知人に教えてもらったツールを使って見ることにしました。

Percona-Lab/mysql_random_data_load

教えてもらったツールがこちら

Percona-Lab/mysql_random_data_load

テーブルの型情報をもとに適切なデータをinsertしてくれるツールで、releaseから自分の環境のビルドをダウンロードして実行するだけなので楽!!

 $  mysql_random_data_load test contents 1000 --user root --host 0.0.0.0
INFO[2018-04-13T10:35:44+09:00] Starting
   0s [====================================================================] 100%
INFO[2018-04-13T10:35:44+09:00] 1000 rows inserted

 $  mysql_random_data_load test contents 100000 --user root --host 0.0.0.0
INFO[2018-04-13T10:37:37+09:00] Starting
   8s [====================================================================] 100%
INFO[2018-04-13T10:37:47+09:00] 100000 rows inserted

自分の環境では10万件のデータ作成でも10秒ほどで完了した

結果はこんな感じ

mysql> select * from contents limit 10;
+----+------------+-----------------------------------------------------------------------------------+-------------------------------------------------------+---------------------+
| id | user_id    | image_path                                                                        | caption                                               | created_at          |
+----+------------+-----------------------------------------------------------------------------------+-------------------------------------------------------+---------------------+
|  1 |  583532949 | iusto tempora ipsum est omnis dolor rerum vero.                                   | et nihil quos beatae enim.                            | 2018-03-12 08:08:19 |
|  2 |  725465688 | mollitia adipisci modi et!                                                        | aut nostrum cum neque.                                | 2017-09-17 02:02:25 |
|  3 | 1986796284 | iure id et quos officia sint natus velit maiores.                                 | ea dolorum voluptas.                                  | 2017-06-07 18:06:13 |
|  4 |  375346648 | dolorum aut dolorum aliquid quis et et ut sequi et.                               | accusantium et et aut amet voluptatibus.              | 2017-05-22 08:08:40 |
|  5 |  712171837 | autem sit nulla odit voluptas eum deserunt aut corporis quia.                     | blanditiis quaerat modi qui id quia.                  | 2018-01-10 14:02:09 |
|  6 |  265597420 | praesentium provident omnis accusantium.                                          | quis quia enim.                                       | 2017-06-25 02:02:32 |
|  7 |  388609898 | incidunt molestiae nam assumenda velit ut est!                                    | qui cum quo non maiores pariatur.                     | 2017-09-03 03:03:33 |
|  8 |  799937243 | quaerat nam necessitatibus officia optio asperiores beatae omnis voluptatem.      | sit pariatur nesciunt ipsum doloremque est eum omnis. | 2017-08-01 23:11:59 |
|  9 |  578782601 | doloremque nisi quam facere consectetur est dicta.                                | eos est officiis placeat aut est!                     | 2018-04-11 03:03:16 |
| 10 | 1861295170 | consequuntur inventore molestiae autem repudiandae velit aut molestias voluptate! | qui harum aut dolores provident et tempora.           | 2017-06-16 14:02:21 |
+----+------------+-----------------------------------------------------------------------------------+-------------------------------------------------------+---------------------+
10 rows in set (0.00 sec)

さいごに

ある程度ランダムなデータが入ってしまうのが許容できればサクッとダミーデータが生成できるのでオススメです

インターン生もindexの重要性について知れたようでよかったです

実践ハイパフォーマンスMySQL 第3版
Baron Schwartz Peter Zaitsev Vadim Tkachenko
オライリージャパン
売り上げランキング: 301,805