MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Автоматично уплътняване на изтритото пространство в mongodb?

Като цяло, ако не е необходимо да свивате вашите файлове с данни, не трябва да ги свивате изобщо. Това е така, защото „отглеждането“ на вашите файлове с данни на диск е доста скъпа операция и колкото повече място може да отдели MongoDB във файловете с данни, толкова по-малко фрагментация ще имате.

Така че трябва да се опитате да осигурите възможно най-много дисково пространство за базата данни.

Въпреки това ако трябва да свиете базата данни, трябва да имате предвид две неща.

  1. MongoDB увеличава своите файлове с данни чрез удвояване, така че файловете с данни може да са 64MB, след това 128MB и т.н. до 2GB (в този момент той спира да удвоява, за да запази файлове до 2GB.)

  2. Както при повечето бази данни... операции със задачи, като свиване, ще трябва да планирате отделна задача, така че в MongoDB няма „автоматично свиване“. Всъщност от основните noSQL бази данни (мразя това име) само Riakwill автоматично се свива. Така че ще трябва да създадете задание с помощта на планировчика на вашата операционна система, за да стартирате свиване. Можете да използвате bash скрипт или да накарате задача да изпълнява php скрипт и т.н.

Javascript от страна на сървъра

Можете да използвате Javascript от страна на сървъра, за да направите свиването и да стартирате този JS чрез обвивката на mongo редовно чрез задание (като cron или услугата за планиране на Windows) ...

Да приемем колекция, наречена foo ще запазите javascript по-долу във файл, наречен bar.js и стартирайте ...

$ mongo foo bar.js

Javascript файлът би изглеждал нещо като ...

// 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

Пуснете това по график (без пикови часове) и сте готови.

Ограничени колекции

Има обаче една друга опция, ограничени колекции .

По принцип можете да ограничите размера на (или броя на документите в ) колекция, да речем .. 20 GB и след като това ограничение бъде достигнато, MongoDB ще започне да изхвърля най-старите записи и да ги заменя с по-нови записи, когато постъпват.

Това е чудесен начин да запазите голямо количество данни, като с течение на времето изхвърляте по-старите данни и запазвате същото количество използвано дисково пространство.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb Опитва се да получи избрани полета за връщане от агрегат

  2. Накарайте заявките за mongoose.js да се изпълняват синхронно

  3. Вмъкнете голям запис в mongodb с помощта на mongo shell

  4. Много към много с Mongoose

  5. Java/Mongodb удостоверяване