MongoDBの紹介
6469 ワード
最近mongodbに関する知識を振り返り、MongoDB知識点のまとめとして記事を出力しています.まとめの目的は、MongoDBに関する知識点を振り返り、MongoDBがエンタープライズアプリケーションで果たす役割を明確にし、その後のテクノロジー選択に閲覧可能な情報プレゼンテーションを提供することです.
一、概説
1.MongoDBとは何ですか.一言でまとめる
MongoDBは、Webアプリケーションとインターネットインフラストラクチャのために設計されたデータベース管理システムです.そう、MongoDBはデータベースで、NoSQLタイプのデータベースです
2.なぜMongoDBを使うのですか?
(1)MongoDBは文書・集合の概念を提案しており,BSON(クラスJSON)をそのデータモデル構造として用いており,その構造は2次元テーブルではなくオブジェクト向けであり,1人のユーザがMongoDBに格納されているようになっている.
このようなデータモデルを使用すると、MongoDBは本番環境で高い読み書き能力を提供し、スループットはmysqlなどのSQLデータベースより大幅に向上します.
(2)伸縮しやすく、自動フェイルオーバ.伸縮性とは、スライス能力を提供し、データセットをスライスし、データの記憶圧力を複数のサーバに割り当てることができることを意味します.自動フェイルオーバはコピーセットの概念であり、MongoDBはプライマリノードが生存しているかどうかを検出し、不活性化時にノードからプライマリノードに自動的に昇格し、フェイルオーバに達することができる.
(3)データモデルはオブジェクト向けであるため,myqslのように3枚のテーブルを作成してこのような関係を記述する必要がなく,ブログシステムで「コメント」を「文章」のドキュメントに直接書き込むことができるなど,豊富で階層的なデータ構造を表すことができる.
3.主な特性
(1)文書データ型SQLタイプのデータベースは正規化されており、プライマリ・キーまたは外部キーの制約によってデータの整合性と一意性を保証できるため、SQLタイプのデータベースはデータの整合性の高いシステムによく用いられる.MongoDBはこの点でSQLタイプのデータベースに及ばず、MongoDBには固定的なSchemaがない.このような制約条件が少ないだけに、データのストレージデータ構造をより柔軟にし、ストレージ速度をより速くすることができる.
(2)インスタント・クエリー・コンピテンシーMongoDBは、リレーショナル・データベースのインスタント・クエリーのコンピテンシーを保持し、インデックス(最下位はB treeベース)のコンピテンシーを保持します.この点はリレーショナル・データベースの利点を汲み取り、同じタイプのNoSQL redisに比べて上記の能力はありません.
(3)レプリケーション能力MongoDB自身は、自動フェイルオーバ、拡張読解能力を提供することを目的として、複数のマシンにデータを分散して冗長性を実現するレプリカセットを提供しています.
(4)速度と持続性MongoDBの駆動により,書き込みの意味fire and forgetを実現する.すなわち,書き込み呼び出しを駆動することにより,直ちに成功した結果(エラーであっても)を返すことができ,書き込みの速度をより速くすることができ,もちろん一定の不安全性があり,ネットワークに完全に依存する.MongoDBはJournalingログの概念を提供し、実際にはmysqlのbin-logログのように、挿入する必要がある場合はログに記録を書き込み、実際のデータ操作を完了する.このように停電が発生し、プロセスが突然中断した場合、データがエラーにならないことを保障し、修復機能でJournalingログを読み取ることで修復することができる.
(5)データ拡張MongoDBはスライス技術を用いてデータを拡張し、MongoDBはスライス中のデータブロックを自動的にスライスし、自動的に転送し、各サーバに格納されているデータが同じ大きさになるようにする.
4.C/Sサービスモデル
MongoDBコアサーバは主にmongodプログラムによって起動され、起動時にMongoDBで使用されるメモリを配置する必要はありません.その設計哲学はメモリ管理がオペレーティングシステムに任せることが望ましいためです.メモリ構成が欠けているのはMongoDBの設計のハイライトです.また、mongosルーティングサーバを通じてスライス機能を使用することもできます.
MongoDBの主なクライアントはインタラクティブなjs shellがmongoで起動し、js shellを使用してjsを使用して直接MongoDBと交流することができ、sql文を使用してmysqlデータをクエリーするようにjs構文を使用してMongoDBのデータをクエリーし、また各種言語の駆動パッケージを提供し、各種言語のアクセスを便利にする.
5.完全なコマンドラインツール
mongodumpとmongorestore、データベースのバックアップとリカバリの標準ツール.BSON形式を出力し、データベースを移行します.
mongoexportとmongoimportは、JSON、CSV、TSVデータのエクスポートに使用され、データがマルチフォーマットをサポートする必要がある場合に役立ちます.mongoimportはビッグデータセットとの初期インポートも可能ですが、インポート前についで注意したいのは、mongoDBを十分に活用するためには通常、データモデルを調整する必要があります.
mongosniffは、データベースに送信される操作を観察するためのネットワーク嗅覚ツールです.基本的には,ネットワーク上で伝送されるBSONを読みやすいshell文に変換する.
したがって,モンゴDBとキー値格納とリレーショナルデータベースを組み合わせた最良の特性をまとめることができる.単純なため、データは非常に速く、比較的伸縮しやすく、複雑なクエリーメカニズムのデータベースも提供します.MongoDBは64ビットのサーバの上を走る必要があり、データベースであるため、ホットスペア、コールドスペア処理も必要です.
二、MongoDB shellに入る
この文章はAPIマニュアルではないので、ここではshellの使用についても基礎的にどの機能がどのような文を使うことができるかを紹介し、主にMongoDB shellを使う便利性を示すために、具体的なMongoDB shell文法を知る必要があれば公式ドキュメントを参照することができます.
1.データベースの切り替え
データベースの作成は必須ではありません.データベースとコレクションは、ドキュメントを最初に挿入したときにのみ作成され、データの動的処理と一致します.開発プロセスを簡素化し、加速させ、ネーミングスペースを動的に割り当てるのに役立ちます.データベースまたはコレクションが予期せぬ作成を懸念する場合は、厳格なモードをオンにできます.
2.挿入構文
区別新規データにプライマリ・キーが存在する場合、insert()はエラーを提示し、save()は元の内容を新しい内容に変更します.
例えば、既に存在するデータ:{_id:1,“name”:“n 1”},再度挿入操作を行うと、insert({_id:1,“name”:“n 2”})は、プライマリキーが繰り返すエラーメッセージsave({_id:1,“name”:“n 2”})がn 1をn 2に修正する.同じ点:新しいデータにプライマリ・キーがない場合は、レコードが追加されます.既に存在するデータ:{_id:1,“name”:“n 1”},再度挿入操作を行うと,insert({“name”:“n 2”})が挿入したデータはプライマリキーがないため,データsave({“name”:“n 2”})が1つ増加する.
3.検索構文
4.構文の更新
db.users.update({username:“smith”},{$unset:{country:1}})/ユーザー名がsmithのユーザーの国フィールドを削除する
db.users.update({username:“jones”},{$set:{favorites:{movies:[“casablance”,“rocky”}}})/ここでは主に多値修正を体現し、favortiesフィールドに複数の値を追加する
db.users.update({"favorites.movies":"casablance"},{$addToSet:{favorites.movies:"the maltese"},false,true)//複数更新
5.構文の削除
6.索引関連構文
7.基本管理文法
以上のコマンドは単純な例にすぎません.もしあなたが以前データベースの構文を勉強したことがなく、sqlクエリー構文とMongoDBクエリー構文を勉強し始めたら、どちらが簡単かわかりますか?Javaドライバを使用してMongoDBを操作すると、どのクエリーもHibernateが提供したクエリー方式のように、クエリー条件オブジェクトを構築すれば簡単にクエリーできます(次に例を示します)、ブロガーはES 6に詳しいので、MongoDB js shellを手に入れて完成しても問題ありません.このように簡潔で完璧なクエリーメカニズムのため、MongoDBを深く好きになりました.
二、MongoDBとMySQLの比較
MySQLはリレーショナル・データベースです.
メリット:
異なるエンジンには異なるストレージ方式があります.
クエリー文は従来のsql文を使用し、成熟したシステムを持ち、成熟度が高い.
オープンソース・データベースのシェアは増加し続け、mysqlのシェア・ページは増加し続けています.
欠点:
大量のデータ処理では効率が著しく遅くなります.
Mongodbは非リレーショナル・データベース(nosql)であり、ドキュメント・データベースに属します.ドキュメントはmongodyのデータの基本単位であり、リレーショナル・データベースの行に似ており、複数のキー値が秩序正しく配置されているのがドキュメントであり、構文はjavascriptのオブジェクト向けクエリー言語に似ており、集合向けであり、モードが自由なドキュメント型データベースである.
ストレージ方式:仮想メモリ+永続化.
クエリー文:Mongodb独自のクエリー方式です.
シーンに適しています:イベントの記録、コンテンツ管理、ブログプラットフォームなど.
主なシーン:
1)Webサイトのリアルタイムデータ処理.リアルタイムの挿入、更新、クエリーに適しており、Webサイトのリアルタイムデータストレージに必要なレプリケーションと高度な伸縮性を備えています.2)キャッシュ.パフォーマンスが高いため、情報インフラストラクチャのキャッシュレイヤとして適しています.システムの再起動後に構築された永続化キャッシュレイヤは、下位レベルのデータソースの過負荷を回避します.3)高伸縮性のシーン.数十台または数百台のサーバからなるデータベースに適しており、路線図にはMapReduceエンジンの組み込みサポートが含まれています.
適用されないシーンは次のとおりです.
1)高いトランザクション性が要求されるシステム.2)従来のビジネスインテリジェント応用.3)複雑なクロスドキュメント(テーブル)カスケードクエリー.
アーキテクチャの特徴:レプリカセットとスライスによって高可用性を実現できます.
データ処理:データはハードディスクに格納されますが、頻繁に読み取る必要があるデータはメモリにロードされ、物理メモリに格納され、高速読み書きが可能になります.
成熟度と広範度:新興データベース、成熟度が低く、Nosqlデータベースの中で最も関係型データベースに近く、比較的完備したDBの一つであり、適用者は絶えず増加している.
メリット:
高速!適量レベルのメモリのMongodbのパフォーマンスは非常に迅速で、物理メモリにホットデータを格納し、ホットデータの読み書きが非常に速くなります.高い拡張性、格納されたデータフォーマットはjsonフォーマットです!
欠点:トランザクションはサポートされておらず、ドキュメントの開発が不完全で、完備していません.
原文:https://blog.csdn.net/gjc_csdn/article/details/80419997 https://blog.csdn.net/hayre/article/details/80628431
一、概説
1.MongoDBとは何ですか.一言でまとめる
MongoDBは、Webアプリケーションとインターネットインフラストラクチャのために設計されたデータベース管理システムです.そう、MongoDBはデータベースで、NoSQLタイプのデータベースです
2.なぜMongoDBを使うのですか?
(1)MongoDBは文書・集合の概念を提案しており,BSON(クラスJSON)をそのデータモデル構造として用いており,その構造は2次元テーブルではなくオブジェクト向けであり,1人のユーザがMongoDBに格納されているようになっている.
{
username:'123',
password:'123'
}
このようなデータモデルを使用すると、MongoDBは本番環境で高い読み書き能力を提供し、スループットはmysqlなどのSQLデータベースより大幅に向上します.
(2)伸縮しやすく、自動フェイルオーバ.伸縮性とは、スライス能力を提供し、データセットをスライスし、データの記憶圧力を複数のサーバに割り当てることができることを意味します.自動フェイルオーバはコピーセットの概念であり、MongoDBはプライマリノードが生存しているかどうかを検出し、不活性化時にノードからプライマリノードに自動的に昇格し、フェイルオーバに達することができる.
(3)データモデルはオブジェクト向けであるため,myqslのように3枚のテーブルを作成してこのような関係を記述する必要がなく,ブログシステムで「コメント」を「文章」のドキュメントに直接書き込むことができるなど,豊富で階層的なデータ構造を表すことができる.
3.主な特性
(1)文書データ型SQLタイプのデータベースは正規化されており、プライマリ・キーまたは外部キーの制約によってデータの整合性と一意性を保証できるため、SQLタイプのデータベースはデータの整合性の高いシステムによく用いられる.MongoDBはこの点でSQLタイプのデータベースに及ばず、MongoDBには固定的なSchemaがない.このような制約条件が少ないだけに、データのストレージデータ構造をより柔軟にし、ストレージ速度をより速くすることができる.
(2)インスタント・クエリー・コンピテンシーMongoDBは、リレーショナル・データベースのインスタント・クエリーのコンピテンシーを保持し、インデックス(最下位はB treeベース)のコンピテンシーを保持します.この点はリレーショナル・データベースの利点を汲み取り、同じタイプのNoSQL redisに比べて上記の能力はありません.
(3)レプリケーション能力MongoDB自身は、自動フェイルオーバ、拡張読解能力を提供することを目的として、複数のマシンにデータを分散して冗長性を実現するレプリカセットを提供しています.
(4)速度と持続性MongoDBの駆動により,書き込みの意味fire and forgetを実現する.すなわち,書き込み呼び出しを駆動することにより,直ちに成功した結果(エラーであっても)を返すことができ,書き込みの速度をより速くすることができ,もちろん一定の不安全性があり,ネットワークに完全に依存する.MongoDBはJournalingログの概念を提供し、実際にはmysqlのbin-logログのように、挿入する必要がある場合はログに記録を書き込み、実際のデータ操作を完了する.このように停電が発生し、プロセスが突然中断した場合、データがエラーにならないことを保障し、修復機能でJournalingログを読み取ることで修復することができる.
(5)データ拡張MongoDBはスライス技術を用いてデータを拡張し、MongoDBはスライス中のデータブロックを自動的にスライスし、自動的に転送し、各サーバに格納されているデータが同じ大きさになるようにする.
4.C/Sサービスモデル
MongoDBコアサーバは主にmongodプログラムによって起動され、起動時にMongoDBで使用されるメモリを配置する必要はありません.その設計哲学はメモリ管理がオペレーティングシステムに任せることが望ましいためです.メモリ構成が欠けているのはMongoDBの設計のハイライトです.また、mongosルーティングサーバを通じてスライス機能を使用することもできます.
MongoDBの主なクライアントはインタラクティブなjs shellがmongoで起動し、js shellを使用してjsを使用して直接MongoDBと交流することができ、sql文を使用してmysqlデータをクエリーするようにjs構文を使用してMongoDBのデータをクエリーし、また各種言語の駆動パッケージを提供し、各種言語のアクセスを便利にする.
5.完全なコマンドラインツール
mongodumpとmongorestore、データベースのバックアップとリカバリの標準ツール.BSON形式を出力し、データベースを移行します.
mongoexportとmongoimportは、JSON、CSV、TSVデータのエクスポートに使用され、データがマルチフォーマットをサポートする必要がある場合に役立ちます.mongoimportはビッグデータセットとの初期インポートも可能ですが、インポート前についで注意したいのは、mongoDBを十分に活用するためには通常、データモデルを調整する必要があります.
mongosniffは、データベースに送信される操作を観察するためのネットワーク嗅覚ツールです.基本的には,ネットワーク上で伝送されるBSONを読みやすいshell文に変換する.
したがって,モンゴDBとキー値格納とリレーショナルデータベースを組み合わせた最良の特性をまとめることができる.単純なため、データは非常に速く、比較的伸縮しやすく、複雑なクエリーメカニズムのデータベースも提供します.MongoDBは64ビットのサーバの上を走る必要があり、データベースであるため、ホットスペア、コールドスペア処理も必要です.
二、MongoDB shellに入る
この文章はAPIマニュアルではないので、ここではshellの使用についても基礎的にどの機能がどのような文を使うことができるかを紹介し、主にMongoDB shellを使う便利性を示すために、具体的なMongoDB shell文法を知る必要があれば公式ドキュメントを参照することができます.
1.データベースの切り替え
use dba
データベースの作成は必須ではありません.データベースとコレクションは、ドキュメントを最初に挿入したときにのみ作成され、データの動的処理と一致します.開発プロセスを簡素化し、加速させ、ネーミングスペースを動的に割り当てるのに役立ちます.データベースまたはコレクションが予期せぬ作成を懸念する場合は、厳格なモードをオンにできます.
2.挿入構文
db.users.insert({username:"smith"})
db.users.save({username:"smith"})
区別新規データにプライマリ・キーが存在する場合、insert()はエラーを提示し、save()は元の内容を新しい内容に変更します.
例えば、既に存在するデータ:{_id:1,“name”:“n 1”},再度挿入操作を行うと、insert({_id:1,“name”:“n 2”})は、プライマリキーが繰り返すエラーメッセージsave({_id:1,“name”:“n 2”})がn 1をn 2に修正する.同じ点:新しいデータにプライマリ・キーがない場合は、レコードが追加されます.既に存在するデータ:{_id:1,“name”:“n 1”},再度挿入操作を行うと,insert({“name”:“n 2”})が挿入したデータはプライマリキーがないため,データsave({“name”:“n 2”})が1つ増加する.
3.検索構文
db.users.find()
db.users.count()
4.構文の更新
db.users.update({username:"smith"},{$set:{country:"Canada"}})
// smith Canada
db.users.update({username:“smith”},{$unset:{country:1}})/ユーザー名がsmithのユーザーの国フィールドを削除する
db.users.update({username:“jones”},{$set:{favorites:{movies:[“casablance”,“rocky”}}})/ここでは主に多値修正を体現し、favortiesフィールドに複数の値を追加する
db.users.update({"favorites.movies":"casablance"},{$addToSet:{favorites.movies:"the maltese"},false,true)//複数更新
5.構文の削除
db.foo.remove() //
db.foo.remove({favorties.cities:"cheyene"}) //
db.drop() //
6.索引関連構文
db.numbers.ensureIndex({num:1})
//
db.numbers.getIndexes()
//
7.基本管理文法
show dbs
//
show collections
//
db.stats()
//
db.numbers.stats()
//
db,shutdownServer()
//
db.help()
//
db.foo.help()
//
tab //
以上のコマンドは単純な例にすぎません.もしあなたが以前データベースの構文を勉強したことがなく、sqlクエリー構文とMongoDBクエリー構文を勉強し始めたら、どちらが簡単かわかりますか?Javaドライバを使用してMongoDBを操作すると、どのクエリーもHibernateが提供したクエリー方式のように、クエリー条件オブジェクトを構築すれば簡単にクエリーできます(次に例を示します)、ブロガーはES 6に詳しいので、MongoDB js shellを手に入れて完成しても問題ありません.このように簡潔で完璧なクエリーメカニズムのため、MongoDBを深く好きになりました.
二、MongoDBとMySQLの比較
MySQLはリレーショナル・データベースです.
メリット:
異なるエンジンには異なるストレージ方式があります.
クエリー文は従来のsql文を使用し、成熟したシステムを持ち、成熟度が高い.
オープンソース・データベースのシェアは増加し続け、mysqlのシェア・ページは増加し続けています.
欠点:
大量のデータ処理では効率が著しく遅くなります.
Mongodbは非リレーショナル・データベース(nosql)であり、ドキュメント・データベースに属します.ドキュメントはmongodyのデータの基本単位であり、リレーショナル・データベースの行に似ており、複数のキー値が秩序正しく配置されているのがドキュメントであり、構文はjavascriptのオブジェクト向けクエリー言語に似ており、集合向けであり、モードが自由なドキュメント型データベースである.
ストレージ方式:仮想メモリ+永続化.
クエリー文:Mongodb独自のクエリー方式です.
シーンに適しています:イベントの記録、コンテンツ管理、ブログプラットフォームなど.
主なシーン:
1)Webサイトのリアルタイムデータ処理.リアルタイムの挿入、更新、クエリーに適しており、Webサイトのリアルタイムデータストレージに必要なレプリケーションと高度な伸縮性を備えています.2)キャッシュ.パフォーマンスが高いため、情報インフラストラクチャのキャッシュレイヤとして適しています.システムの再起動後に構築された永続化キャッシュレイヤは、下位レベルのデータソースの過負荷を回避します.3)高伸縮性のシーン.数十台または数百台のサーバからなるデータベースに適しており、路線図にはMapReduceエンジンの組み込みサポートが含まれています.
適用されないシーンは次のとおりです.
1)高いトランザクション性が要求されるシステム.2)従来のビジネスインテリジェント応用.3)複雑なクロスドキュメント(テーブル)カスケードクエリー.
アーキテクチャの特徴:レプリカセットとスライスによって高可用性を実現できます.
データ処理:データはハードディスクに格納されますが、頻繁に読み取る必要があるデータはメモリにロードされ、物理メモリに格納され、高速読み書きが可能になります.
成熟度と広範度:新興データベース、成熟度が低く、Nosqlデータベースの中で最も関係型データベースに近く、比較的完備したDBの一つであり、適用者は絶えず増加している.
メリット:
高速!適量レベルのメモリのMongodbのパフォーマンスは非常に迅速で、物理メモリにホットデータを格納し、ホットデータの読み書きが非常に速くなります.高い拡張性、格納されたデータフォーマットはjsonフォーマットです!
欠点:トランザクションはサポートされておらず、ドキュメントの開発が不完全で、完備していません.
原文:https://blog.csdn.net/gjc_csdn/article/details/80419997 https://blog.csdn.net/hayre/article/details/80628431