DBMS「MongoDB vs ClickHouse」のパフォーマンスの小さな比較

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は、分析情報に関連するデータを保存するのに適しています。

テスト付きプロジェクト:を参照してください

Source: https://habr.com/ru/post/J320762/


All Articles