MongoDB---文書型NoSQL
6351 ワード
歴史:アメリカ10 gen社、2009年にMongoDBを出品し、2013年にMongoDB社の公式サイトに改名した.https://www.mongodb.com/コンセプトMVCC:Multiversion concurrency control、マルチバージョン同時制御、マルチライト操作による衝突を解決するためのupdate-in-place:その場で更新
NoSQL
Not Only SQL、非関係型データベース分類キー値データベース:Redis、Memcached等列族データベース:BigTable、HBAse、Apache Cassandra等ドキュメントデータベース:MongoDB、Apache CouchDB等グラフィックデータベース:Neo 4 J等
NoSQLデータベースが一般的に持つ特徴:1、完全性ルールがSQLデータベースより少ないため、読み書き判断が少ない2、データフォーマットが自由で、操作制限が少ない3、キャッシュ能力があるため、大量のデータをメモリに読み込むことができ、メモリヒット率が高い4、ACID特性を備えていない、取引シーンに使用できない
MongoDBとApache CouchDBの対比MongoDB:ドキュメント型記憶、TCPベース、C++書き込み、同時モードupdate-in-place、同一collectionのデータ連続記憶Apache CouchDB:ドキュメント型記憶、HTTPベース、同時モードMVCC、性能比MongoDB差、頻繁に更新されるデータには適用されない
MongoDBインストール
WindowsはMongoDB 1をインストールして、公式サイトの上でzipの包みをダウンロードして、2を解凍して、新しくデータのディレクトリを保存します3、サービスのプロセスをスタートして、データのディレクトリを指定します:mongode.exe--dbpathディレクトリ4、起動Shell(クライアント):mongoをダブルクリックする.exe
LinuxインストールMongoDB 1、公式サイトでtzgパッケージをダウンロードし、/usrに置き、tar-zxvf 2を解凍し、デフォルトデータディレクトリを新規作成:mkdir-p/data/db 3、デーモンプロセスの起動:bin/mongod--fork//--forkはバックグラウンドの実行を表す
Mongo Shell
Mongo ShellはJavaScriptインタプリタのデータ階層です:倉庫database->集合collection->ドキュメントdocument->キー値ペアshellを開き、倉庫を接続しません:mongo-nodb接続倉庫:mongo IP:port/database実行スクリプト:mongo IP:port/database script 1.js
現在接続されているウェアハウスの表示:db表示ウェアハウス:show dbs切替ウェアハウス:use db 1表示セット:show collections参照セット:db.collection 1新規ドキュメント:db.collection1.insert(obj)、db.collection1.batchInsert([])は、セットのすべてのドキュメントを表示します:db.collection1.find()ドキュメントを検索する:db.collection1.findOne({a:1})/aが1のドキュメントを見つけてドキュメントを更新:db.collection1.update({a:1},newObj)/aが1のドキュメントを更新ドキュメント削除ドキュメント:db.collection1.remove({a:1})/aが1のドキュメントクリアセットを削除する:db.collection1.drop(); ドキュメントの保存:db.collection1.save(obj)/objに_がありますid _id:ドキュメント挿入時に指定されていません_idは、自動的に1つの_を生成します.id,値ObjectIdオブジェクトObjectId:タイムスタンプ+ホスト名+PID+自増カウントをコンソールに印刷する:print(1)
モディファイヤ(ドキュメントの一部更新)db.collection1.update(条件,{$set:{a:1}})/指定フィールドdbを設定.collection1.update(条件,{$set:{a:1}},true)/ターゲットが見つからない場合、新しいドキュメントdbが追加されます.collection1.update(条件,{$set:{a:1}},false,true)/4番目のパラメータは、一致するすべてのドキュメントを更新することを示し、デフォルトでは1つのdbのみが更新.collection1.update(条件,{$inc:{a:2}})/指定フィールドに2 dbを加える.collection1.update(条件,{$push:{a:2}})/指定配列に要素dbを追加する.collection1.update(条件,{$addToSet:{a:2}}})/指定配列に要素を追加し、重複dbを無視する.collection1.update(条件,{$pull:{a:2}})/指定配列に要素dbを除去する.collection1.update(条件,{$push:{a:{$each:[1,2]}}})/指定配列に複数の要素dbを追加する.collection1.update({comments.author:“John”},{$set:{comments.$.author:“Jim”})/comments配列でauthorはJohnの要素、authorはJimに変更
クエリーdb.collection1.find({},{username:1})/指定フィールドdbのみを返す.colection1.find({age:{$gte:18,$lt:30}})/[18,30)db.colection 1.find({age:{$in:[1,2,3]})/配列範囲内に$nin dbがある.colection1.find({age:{$or:[age:1,b:2]})/またはdb.colection1.find({age:{$not:{age:1}})/非db.collection1.find({username:/dd/})/正則マッチングdb.collection1.find({fruits:"apple"})/fruits配列にはapple dbが含まれている.collection1.find({fruits:{$all:["apple","banana"}})/fruits配列にはappleとbanana dbが含まれている.collection1.find({},{fruits:{$slice:10}})/指定配列の上位10要素cursor=dbのみを返す.collection1.find().limit(10).sort(age:1)/エントリ数を制限し、ソートし、カーソルを返します
索引
デフォルトのインデックス:id db.collection1.getIndexes()/インデックスdbを表示する.collection1.EnsureIndex({age:1})/単一キーインデックスdb.collection1.EnsureIndex({x:1,y:1})/複合インデックスは、2つの単一キーインデックスとは異なるdb.collection1.EnsureIndex({x:“text”})/全文インデックス、中国語dbはサポートされていません.collection1.EnsureIndex({"$**:"text"})/全ドキュメント全文インデックスdb.collection1.EnsureIndex({age:1},{unique:true})/一意のインデックスであり、ageが重複するドキュメントdbを挿入することは許されない.collection1.EnsureIndex({age:1},{unique:true,sparse:true})/疎インデックスで、複数のドキュメントの同じフィールド値がnull dbであることを許可する.collection1.EnsureIndex({age:1},{name:"myIndex"})/インデックス名dbを指定します.collection1.find().explain().millis//コマンド解釈を表示し、実行に時間がかかるdbを表示する.collection1.dropIndex("age")/インデックスの削除
db.collection1.find({search:“aabb”})/全文インデックスはaaまたはbb dbをクエリーする.collection1.find({search:"aabb"}},{score:{meta:"textScore"})/類似度ソート
db.collection1.ensureIndex({location:"2 d"})/平面地理的インデックス、locationのフォーマットは[経度、次元]db.collection1.find({location:{maxDistance:10})/クエリ距離[1,1]距離が10未満の点db.collection1.find({location:{box:[[1,1],[2,2]]}}})/矩形範囲内の点dbをクエリーする.collection1.find({location:{center:[[1,1],2]}})/円形範囲内の点のクエリ
jsスクリプト
接続倉庫:db=connect(ip:port/db)db:dbが表示されます.getMongo().getDBs()db:dbを切り替える.getSisterDB(「db 1」)表示セット:db.getCollectionName()Linuxコマンドを実行する:run(「pwd」)
コピーセット
oplog:書き込み操作のほとんどの原則が記録されています.生存ノードが総ノードの半分以下の場合、プライマリノードが生存している場合は、スレーブノードに降格し、選択せずに書き込みサービスを停止します.
初期化手順:1、各ノード(奇数個)を起動する:mongod--replset cluster 1--fork//cluster 1はコピークラスタ名2、いずれかのノードを接続する3、コピーセットを初期化する
追加ノード:rs.add(「ip/port」)削除ノード:rs.remove(「ip/port」)表示構成:rs.config()再構成:rs.reconfig(obj)
スライス
ロール:構成サーバ(データ分散情報の保存)、ルーティングmongos、スライスコピーセット
初期化手順:1、3台の構成サーバーを起動する:mongod--configSvrデフォルトポートは27019、デフォルトデータディレクトリは/data/configdb他のプロセスと同じマシン上で2、複数のmongos:mongos--configdb ip:port、ip:port、ip:port//指定構成サーバーアドレスはアプリケーションと同じマシン上に配置できる3、mongosに接続するスライスの追加(コピーセット)>sh.addShard(「ip:port,ip:port,ip:port」)レプリカクラスタのノードアドレスリスト4、スライス有効化>dbを指定する.enableSharding("db 1")>sh.shardCollection("db 1.collection 1",{"name":1})/collection 1 nameフィールド(スライスキー)に従ってスライス
クラスタ情報の表示:sh.status()
≪ステータス|Status|emdw≫
db.CurrentOp()/現在の操作の進捗状況dbを表示します.killOp()/現在の操作dbを停止する.stats()/倉庫状態db.collection1.stats()/集合状態db.shutdownServer()/ダウンタイムdb.getProfilingStatus()/スロークエリー設定
ステータスの表示:mongoStaでmongodを接続する
コンフィギュレーション
YAML形式
起動時にプロファイルを指定:mongod--config D:/mongodb/mongod.conf
ログ#ログ#
システムログ:mongod-logpath='/data/db/log/server.log'-logappend Journalログ:mongod-journal#journalログデフォルトオン、データディレクトリでOplogマスターログ:mongod-oplogSize=1024//単位Mスロークエリーログ:mongod--profile=1--slowms=5//5秒を超える操作を記録
アリ雲
クラウドデータベースMongoDB版
NoSQL
Not Only SQL、非関係型データベース分類キー値データベース:Redis、Memcached等列族データベース:BigTable、HBAse、Apache Cassandra等ドキュメントデータベース:MongoDB、Apache CouchDB等グラフィックデータベース:Neo 4 J等
NoSQLデータベースが一般的に持つ特徴:1、完全性ルールがSQLデータベースより少ないため、読み書き判断が少ない2、データフォーマットが自由で、操作制限が少ない3、キャッシュ能力があるため、大量のデータをメモリに読み込むことができ、メモリヒット率が高い4、ACID特性を備えていない、取引シーンに使用できない
MongoDBとApache CouchDBの対比MongoDB:ドキュメント型記憶、TCPベース、C++書き込み、同時モードupdate-in-place、同一collectionのデータ連続記憶Apache CouchDB:ドキュメント型記憶、HTTPベース、同時モードMVCC、性能比MongoDB差、頻繁に更新されるデータには適用されない
MongoDBインストール
WindowsはMongoDB 1をインストールして、公式サイトの上でzipの包みをダウンロードして、2を解凍して、新しくデータのディレクトリを保存します3、サービスのプロセスをスタートして、データのディレクトリを指定します:mongode.exe--dbpathディレクトリ4、起動Shell(クライアント):mongoをダブルクリックする.exe
LinuxインストールMongoDB 1、公式サイトでtzgパッケージをダウンロードし、/usrに置き、tar-zxvf 2を解凍し、デフォルトデータディレクトリを新規作成:mkdir-p/data/db 3、デーモンプロセスの起動:bin/mongod--fork//--forkはバックグラウンドの実行を表す
Mongo Shell
Mongo ShellはJavaScriptインタプリタのデータ階層です:倉庫database->集合collection->ドキュメントdocument->キー値ペアshellを開き、倉庫を接続しません:mongo-nodb接続倉庫:mongo IP:port/database実行スクリプト:mongo IP:port/database script 1.js
現在接続されているウェアハウスの表示:db表示ウェアハウス:show dbs切替ウェアハウス:use db 1表示セット:show collections参照セット:db.collection 1新規ドキュメント:db.collection1.insert(obj)、db.collection1.batchInsert([])は、セットのすべてのドキュメントを表示します:db.collection1.find()ドキュメントを検索する:db.collection1.findOne({a:1})/aが1のドキュメントを見つけてドキュメントを更新:db.collection1.update({a:1},newObj)/aが1のドキュメントを更新ドキュメント削除ドキュメント:db.collection1.remove({a:1})/aが1のドキュメントクリアセットを削除する:db.collection1.drop(); ドキュメントの保存:db.collection1.save(obj)/objに_がありますid _id:ドキュメント挿入時に指定されていません_idは、自動的に1つの_を生成します.id,値ObjectIdオブジェクトObjectId:タイムスタンプ+ホスト名+PID+自増カウントをコンソールに印刷する:print(1)
モディファイヤ(ドキュメントの一部更新)db.collection1.update(条件,{$set:{a:1}})/指定フィールドdbを設定.collection1.update(条件,{$set:{a:1}},true)/ターゲットが見つからない場合、新しいドキュメントdbが追加されます.collection1.update(条件,{$set:{a:1}},false,true)/4番目のパラメータは、一致するすべてのドキュメントを更新することを示し、デフォルトでは1つのdbのみが更新.collection1.update(条件,{$inc:{a:2}})/指定フィールドに2 dbを加える.collection1.update(条件,{$push:{a:2}})/指定配列に要素dbを追加する.collection1.update(条件,{$addToSet:{a:2}}})/指定配列に要素を追加し、重複dbを無視する.collection1.update(条件,{$pull:{a:2}})/指定配列に要素dbを除去する.collection1.update(条件,{$push:{a:{$each:[1,2]}}})/指定配列に複数の要素dbを追加する.collection1.update({comments.author:“John”},{$set:{comments.$.author:“Jim”})/comments配列でauthorはJohnの要素、authorはJimに変更
クエリーdb.collection1.find({},{username:1})/指定フィールドdbのみを返す.colection1.find({age:{$gte:18,$lt:30}})/[18,30)db.colection 1.find({age:{$in:[1,2,3]})/配列範囲内に$nin dbがある.colection1.find({age:{$or:[age:1,b:2]})/またはdb.colection1.find({age:{$not:{age:1}})/非db.collection1.find({username:/dd/})/正則マッチングdb.collection1.find({fruits:"apple"})/fruits配列にはapple dbが含まれている.collection1.find({fruits:{$all:["apple","banana"}})/fruits配列にはappleとbanana dbが含まれている.collection1.find({},{fruits:{$slice:10}})/指定配列の上位10要素cursor=dbのみを返す.collection1.find().limit(10).sort(age:1)/エントリ数を制限し、ソートし、カーソルを返します
索引
デフォルトのインデックス:id db.collection1.getIndexes()/インデックスdbを表示する.collection1.EnsureIndex({age:1})/単一キーインデックスdb.collection1.EnsureIndex({x:1,y:1})/複合インデックスは、2つの単一キーインデックスとは異なるdb.collection1.EnsureIndex({x:“text”})/全文インデックス、中国語dbはサポートされていません.collection1.EnsureIndex({"$**:"text"})/全ドキュメント全文インデックスdb.collection1.EnsureIndex({age:1},{unique:true})/一意のインデックスであり、ageが重複するドキュメントdbを挿入することは許されない.collection1.EnsureIndex({age:1},{unique:true,sparse:true})/疎インデックスで、複数のドキュメントの同じフィールド値がnull dbであることを許可する.collection1.EnsureIndex({age:1},{name:"myIndex"})/インデックス名dbを指定します.collection1.find().explain().millis//コマンド解釈を表示し、実行に時間がかかるdbを表示する.collection1.dropIndex("age")/インデックスの削除
db.collection1.find({search:“aabb”})/全文インデックスはaaまたはbb dbをクエリーする.collection1.find({search:"aabb"}},{score:{meta:"textScore"})/類似度ソート
db.collection1.ensureIndex({location:"2 d"})/平面地理的インデックス、locationのフォーマットは[経度、次元]db.collection1.find({location:{maxDistance:10})/クエリ距離[1,1]距離が10未満の点db.collection1.find({location:{box:[[1,1],[2,2]]}}})/矩形範囲内の点dbをクエリーする.collection1.find({location:{center:[[1,1],2]}})/円形範囲内の点のクエリ
jsスクリプト
接続倉庫:db=connect(ip:port/db)db:dbが表示されます.getMongo().getDBs()db:dbを切り替える.getSisterDB(「db 1」)表示セット:db.getCollectionName()Linuxコマンドを実行する:run(「pwd」)
コピーセット
oplog:書き込み操作のほとんどの原則が記録されています.生存ノードが総ノードの半分以下の場合、プライマリノードが生存している場合は、スレーブノードに降格し、選択せずに書き込みサービスを停止します.
初期化手順:1、各ノード(奇数個)を起動する:mongod--replset cluster 1--fork//cluster 1はコピークラスタ名2、いずれかのノードを接続する3、コピーセットを初期化する
rs.initiate({
_id: "cluster1", //
members: [ //
{_id: 0, host: "ip/port"},
{_id: 1, host: "ip/port"},
{_id: 2, host: "ip/port"}
]
})
追加ノード:rs.add(「ip/port」)削除ノード:rs.remove(「ip/port」)表示構成:rs.config()再構成:rs.reconfig(obj)
スライス
ロール:構成サーバ(データ分散情報の保存)、ルーティングmongos、スライスコピーセット
初期化手順:1、3台の構成サーバーを起動する:mongod--configSvrデフォルトポートは27019、デフォルトデータディレクトリは/data/configdb他のプロセスと同じマシン上で2、複数のmongos:mongos--configdb ip:port、ip:port、ip:port//指定構成サーバーアドレスはアプリケーションと同じマシン上に配置できる3、mongosに接続するスライスの追加(コピーセット)>sh.addShard(「ip:port,ip:port,ip:port」)レプリカクラスタのノードアドレスリスト4、スライス有効化>dbを指定する.enableSharding("db 1")>sh.shardCollection("db 1.collection 1",{"name":1})/collection 1 nameフィールド(スライスキー)に従ってスライス
クラスタ情報の表示:sh.status()
≪ステータス|Status|emdw≫
db.CurrentOp()/現在の操作の進捗状況dbを表示します.killOp()/現在の操作dbを停止する.stats()/倉庫状態db.collection1.stats()/集合状態db.shutdownServer()/ダウンタイムdb.getProfilingStatus()/スロークエリー設定
ステータスの表示:mongoStaでmongodを接続する
コンフィギュレーション
YAML形式
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
logAppend: true
storage:
journal: # redo
enabled: true
processManagement:
fork: true
net:
bindIp: 127.0.0.1
port: 27017
setParameter:
enableLocalhostAuthBypass: false
起動時にプロファイルを指定:mongod--config D:/mongodb/mongod.conf
ログ#ログ#
システムログ:mongod-logpath='/data/db/log/server.log'-logappend Journalログ:mongod-journal#journalログデフォルトオン、データディレクトリでOplogマスターログ:mongod-oplogSize=1024//単位Mスロークエリーログ:mongod--profile=1--slowms=5//5秒を超える操作を記録
アリ雲
クラウドデータベースMongoDB版