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



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



All Articles