MongoDB

MongoDBとは?

共有

MongoDBとは?

MongoDBはオープンソースのドキュメント指向NoSQLデータベースシステムです。データはJavaScript Object Notation (JSON) に似た構造で保存され、データの保存時に指定できます。

各ドキュメントは、必要に応じてどれだけでも複雑な独自の構造を持つことができます。MongoDBは、データをプログラムまたは対話形式で管理およびクエリするための非SQLメソッドとコマンドを提供します。MongoDBは、高速なパフォーマンス、スケーラビリティ、迅速な開発ペースを可能にすることで知られています。

誕生の経緯

MongoDBは2007年にDwight Merriman、Eliot Horowitz、Kevin Ryanによって設立されました。彼らは以前、毎秒40万件の広告を配信するインターネット広告会社で働いていました。

チームはこのトラフィックに対応するために多くのカスタムデータストアを開発していましたが、スケーラビリティとアジリティに関する問題に頻繁に遭遇し、これがこれらの問題を解決するデータベースを作成するというインスピレーションにつながりました。そして、MongoDBが誕生しました。

仕組み

より良いスケーラビリティとアジリティを実現するため、MongoDBはJSONの派生形であるバイナリJSON、つまりBSONを使用しています。BSONはJSONよりも多くのデータ型に対応しており、MongoDBに保存できるデータの種類に柔軟性をもたらします。

MongoDBのデータ構造

で構成されるテーブルではなく、MongoDBにはドキュメントで構成されるコレクションがあります。ドキュメントはフィールドのペアで構成されます。リレーショナルデータベースと比較して、MongoDBデータベースを構成する要素は次のようにざっくりと考えることができます。

リレーショナルドキュメント
テーブル=コレクション
=ドキュメント
=フィールド

基本的な構造は次のようになります。

{
field1: value1,
field2: value2,
field3: value3,
...
fieldN: valueN
}

ドキュメントはJSONオブジェクトと非常によく似ています。ドキュメントは、利用可能なBSONデータ型だけでなく、他のドキュメント、配列、ドキュメントの配列も保持できます。このJSON形式は、ほとんどの現代のプログラミング言語のネイティブオブジェクトに直接マッピングされるため、開発者にとって自然な選択肢となります。

例は次のようになります。

var mydoc = {
_id: ObjectId("5099803df3f4948bd2f98391"),
name: { first: "James", last: "Joyce" },
birth: new Date('Feb 02, 1882'),
death: new Date('Jan 14, 1941'),
books: [ "Ulysses", "Dubliners","Finnegan's Wake" ],
sales : NumberLong(1250000)
}
  • _idには[ObjectId].
  • nameにはfirstlastのフィールドを含む埋め込みドキュメントが保持されます。
  • birthdeathには[Date]型の値が保持されます。
  • booksには[strings].
  • の配列が保持されます。salesには[NumberLong]型の値が保持されます。

型の値が保持されます。データモデルによっては、ジェイムズ・ジョイスとその著作に関するすべての情報を単一のドキュメントに格納するのではなく、リレーショナルデータベースではauthorテーブルとbookテーブルがあり、これらがauthor_idのようなもので結合される可能性があります。

この特定のシンプルなユースケースでは、ドキュメントモデルはデータアクセスを簡素化し、一緒にアクセスされるデータを一緒に格納します。

MongoDBドキュメント vs SQLテーブルレコード

前の例をさらに拡張して、MongoDBのドキュメントがリレーショナルデータベースの同じレコードとどのように異なるかを見てみましょう。リレーショナルデータベースでは、レコードを格納するテーブルは次のようになります。

primary_key | first_name | last_name | age | email | phone_number |
----------- | ---------- | --------- | --- | -------------------- | ------------ |
1 | Tom | Brown | 38 | tom.b@email.com | 555-3802 |
2 | Sarah | Green | 84 | (NULL) | 555-8088 |
3 | Sam | White | 22 | sammi@123.org | 555-1234 |

一方、前述の著者ドキュメントで見たように、MongoDBの類似のドキュメントコレクションは、JSONで次のようにモデル化される場合があります。

{
primary_key: 1,
first_name: "Tom",
last_name: "Brown",
age: 38,
email_address: "tom.b@email.com",
phone_number: "555-3802"
},
{
primary_key: 2,
first_name: "Sarah",
last_name: "Green",
age: 84,
phone_number: "555-8088"
},
{
primary_key: 3,
first_name: "Sam",
last_name: "White",
age: 22,
email_address: "sammi@123.org",
phone_number: "555-1234",
notes: [
"High value customer",
"Has a dog named Fido"
]
}

ドキュメントデータベースとリレーショナルデータベースのどちらを選ぶかは、データベースが格納するデータの種類と、そのデータにどのようにアクセスすべきかにかかっています。MongoDBのドキュメントは、厳密性よりも柔軟性を重視し、アプリケーションからのデータアクセス方法を簡素化します。

MongoDBクエリ言語

MongoDBデータベースはドキュメント指向であるため、データは通常、リレーショナルデータベースのように事前に定義されたスキーマに従いません。これにより、構造化クエリ言語(SQL)でリレーショナルデータベースをクエリする場合とはデータへのアクセス方法が異なります。MongoDBには、単純にMongoDBクエリ言語(MQL)と呼ばれる独自のクエリ言語があります。

SQLと同様に、MQLもユーザーが特定の仕様に基づいてデータにアクセスすることを可能にします。ニーズに関連する条件に一致するドキュメントを返すように制御できます。このガイドではMongoDBでのクエリの詳しい説明はしませんが、詳細についてはMongoDBでのクエリガイドをご覧ください。

MongoDBのクエリの基本的な構文は次のようになります。

db.<collection_name>.find()

クエリ結果をより見やすい形式で表示するには、.pretty()を使用できます。

db.<collection_name>.find().pretty()

まとめ

MongoDBは、市場で最も人気のあるNoSQLデータベースになりました。開発者は、柔軟性とアジリティを保って作業できるため、MongoDBでの作業を楽しんでいます。

MongoDBは、リレーショナルデータベースの厳密性に代わる選択肢を提供し、進化するスキーマを持つアプリケーションにより適しています。MongoDBの入門、インデックス、トランザクションなどに関する詳細なガイドについては、他のMongoDBコンテンツをご覧ください。

著者について
Alex Emerich

Alex Emerich

アレックスは、鳥の観察、ヒップホップ好きの読書家であり、データベースについて書くことも楽しんでいます。彼は現在ベルリンに住んでおり、レオポルド・ブルームのようにあてもなく街を歩く姿が見られます。
© . All rights reserved.