羊をめぐるブログ

趣味の色々について書きます

色んなソース上で大きいサイズのテストデータを作る

はじめに

性能試験を行いたいとき,100GBを超えるようなデータをS3のようなストレージだったり,MysqlのようなRDBなどの上に用意したいことがあると思います.しかし,単純にやろうとすると以下のような問題に直面します.

  • ローカルで100GBのデータなんか作れない!!
  • 作れても転送に時間かかりすぎ!!
  • 101, 102GBみたいに刻んで作る必要があったりすると,もう無理!!

ということで今回はGCS,MySQL,Bigquery上に色んな大きいサイズのデータを作成することを行なったので,備忘録として書いてみようと思います.

方法

基本的に小さいデータを作って転送してから,それをコピーしまくる方針で行う

GCS

主に以下の手順で行います.

  1. 1GBぐらいのサイズのデータをローカルで作る
  2. gsutilを使ってGCS上にアップロードする.
  3. gsutilコマンドを使って,必要なデ. ータサイズ分コピーを繰り返す.

aws S3などの場合でも,awsコマンドで同じようなことができると思われる.

MySql

  1. 1GBぐらいのサイズのCSVデータ(test_1GB.csv)をローカルで作る
  2. MySql上にtest_1GBという名前で,先ほどのCSVを入れるためのテーブルを作る
  3. mysqlimportを使って,先ほど作ったCSVをテーブルに入れる(mysqlimportコマンドで転送する対象のテーブル名はcsvのファイル名と同じでなくてはならないよう?)
  4. 以下のようなクエリを必要なデータサイズ分叩く
DROP TABLE IF EXISTS testdata_NGB;
CREATE TABLE testdata_NGB;
# 以下を繰り返し
INSERT INTO testdata_NGB SELECT * FROM test_1GB;

Bigquery

  1. 1GBぐらいのサイズのCSVデータ(test_1GB.csv)をローカルで作る
  2. 作ったCSVを入れるようのbigquery schemaをjsonで定義する
  3. bq loadコマンドでCSVをもとにテーブルを作成する(スキーマのauto detectも可能) bq --location=$LOCATION load \ --replace \ --source_format=CSV \ --skip_leading_rows=1 \ $PROJECT_ID:$DATASET."test_1GB" \ ../test_1GB.csv \ ./schema.json
  4. bq cpコマンドを必要なデータサイズ分繰り返す bq --location=$LOCATION cp \ --append_table \ $PROJECT_ID:$DATASET."test_1GB" \ $PROJECT_ID:$DATASET."test_${DATA_SIZE}GB"