mongodb
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
mongodb [2015/07/28 07:39] – nullpon | mongodb [2020/02/26 02:55] (現在) – [リレーショナルDBとの差異] nullpon | ||
---|---|---|---|
行 12: | 行 12: | ||
|トランザクション|あり|なし| | |トランザクション|あり|なし| | ||
- | MongoDBのドキュメントはBSON(Binary JSON)形式で保存される。JSONで定義されているデータ(オブジェクト・配列・文字列・数値・真偽値・null)と日付(ISODate)を保存できる。トランザクションは存在しないがドキュメント単位でアトミックな操作が保証されている。 | + | MongoDBのドキュメントはBSON(Binary JSON)形式で保存される。JSONで定義されているデータ(オブジェクト・配列・文字列・数値・真偽値・null)と日付(ISODate)、バイナリを保存できる。 |
+ | トランザクションは存在しないがドキュメント単位でアトミックな操作が保証されている。ロックもドキュメント単位で行われる(mongoDB 3.0以降のwiredTigerエンジン使用時) | ||
===== インストール ===== | ===== インストール ===== | ||
MacOSX | MacOSX | ||
行 23: | 行 24: | ||
$ sudo port load mongodb | $ sudo port load mongodb | ||
| | ||
+ | |||
===== 起動 ===== | ===== 起動 ===== | ||
自身の権限で起動してみる | 自身の権限で起動してみる | ||
行 30: | 行 32: | ||
dbpathはデータ保存場所、自身の権限で起動するので自分のホームディレクトリ以下のなど書き込み可能な適当な場所を指定する。dbpathのデフォルトは /data/db 。保存場所が存在しない場合や、読み書き権限が無い場合は起動に失敗するので予め作成しておく。デフォルトでPort 27017を使用する。 | dbpathはデータ保存場所、自身の権限で起動するので自分のホームディレクトリ以下のなど書き込み可能な適当な場所を指定する。dbpathのデフォルトは /data/db 。保存場所が存在しない場合や、読み書き権限が無い場合は起動に失敗するので予め作成しておく。デフォルトでPort 27017を使用する。 | ||
+ | Linuxでは、 **xfs でフォーマットされたディスク上のディレクトリ**を dbpath とする事。特に3系(WiredTiger)では必須、ext4ではパフォーマンスと安定性がかなり損なわれるため production環境では特に注意してください。ext4でサービスインしてひどい目にあっている話もちらほら聞きます。 | ||
===== インタラクティブシェル ===== | ===== インタラクティブシェル ===== | ||
行 120: | 行 123: | ||
</ | </ | ||
+ | ===== インデックス ===== | ||
+ | |||
+ | * B-Tree Index | ||
+ | * 注意点はRDBとほぼ同じ | ||
+ | * _idは常にIndexを持つ | ||
+ | |||
+ | 作成 | ||
+ | |||
+ | < | ||
+ | db.collection.createIndex({fieldName: | ||
+ | </ | ||
+ | |||
+ | ==== TTL Index ==== | ||
+ | |||
+ | TTL Indexを指定すると、指定した時間が過ぎるとドキュメントが削除される。Webアプリケーションのセッションデータの格納、一定期間だけ残したいログの保存などに向いている | ||
+ | |||
+ | 制限 | ||
+ | |||
+ | * インデックスを指定するフィールドはdate型の値でなくてはならない | ||
+ | * 複合インデックスはサポートしない | ||
+ | * Capped Collectionには指定できない | ||
+ | * あとから追加することも可能、ただしそのフィールドに既に通常のインデックスがある場合は作れない。インデックスを削除すればOK | ||
+ | |||
+ | |||
+ | 例)3ヶ月ログを残す | ||
+ | < | ||
+ | db.OperationLog.createIndex({ " | ||
+ | |||
+ | // ログ追加 | ||
+ | db.OperationLog.insert({createdDate: | ||
+ | </ | ||
+ | |||
+ | |||
+ | 例)3600秒間更新がなければ削除する | ||
+ | |||
+ | < | ||
+ | db.UserSession.createIndex( { " | ||
+ | |||
+ | // セッションを延長するため、TTL Indexフィールドを更新 | ||
+ | db.UserSession.update({_id: | ||
+ | </ | ||
+ | |||
+ | |||
+ | 例)指定した時刻に削除する | ||
+ | < | ||
+ | db.UserSession.createIndex({" | ||
+ | |||
+ | // 有効期限の切れる時刻を設定してinsertする(2016/ | ||
+ | db.OperationLog.insert({expiredDate: | ||
+ | </ | ||
+ | |||
+ | |||
===== 管理画面 ===== | ===== 管理画面 ===== | ||
ブラウザでアクセスできるコンソールページ、mongodのport+1000のポートを使う。デフォルトは28017となる。 | ブラウザでアクセスできるコンソールページ、mongodのport+1000のポートを使う。デフォルトは28017となる。 | ||
行 180: | 行 235: | ||
</ | </ | ||
+ | ==== cannot use the part (hoge of hoge.fuga) to traverse the element ({hoge: 1.0}) ==== | ||
+ | |||
+ | オブジェクトではない値に対して、オブジェクトとしてアクセスしようとした | ||
+ | |||
+ | <code javascript> | ||
+ | mongos> db.Test.find({_id: | ||
+ | { " | ||
+ | mongos> db.Test.update({_id: | ||
+ | WriteResult({ | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | }) | ||
+ | </ | ||
+ | |||
+ | hogeオブジェクトのfugaプロパティを更新する操作を行ったが、hogeはオブジェクトではないためエラー |
mongodb.1438069147.txt.gz · 最終更新: 2015/07/28 07:39 by nullpon