MongoDB vs Cassandra: NoSQLデータベースの比較

MongoDB vs Cassandra: NoSQLデータベースの比較

  • オーケストレーション
6分で読めます 更新日 Mar 8, 2019

ポイント: MongoDBとCassandraの比較は、それぞれのデータ管理アプローチの違いを浮き彫りにしています。MongoDBはJSONドキュメントを使用し、Cassandraは列指向構造を採用しており、どちらもスケーラビリティとデータ整合性を目指しています。

  • MongoDBはGEOJsonを介して地理データをサポートしています。
  • Cassandraのフラットスキーマは取得速度を向上させます。

ここでは、MongoDBとCassandraの比較を行います。コマンドとコードの例を提供し、単なる説明ではなく、実際の情報を提供します。

要するに、Cassandraはリレーショナルデータベースの現代版ですが、データは行ではなく列でグループ化されており、高速な取得が可能です。MongoDBは、JSON形式でレコードをドキュメントとして保存します。JavaScriptシェルと豊富な関数セットを持っており、作業が容易です。両方のシステムは、非常に大規模にスケールするように設計されています。

データ構造

Apache Cassandraは列指向データベースです。MongoDBはJSON形式でレコードを保存します。MongoDBシェルもJavaScriptをサポートしているため、クエリやデータの変換と操作を段階的に構築し、各操作をJavaScript変数に保存できます。

JSONデータレコードは自己記述的であり、フィールド名とデータ値は同じ場所、つまりドキュメント内に保存されます。MongoDBではスキーマは必要ありませんが、JSONは定義上スキーマを必要としないため、作成することができます:

    var schema = new mongoose.Schema({
cachedContents : {
largest : String,
non_null : Number,
null : Number,
top : [{
item : String,
count : Number
}],
smallest : String,
format : {
displayStyle : String,
align : String
}
}
});

このCassandraの紹介では、Cassandraテーブルが伝統的なリレーショナルデータベースのようにスキーマを使用していることを説明します。しかし、データベースの正規化の概念は排除されています。Oracleの管理者は、Cassandraのスキーマはフラットであると言うでしょう。これは、コモディティサーバーのネットワーク全体にわたってストレージが安価であるため、データを取得するために結合を作成する理由がないためであり、それがデータ取得を遅くします。代わりに、冗長性は問題ありません。また、Cassandraテーブルはすべてのフィールドが埋められている必要はありません。そのため、空のデータを保存するオーバーヘッドはありません。

CassandraはJSONサポートも提供しています:

    use json;

CREATE type json.sale ( id int, item text, amount int );

CREATE TABLE json.customers ( id int  PRIMARY KEY, name text, balance int, sales list> );

INSERT INTO json.customers (id, name, balance, sales) 
VALUES (123, 'Greenville Hardware', 700,
 [{ id: 5544, item : 'tape', amount : 100},
  { id: 5545, item : 'wire', amount : 200}]) ;
select * from customers;

 id  | balance | name                | sales
-----+---------+---------------------+--------------------------------------------------------------------------------
 123 |     700 | Greenville Hardware | [{id: 5544, item: 'tape', amount: 100}, {id: 5545, item: 'wire', amount: 200}]

データの追加

Cassandra:

MongoDB:

    CREATE TABLE Library.book (       
ISBN text, 
copy int, 
title text,  
PRIMARY KEY (ISBN, copy)
 );

INSERT INTO  Library.book (ISBN, copy, title) VALUES('1234',1, 'Bible');

MongoDB:

    db.collection.insertOne( { isbn: 100 } )
{
"acknowledged" : true,
"insertedId" : ObjectId("5c4493aa750820eae9756a15")
}

インデックスの作成

Cassandra:

MongoDB:

    CREATE TABLE  Library.patron (      
ssn int PRIMARY KEY,  
checkedOut set 
);

INSERT INTO Library.patron (ssn, checkedOut) values (123,{'1234','5678'});

create index on Library.patron (checkedOut);

MongoDB:

    db.address.createIndex( { "location": "2dsphere"} )

クラスタリング

私たちはCassandraクラスターの設定とMongoDBクラスターのインストールを説明します。

MongoDB(mongodデーモン)は、Mongo Master、Mongo Shard、Mongo Configサーバーを使用してデータを複製します。クエリサーバー、別名ルーター(mongosデーモン)は、クエリとデータ操作を送信するサーバーを決定します。

Cassandraには、他のサーバーの操作を制御するための構成サーバーはありません。マスター・スレーブの関係はありません。代わりに、各サーバーが同等の機能を持ち、異なる部分(つまりシャード)のデータを保存するリングがあります。

シャーディング

シャーディングとは、データをクラスター全体に分散させることを意味します。これは、ドキュメントまたはインデックスの一部またはすべてにアルゴリズムを適用することによって行われます。MongoDBとCassandraは、これに対して細かい制御を提供します。

CassandraはCassandraパーティションキー、コンポジットキー、およびクラスタリング列を使用してこれを行い、Cassandraデータを分散させるためのトークンの使用とします。簡単に言えば、各テーブルには一意のプライマリキーが必要です。最初にリストされるフィールドはパーティションキーであり、そのハッシュ値がデータを保存するノードを決定します。それらのフィールドが括弧内にラップされている場合、パーティションキーはコンポジットです。そうでない場合、最初のフィールドがパーティションキーです。プライマリキーの後にリストされたフィールドは、すべてクラスタリング列と呼ばれます。これらは、同様の値を迅速に取得するためにパーティション内で昇順または降順でデータを保存します。すべてのフィールドが一緒にプライマリキーです。

また、ここでMongoDBのシャーディングが説明されています。基本的に、異なるサーバーにデータの異なる部分を割り当てるためにインデックスを使用します。例えば、顧客のインデックスを持つレコードは、一組のサーバーにあり、ベンダーは別のサーバーにあるかもしれません。しかし、完全にランダムな分布を望む場合は、インデックスに対してハッシュ値を使用します。また、値の範囲を使用してサーバーにデータを割り当てることもできます。

    sh.enableSharding("tobacco")
{ "ok" : 1 }

レプリケーションによるデータの整合性

レプリケーションとは、ハードウェアやその他の障害によるデータ損失を防ぐために、データのコピーを複数作成することを意味します。

MongoDBは、rs.initiateで設定されたレプリカセットという概念を使用します:

    rs.initiate()
{
	"info2" : "no configuration specified. Using a default configuration for the set",


ConfigReplSet:SECONDARY> rs.status()
{
	"set" : "ConfigReplSet",

Apache Cassandraデータ整合性の構成について説明します。このようにしてレプリケーションを作成します:

    CREATE KEYSPACE Library
      WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };

GEO操作のサポート

MongoDBは、地理データの保存とクエリに対して優れたサポートを提供しています。その明白な理由の一つは、その普遍的な形式がGEOJsonであるためです。地理的位置でツイートを追跡およびGeoLocationでMongoDBをクエリを見てください。

特定の経度と緯度の近くにあるレコードを見つけるためのMongoDBクエリは次のとおりです:

    db.address.find ({
  location: {
     $near: {
       $geometry: {
          type: "Point" ,
          coordinates: [ -72.7738706,41.6332836 ]
       },
       $maxDistance: 4,
       $minDistance: 0
     }
   }
})

そして、mongoシェルがJavaScriptをサポートしているため、クエリを変数に保存できます:

    var connecticut = db.address.find ({location:
     {$geoWithin:
       {$geometry: {
       type: "Polygon",
       coordinates:
 [[ [ -73.564453125, 41.178653972331674 ],
   [ -71.69128417968749, 41.178653972331674 ],
   [ -71.69128417968749, 42.114523952464246 ],
   [ -73.564453125, 42.114523952464246 ],
   [ -73.564453125, 41.178653972331674 ]
   ]]
}}}});

ストレステスト

メモリ管理とパフォーマンス調整については、Apache Cassandraのストレステストとパフォーマンス調整およびMongoDBメモリ使用量で説明します。

MongoDBガイド

  1. MongoDBの概要: MongoDBの始め方
  2. UbuntuおよびMacにMongoDBをインストールする方法
  3. MongoDBでのデータベースの作成
  4. MongoDBシェルの基本コマンド
  5. MongoDB Compass: Mongo GUIの使用
  6. MongoDBのロールベースアクセス制御 (RBAC) の説明
  7. MongoDBのプロジェクションおよびプロジェクションオペレーターの説明
  8. MongoDBの集約関数の説明
  9. MongoDBのソート: sort()メソッドと例
  10. MongoDBでのPushおよびPullオペレーターの使用
  11. MongoDBの$unwindの使い方
  12. 23の一般的なMongoDBクエリオペレーターとそれらの使用方法
  13. MongoDBのジオロケーションクエリの例
  14. MongoDBトランザクションの紹介
  15. MongoDBインデックス: トップインデックスタイプと管理方法
  16. 知っておくべきトップMongoDBコマンド
  17. MongoDBのレプリケーション: 完全な紹介
  18. MongoDBクラスターのセットアップ方法
  19. MongoDBシャーディング: 概念、例、およびチュートリアル
  20. MongoDB Atlas: マネージドMongoDBの設定と使用
  21. MongoDBをDockerコンテナとして実行する方法
  22. MongoDBのメモリ使用量、管理、および要件
  23. MongoDBバックアップのためのmongodumpの使用方法
  24. MongoDBバックアップを復元するためのmongorestoreの例
  25. PyMongoの使用方法
  26. MongoDBおよびNodeJS用のMongooseの使用方法
  27. MongoDBチートシート
  28. MongoDB vs Cassandra: NoSQLデータベースの比較
  29. PostgreSQL vs MongoDB: データベースの比較
  30. MySQL vs MongoDB: データベースの比較
  31. MongoDB認定: 紹介

これらの投稿は私自身のものであり、必ずしもBMCの立場、戦略、または意見を表すものではありません。

オーケストレーションの関連記事

BMCからのさらなる情報に興味がありますか?

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーションに関する月刊メールです:研究、顧客ストーリー、製品ニュース、イベント。

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ザ・ブリーフに登録しました

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーション—BMC AMIおよびControl-M—に関するアナリストの研究、顧客の展開、両者にわたるイベントを網羅しています。