ClickHouse列データベース(Yandexの内部開発)がすべてのユーザーに利用可能になったため、分析データを格納するためにMongoDBの代わりにこのデータベースを使用することにしました。 使用する前に小さなパフォーマンステストを行い、その結果をITコミュニティと共有したいと思います。
テストにはnodejsを使用しました。 nodejs(ドライバー)下のDBMSのライブラリ:
→
クリックハウス→
MongoDB鉄でテスト済み:
i5-3570
8GB DDR3 1333 MHzキングストン
CSSD-N128GB3-BK
OS:Linux Mint 18
テストを開始する前に、ClickHouseとMongoDBを標準設定でインストールしました。 MergeTreeエンジンを使用して、MongoDBのコレクション「testCollections」とClickHouseのテーブル「test」を作成しました。 ClickHouseのテストテーブルの構造は次のとおりです(MongoDBでは、構造は動的です)。
create table test (event_date Date DEFAULT toDate(event_time), event_time DateTime DEFAULT now(), number UInt64, text String, month String) engine = MergeTree(event_date, (event_time, number, text, month), 8192);
Event_ *日付のフィールド。
number-乱数用。
テキスト-ランダムテキスト。
月-ランダムな月。
MongoDBでは、同じ構造を持つ同様のデータも挿入します。
したがって、テストを開始できます。 その場でテストデータを実行します。つまり、データを挿入し、挿入の結果をミリ秒単位で確認します。 ClickHouseにはこの操作がないため、テストは更新されません。
挿入用のデータ構造:
MongoDB [ { event_date: '2017-01-29', event_time: '2017-01-29 16:00:40', number: 3, text: 'sequi voluptatibus labore', month: 'December' }, ... ]
ClickHouse [ [ '2017-01-29', '2017-01-29 16:00:40', 1, 'Et omnis consequatur id eaque suscipit error sed at. Eos ut omnis corporis unde. Tenetur ...', 'July' ], ... ]
それでは始めましょう。
データ量:50万レコード
このテストでは、データを挿入して選択します。
-データベースに挿入します。
MongoDB:

挿入には8289ミリ秒かかりました。
ClickHouse:

挿入には約17375ミリ秒かかりました。
合計17375-8289 = 9086ミリ秒。 MongoDBは、ClickHouseの約2倍の速度でデータを挿入します。
-データを選択
テーブル(コレクション)で月に「December」を何回繰り返すかを選択します。
MongoDB。 リクエスト:
db.testCollections.aggregate([ { "$group" : { _id : "$month", count:{ $sum:1 } } } ])
300ミリ秒の結果:

ClickHouse。 リクエスト:
SELECT month, count() AS count FROM test GROUP BY month;
結果42ミリ秒:

合計300-42 = 258ミリ秒。 ClickHouseは、MongoDBの約7倍の速度でグループ化されたデータを選択します。
制限20で選択を簡単にしましょう。
MongoDB:
db.testCollections.find().limit(20);
結果13ミリ秒:

ClickHouse:
SELECT * FROM test limit 20;
24ミリ秒の結果:

合計で、選択数が20に制限されているため、ClickHouseはMongoDBよりも約2時間多く費やしました。
データを10倍して、データサンプリングテストを繰り返しましょう。
データ量:500万レコード
このテストでは、データを選択します(つまり、上記のデータはすでに両方のデータベースに挿入されています)。
両方のデータベースでのカウントの結果:

-データを選択
同じグループ化要求。 MongoDB:

サンプリング時間3145ミリ秒。
ClickHouse:

サンプリング時間112ミリ秒。
指定されたデータ量のClickHouseは10倍高速です。 制限20の通常の選択は、50万レコードと同じ方法で行われました。
データを10倍して、データサンプリングのテストを繰り返しましょう。 (さらに50万レコードを挿入すると、50 500 000レコードが追加されます)。
データ量:50.5百万レコード
両方のデータベースでのカウントの結果:

-データを選択
同じグループ化要求。 MongoDB:
nodejsのmongodbクライアントは、35009ミリ秒後に落ちました。 MongoDBを使用したGUIクライアントの結果は次のとおりです。

サンプリング時間1分12.571秒
ClickHouse:

サンプリング時間931ミリ秒。
ClickHouseは明らかにリーダーです。
まとめ
ClickHouseは、BigDataを使用したプロジェクトに最適です。 サンプリング速度は印象的です。 このDBMSは、分析情報に関連するデータを保存するのに適しています。
テスト付きプロジェクト:を
参照してください 。