mcmdベンチマーク用乱数データセット

mcmdのメソッド比較 」の節で解説されている、 mcmd処理メソッドの処理速度に関するベンチマークテストで用いられているデータセットである。 データイメージは 表 7 に示される通りで。 id , key1 , key2 , key3 , int1 , int2 , float1 , float2 , date , time の10項目から構成されるデータセットである。 全ての項目はランダムに生成されたもので、その概要を 表 8 に示している。

表 7 乱数データセット

id

key1

key2

key3

int1

int2

float1

float2

date

time

0

0

982

31795

516

224

0.09428928373

-10.87915357

20190608

100405

1

4

747

24803

552

-758

0.02317879722

-14.61856635

20150122

084221

2

9

839

92127

570

-662

0.2467738762

81.67126765

20101120

030642

3

2

546

67524

952

-396

0.8956414664

93.21300858

20121117

223858

4

3

681

74869

28

-128

0.9464241466

-85.74571619

20161213

023745

:

:

:

:

:

:

:

:

:

:

表 8 データの生成方法

項目名

生成方法

id

先頭行から0,1,2,...の整数を振ったもの。

key1

キーブレイク処理用の項目で、0〜9の10種の一様乱数を生成。1桁固定長。

key2

キーブレイク処理用の項目で、100〜999の900種の一様乱数を生成。3桁固定長。

key3

キーブレイク処理用の項目で、10000〜99999の9万種の一様乱数を生成。5桁固定長。

int1

集計用の整数項目で、0〜999の一様乱数を生成。

int2

集計用の整数項目で、-999〜999の一様乱数を生成。

float1

集計用の実数項目で、0〜1の一様乱数を生成。

float2

集計用の実数項目で、-100〜100の一様乱数を生成。

date

日付計算用の項目で、2010年1月1日を基準に、0〜3650日の乱数を加算したもの。

time

時刻計算用の項目で、0時0分0秒を基準に0〜86399秒の乱数を加算したもの。

データ生成のスクリプトを リスト 15 に示す。 このスクリプトを実行すると、 表 9 に示されるような サイズ違いの3つのデータが ./DATA に生成される。 10分ほどの時間を要する。

リスト 15 ランダムデータの生成するスクリプト mkdata.py
 1#!/usr/bin/env python
 2# -*- coding: utf-8 -*-
 3
 4import os
 5import nysol.mcmd as nm
 6
 7# generate random data
 8# id,key1,key2,key3,int1,int2,float1,float2,date,time
 9def mkdata(rowSize,oFile):
10  f=None
11  f <<= nm.mnewnumber(a="id", l=rowSize)
12  f <<= nm.mrand(min=0   ,max=9     ,int=True,S=1111,a="key1")
13  f <<= nm.mrand(min=100 ,max=999   ,int=True,S=1113,a="key2")
14  f <<= nm.mrand(min=10000,max=99999,int=True,S=1117,a="key3")
15  f <<= nm.mcal(c='randi(0,999,101)',   a="int1")
16  f <<= nm.mcal(c='randi(-999,999,111)',a="int2")
17  f <<= nm.mcal(c='rand(991)',          a="float1")
18  f <<= nm.mcal(c='rand(997)*200-100',  a="float2")
19  f <<= nm.mcal(c='0d20100101+randi(0,3650,137)',    a="date")
20  f <<= nm.mcal(c='right(t2s(0t000000+randi(0,86399,133)),6)', a="time", o=oFile)
21  f.run()
22
23oPath="./DATA"
24os.system("mkdir -p %s"%oPath)
25
26for size in [10000,1000000,100000000]:
27  mkdata(size, "%s/%s.csv"%(oPath,size))
表 9 生成されるデータ一覧

名称

ファイル名

行数(ヘッダ除く)

サイズ(MB)

small

10000.csv

10000

665 KB

middle

1000000.csv

1000000

68 MB

large

100000000.csv

100000000

7056 MB