通常、データファイルを縮小する必要がない場合は、データファイルをまったく縮小しないでください。これは、ディスク上のデータファイルを「増やす」ことはかなりコストがかかる操作であり、MongoDBがデータファイルに割り当てるスペースが少なくなるため、断片化が少なくなります。
したがって、できるだけ多くのディスクスペースをデータベースに提供してください。
データベースを縮小する必要がある場合は、2つのことを念頭に置いてください。
MongoDBのは、それがそうデータファイルは、その後 64メガバイト、128メガバイトなど、最大2ギガバイトのかもしれ倍増 してデータファイルだ成長(それが2GBまでのファイルを保つ に倍増停止したポイント で。)
ほとんどのデータベースと同様に... に操作を行うと、 は別のジョブを に別にスケジュールする必要があります。 MongoDBには「自動縮小」がありません。実際には主要なnoSQLデータベースの (その名前を嫌う)だけRiak は、自動縮小されます。だから、 OSの スケジューラを使用して縮小を実行するジョブを作成する必要があります。あなたはbashスクリプトを使用するか、または仕事を持ってPHPスクリプトを実行する、など
サーバーサイドのJavascript
をあなたはシュリンクを行うには、サーバー側のJavaScriptを使用することができますし、それはモンゴのシェル経由JS実行することができますFOOと呼ばれるコレクションを想定すると(のcronまたはWindowsスケジューリングサービスのような)仕事を経由して定期的な拠点...
にあなたはbar.jsと実行というファイルに以下のjavascriptを救います...
$ mongo foo bar.js
ジャバスクリプトファイルは次のようになります...
// Get a the current collection size.
var storage = db.foo.storageSize();
var total = db.foo.totalSize();
print('Storage Size: ' + tojson(storage));
print('TotalSize: ' + tojson(total));
print('-----------------------');
print('Running db.repairDatabase()');
print('-----------------------');
// Run repair
db.repairDatabase()
// Get new collection sizes.
var storage_a = db.foo.storageSize();
var total_a = db.foo.totalSize();
print('Storage Size: ' + tojson(storage_a));
print('TotalSize: ' + tojson(total_a));
これは何かなどを実行し、返されます...
MongoDB shell version: 1.6.4
connecting to: foo
Storage Size: 51351
TotalSize: 79152
-----------------------
Running db.repairDatabase()
-----------------------
Storage Size: 40960
TotalSize: 65153
はどれもピーク時に(スケジュール上でこれを実行します時間)あなたは行くのが良いです。キャップされたコレクション
はしかし、capped collections一つの他のオプションがあります。
キャップされたコレクションは、非常に高いパフォーマンス 自動FIFO時代アウト機能 を(年齢アウトは、挿入順序に基づいている)持っているサイズの コレクションを固定されています。 「RRD」のコンセプトに似ていますが、それはよく知っていれば です。また
、高性能の自動キャップされコレクション 、 コレクション内のオブジェクトの挿入順序を維持します。これは特定の使用例のために非常に強力な です。ログなどの です。
基本的には、コレクションのサイズを20GBに制限し、その制限値に達するとMongoDBは最も古いレコードを破棄し、新しいレコードで置き換えます入ってくる。
これは、大量のデータを保存し、古いデータを破棄し、同じ量のディスクスペースを使用するのに最適です。
感謝を素晴らしい投稿です。私がデータファイルを縮小しないと、mongodは常に多くのメモリを必要とします。どのように解決できますか? –
@Zealot ...メモリ使用に関する私の答えを参照してください、それは役に立つかもしれません。 http://stackoverflow.com/questions/4468873/how-to-release-the-caching-which-is-used-by-mongodb/4482465#4482465 –
私はそれを持っています、私たちは16GBのメモリを持っていて、mongodbは4GBのコストです。だから私はそれを気にしないかもしれない。これらのお返事ありがとうございます。 –