MongoDB と Cassandra:惑星規模の書き込み
MongoDB のレプリカセットによる整合性モデルと、Cassandra の調整可能な結果整合性およびリーダーレスレプリケーションを比較し、書き込み中心の IoT ワークロードに適した構成を学びます。
「MongoDB と Cassandra:惑星規模の書き込み」はCoddyKit上の無料MongoDB Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはMongoDB Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 MongoDB Academyコースには全4レッスンが含まれています。
分散データに対する2つのアプローチ
MongoDBとApache Cassandraはいずれも大規模な分散データを扱えますが、アーキテクチャは根本的に異なります。MongoDBは、レプリカセットごとに単一のプライマリへ書き込むリーダー・フォロワー(プライマリ・セカンダリ)モデルを使用します。Cassandraは、どのノードでも任意の書き込みを受け付けられるリーダーレス(ピアツーピア)モデルを使用します。このアーキテクチャの違いが、両者のパフォーマンス、整合性、運用に関するあらゆるトレードオフを左右します。
Cassandraのリーダーレスアーキテクチャ
Cassandraでは、リングトポロジー内のすべてのノードが対等なピアです。書き込みは任意のノード(コーディネーター)に送信でき、コーディネーターがその行のパーティションキーを担当するN個のレプリカノードへ転送します。書き込みを確認する必要があるノード数は、整合性レベル(ONE、QUORUM、ALLなど)で設定します。このアーキテクチャにより単一プライマリのボトルネックがなくなり、真のマルチマスター・マルチリージョン書き込みが可能になります。つまり、すべてのデータセンターで同時に書き込みを受け付けられます。
書き込みスループット:Cassandraの優位性
Cassandraは極めて高い書き込みスループットに最適化されています。書き込みは、ディスク(SSTable)へ一括フラッシュされる前に、コミットログと高速なインメモリ構造(Memtable)へ追記されます。この追記専用方式ではディスク上で書き込みが競合せず、ノード数に比例してスループットが拡大します。毎秒数百万件の測定値を取り込むIoTプラットフォーム、イベントログシステム、単一のMongoDBプライマリでは処理しきれない書き込み速度の時系列ワークロードは、Cassandraの代表的なユースケースです。
Cassandraの調整可能な整合性
Cassandraの整合性レベルはクエリごとに調整できます。ONEは1つのレプリカが確認する設定で、最も高速ですが整合性は最も弱くなります。QUORUMはレプリカの過半数が確認する設定で、遅延と整合性のバランスが取れます。ALLはすべてのレプリカが確認する設定で、最も低速ですが整合性は最も強くなります。重要な式は、読み取り整合性 + 書き込み整合性 > レプリケーション係数の場合、強整合性が得られるということです。この柔軟性により、同じクラスター内でも異なるワークロードに応じたサービスを提供できます。
-- Cassandra CQL: tunable consistency per query
CONSISTENCY QUORUM;
INSERT INTO iot_events (device_id, event_time, temperature)
VALUES ('sensor-42', toTimestamp(now()), 23.5);
-- For lower latency (weaker consistency)
CONSISTENCY ONE;
SELECT * FROM iot_events WHERE device_id = 'sensor-42'
AND event_time >= '2024-06-01 00:00:00'
LIMIT 100;クエリモデル:Cassandraのスキーマファースト設計
Cassandraのデータモデルは根本的にクエリ駆動型です。特定のクエリに効率よく答えられるようにテーブルを設計します。MongoDBのようなアドホッククエリエンジンはありません。テーブルはパーティションキー(行を格納するノードを決定します)でパーティション分割する必要があり、パーティション内の行はクラスタリングキーでソートされます。セカンダリインデックスも存在しますが、MongoDBのものよりはるかに機能が限られます。MongoDBが集約パイプラインで処理できる複雑なクエリ(結合、集計、複数フィールドのフィルター)は、標準のCQLでは実行できません。
-- Cassandra CQL: table designed around a specific query
CREATE TABLE sensor_readings_by_device (
device_id TEXT,
event_time TIMESTAMP,
temperature DOUBLE,
humidity DOUBLE,
PRIMARY KEY (device_id, event_time) -- partition by device, cluster by time
) WITH CLUSTERING ORDER BY (event_time DESC);
-- This query is fast (uses partition and clustering key)
SELECT * FROM sensor_readings_by_device
WHERE device_id = 'sensor-42'
AND event_time >= '2024-06-01'
LIMIT 100;MongoDBのクエリにおける優位性
MongoDBの集約パイプラインと豊富なクエリ演算子により、任意のフィールドに対するアドホッククエリが可能です。たとえば、過去30日間に特定の商品を購入したイスタンブール在住のユーザーをすべて検索したい場合、適切な複合インデックスを持つMongoDBクエリで直接実行できます。Cassandraでは、この特定のクエリ用にあらかじめテーブルを設計するか、データを複数のテーブルに非正規化するか、分析クエリにSparkを使用する必要があります。変化するクエリ要件に対しては、MongoDBのほうがはるかに柔軟です。
// MongoDB: ad-hoc multi-field query — easy
db.orders.find({
'customer.city': 'Istanbul',
'items.sku': 'WGT-001',
createdAt: { $gte: new Date(Date.now() - 30 * 86400000) }
}).sort({ createdAt: -1 })
// Cassandra: would need a pre-designed table for this exact query
// or resort to ALLOW FILTERING (very slow full-table scan)マルチリージョンのアクティブ・アクティブ:Cassandraの決め手となる機能
Cassandraのリーダーレスなマルチデータセンターレプリケーションでは、アクティブ・アクティブ構成が可能です。すべてのリージョンで同時に書き込みを受け付けられます。ニューヨークのユーザーが米国のデータセンターに書き込むと、そのユーザーのデータは欧州とアジアへ非同期に複製されます。MongoDBもレプリカセットの読み取り設定やグローバルクラスター(Atlas)によってマルチリージョンに対応しますが、書き込みは引き続き単一のプライマリリージョンへルーティングする必要があります。すべてのリージョンから遅延なく書き込めることが必要なアプリケーションでは、Cassandraが構造上有利です。
整合性モデルの違い
w: majorityを指定したMongoDBは強整合性を提供します。書き込みが確認されると、それ以降のすべての読み取りで新しい値が返されます。Cassandraのデフォルト設定は結果整合性です。ONEで確認された書き込みは、他のレプリカからの読み取りですぐに見えるとは限りません。アプリケーション側でこの状態を許容するか、QUORUMの読み取りと書き込みを設定して、遅延の増加と引き換えに強整合性を実現する必要があります。この違いはアプリケーションの複雑さに大きく影響します。
運用の複雑さ
どちらのシステムにも運用の専門知識が必要ですが、求められる分野は異なります。MongoDBのレプリカセットアーキテクチャは十分に確立されており、Atlasによってほぼすべての運用を自動化できます。Cassandraのリングトポロジーでは、キャパシティプランニング、トークン管理、コンパクション監視、トゥームストーン管理を慎重に行う必要があります。Cassandraでの削除はトゥームストーンを生成し、時間の経過とともに蓄積して読み取り性能を低下させる可能性があります。MongoDBの削除モデルのほうが運用上は単純です。小規模から中規模のチームでは、一般にMongoDBの運用負荷のほうが低くなります。
IoTと時系列:CassandraとMongoDB
どちらのデータベースもIoTや時系列ワークロードに使われますが、アプローチは異なります。Cassandraの時系列パーティショニング(デバイスごとにパーティション分割し、時間でクラスタリング)では、非常に高い書き込みスループットと、デバイスごとの効率的な時間範囲スキャンを実現できます。MongoDBのネイティブ時系列コレクション(5.0で追加)は、自動バケット化と列指向ストレージによって差の多くを縮めています。数千のデバイスから毎秒数百万件の書き込みが発生する規模では、依然としてCassandraが優位です。この規模未満で、より豊富なクエリが必要なワークロードでは、MongoDBの時系列機能のほうが実用的なことが多いです。
選択の指針:MongoDBとCassandra
次の条件ではCassandraを使用します。書き込みスループットが毎秒数百万件である、マルチリージョンのアクティブ・アクティブ書き込みが必要である、アクセスパターンが非常に予測しやすい(クエリごとにテーブルを用意する)こと、データ保持のTTLが単純であることです。次の条件ではMongoDBを使用します。クエリパターンが頻繁に変化する、複雑な集計や結合が必要である、ドキュメントの柔軟性が重視される、チームが小規模から中規模である、またはドキュメント間の完全なACIDトランザクションが必要である場合です。
理解度チェック
このレッスンで学んだMongoDB & NoSQLデータベースの概念について、理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、次のことを学びました。Cassandraのリーダーレスアーキテクチャは、MongoDBのプライマリ・セカンダリモデルでは実現できない、大規模な書き込みスループットと真のアクティブ・アクティブなマルチリージョン書き込みを可能にします。Cassandraのクエリモデルはスキーマ/テーブルファーストである一方、MongoDBは豊富なアドホッククエリをサポートします。そして両者の選択は、必要な書き込み規模、求められるクエリの柔軟性、チームが対応できる運用負荷によって決まります。次はMongoDBとDynamoDBを比較します。
AI チューターと学ぶ JavaScript — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「MongoDB と Cassandra:惑星規模の書き込み」レッスンは無料ですか?
はい。「MongoDB と Cassandra:惑星規模の書き込み」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、MongoDB Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 MongoDB Academyコースには全4レッスンが含まれています。
「MongoDB と Cassandra:惑星規模の書き込み」で何を学びますか?
MongoDB のレプリカセットによる整合性モデルと、Cassandra の調整可能な結果整合性およびリーダーレスレプリケーションを比較し、書き込み中心の IoT ワークロードに適した構成を学びます。 ブラウザで直接実行するハンズオンコードでMongoDB Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
MongoDB Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのMongoDB Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「MongoDB と Cassandra:惑星規模の書き込み」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このMongoDB Academyレッスンでコードを書いて実行できますか?
はい。すべてのMongoDB Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- MongoDB と Redis:ドキュメントとキーバリューキャッシュ
- MongoDB と Cassandra:惑星規模の書き込み
- MongoDB と DynamoDB:クラウドネイティブなトレードオフ
- Neo4j のようなグラフデータベースを使う場面