MongoDB

MongoDBとは?

シェア

MongoDBとは?

MongoDBは、オープンソースのドキュメント指向NoSQLデータベースシステムです。データは、データストレージ時に指定できるJavaScript Object Notation(JSON)のような構造を使用して保存されます。

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

誕生秘話

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

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

仕組み

より優れたスケーラビリティとアジリティを実現するために、MongoDBはJSONバリアントであるBinary 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 テーブルと、author_id のようなもので結合された book テーブルが含まれている可能性があります。

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

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 Query Language(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

Alexは、典型的なバードウォッチング、ヒップホップ好きの読書家であり、データベースに関する執筆も楽しんでいます。彼は現在ベルリンに住んでおり、レオポルド・ブルームのように目的もなく街を歩いている姿が見られます。