[MongoDB]MongoDBベース

4702 ワード

紹介する
---------
オープンソースドキュメントデータベース、高パフォーマンス、高可用性、および伸縮性
ドキュメントデータベースDocumentデータベース
-------------------------------
1文書のデータ構造JSON形式(キー-値ペアで構成され、値は別の文書であってもよい)
2従来のデータベースの1つのレコードに相当するドキュメント
3ドキュメントは16 MB未満でなければなりません
ハイパフォーマンス
-------------
1埋め込みドキュメントの接続を減らし、IO活動を減らすことをサポートする
2より高速なインデックスクエリ(Bツリーインデックス)をサポート
高可用性
-------------
1レプリケーションツール、すなわちレプリカセットを使用して、自動的にフェイルオーバし、データが冗長になります.
コピーセット
-------------
同じデータセットを管理するMongoDBサーバのセット.最終的なコンシステンシ読み取り、低遅延、高スループットの導入を提供します.
じどうしんしゅくせい
-------------
コアの機能サポートレベル拡張-クラスタ
クラスタ間自動スライスおよび配布データ(sharding key)
名詞
-----------
databaseデータベース
collectionコレクション
documentドキュメント(テーブルレコード)
indexインデックス
shardingスライス
namespaceネーミングスペース(データベース.コレクション)
bsonバイナリJSON
ドライバ駆動
Replicationレプリケーション(プライマリ-スタンバイ-構造、プライマリからスタンバイノードへのレプリケーション、文数によって特定の値に達するとトリガーされ、oplogログレプリケーションによってレプリケーションは非同期であり、通常はプライマリノードとmsレベルが異なる.
memory-mapped fileメモリマッピングファイル(BSONデータはメモリに直接ロードされ、オブジェクト.mongodbに変換してメモリを直接操作する必要はありません)
viewビュー
work setインデックスのサブセット
replica setレプリカセット
Data modelデータモデル(最適化:ネストされたドキュメントではなく参照(関連付け)を使用してデータの増加を低減し、データの増加はパフォーマンスに影響します.索引の使用小さなコレクションのサイズを調整します.カーネルパラメータを調整します.
使用
-----------
1データベースへの接続
shell> mongo
>db
>show dbs
>use mydb
>db.user.insert( {name: 'bisoft', age: 20} )
>db.user.insert( {name: 'amos_tl', age: 29} )
>show collections
>db.user.find()
{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "bisoft", "age" : 20 }
{ "_id" : ObjectId("4c2209fef3924d31102bd84b"), "name" : "amos_tl, "age" : 30 }
>db.user.findOne()
{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "bisoft", "age" : 20 }
>db.user.find().limit(1)

_idフィールドがオブジェクトを表すID(Object ID)は、唯一である.
カーソル(cursor)
------------

var c = db.user.find() //       
while ( c.hasNext() ) printjson( c.next() ) //     
printjson( c [ 4 ] ) //   .toArray() -     ,                  ,        
 

条件クエリー

db.user.find( { age : 20 } )
db.user.find( { age : {$gt: 25 }} )

//  

db.user.find( { age : 20 } )
db.user.find( { age : {$gt: 25 } ).sort( {age : 1} )

//   
db.students.find().skip(pageNumber > 0 ? ((pageNumber-1)*pageSize) : 0).limit(pageSize)

//   
db.records.find( { "user_id": { $lt: 42 } }, { "name": 1, "email": 1 } )
     _id , name, email.
db.records.find( { "user_id": { $lt: 42} }, { "_id": 0, "name": 1 , "email": 1 } )
     name, email. 

//   
db.user.count()
db.user.distinct()


コレクション(Collections)
--------------------
テーブル、ドキュメントのセット、インデックスの共有に相当します.
BSON & JSON
----------------
BSONはバイナリのJSONを表す.
CRUD
--------

//   ,    ,         ,  multi: true,        
db.users.update(
   { age: { $gt: 18 } },
   { multi: true }
)

//         ,       , upsert: true ,       .

//     
db.collection.remove({})

//       
db.inventory.remove( { type : "amos_tl" })

//       
db.inventory.remove( { name : "amos_tl" }, 1 )

//     
db.collection.save( { name: "test"} )

Write Concern書き込み関心(書き込み操作はメインノードでのみ発生)
書き込み操作の成功を保証し、書き込みの関心レベル:
unacknowledged         0
acknowledged 1デフォルト(すべての書き込みが成功することを保証)
>1ディスクに書き込み済みであることを確認
majority 
w : 1
journaled:ディスクに書き込まれていることを確認します.データはjournaledログに書き、ディスクに非同期で書きます.このログはREDOログに似ています.oplogは操作ログであり、コピーに用いる.                      
j : true
wtimeout:w>1の場合、タイムアウトを設定ことができる.
wtimeout : 100

バックアップとリカバリ
--------------------
mongodump,mongoexport,mongoimport,mongorestoreを使用
クラスタ
--------
プライマリノード
mongod --master --dbpath/data/masterdb/--oplogSize 1024M
スレーブノード
mongod --slave --source <:> --dbpath/data/slavedb/--autoresync
local.sourcesコレクション
use local
db.sources.find()
db.sources.insert( { host: <,only: databasename> } );
証明書の構成
keyFile =/srv/mongodb/keyfile
openssl rand -base64 741