Mongoexport veya mongodump ile yedekleme?


9

Üretim yedeklemesi için MongoDB , verilerin doğruluğu için mongoexport yerine mongodump önerir . Ancak, yedeklemeden önce bir MongoDB veritabanından veri "ovmak" gerekir. Mongoexport dışında herhangi bir sunucu tarafı veri ovma seçeneğinin farkında değilim . İki soru:

  1. Mongoexport, MongoDB önbelleğine RAM'de erişiyor mu ? Mongodump gibi RAM'deki çalışma setini değiştirir mi ?
  2. mongodump komutu bu --query seçeneğine sahiptir. "İsteğe bağlı olarak mongodump çıktısında bulunan belgeleri sınırlayan bir JSON belgesi sağlar." Bir belgedeki belirli alanları hariç tutmak sorgu alır mı?

1
Bir yedek yerine bir dışa aktarma aradığınız anlaşılıyor. Yalnızca bir alan alt kümesini dışa aktarırsanız, büyük olasılıkla bunu geri yükleyemezsiniz ve tamamen uygulanabilir bir veritabanına sahip olamazsınız. Dikkate alınması gereken birkaç seçenek daha vardır: normal mongodumpveya dosya sistemi anlık yedeklemesini yapabilmeniz için hassas verileri içeren alanları şifreleyin (uygulama kodu aracılığıyla) veya mongoexportihtiyacınız olanı yapmazsa özel bir dışa aktarma yazın . Verileri okuyan tüm araçlar veya programlar mongoddışa aktarılacak verileriniz boş RAM'den büyükse çalışma kümenizi değiştirebilir. Dosya sistemi anlık görüntüleri daha az yıkıcı
Stennie

Açıklama için teşekkürler. Alanlarda şifreleme hiç düşünmediğim bir şey, iyi bir öneri.
Howard Lee

Yanıtlar:


6

İlk sorunuza bir cevap olarak, her iki araç da (varsayılan olarak) _idverileri almak ve ardından diske yazmak için dizinde yürür . Bu nedenle, evet, her iki araç da benzer şekilde çalışma setinizi etkileyecektir, bu yüzden onları genellikle ikincil (tercihen mümkünse gizli bir ikincil) karşı çalıştırmanızı tavsiye ederim. Buradaki yorumlarda Stennie'yi yankılayacağım ve büyük miktarda veriyle uğraşıyorsanız diğer yedekleme yöntemlerini önereceğim.

İkinci soru için, sadece belirli alanları boşaltmak mongodumpiçin --fieldsseçeneğin eşdeğerini aradığınızı varsayıyorum mongoexport. Sorgu seçeneği filtre sonuçlarına kullanılabilir, ancak bir projeksiyon ile kullanılamaz (döndürülen alanları seçmek için) - bu izlenmekte olan bir özellik talebidir ARAÇLARI-28 ancak henüz planlanmamış. Stennie'nin de belirttiği gibi, buradaki diğer seçenek ihtiyaçlarınızı karşılayan özel bir ihracatçı yazmaktır (ve yine, çalışma setinizi korumak için bir ikincil karşı çalıştırmanızı tavsiye ederim).


6
  1. (özür dilerim, bilmiyorum)

  2. --query alanları değil tüm belgeleri seçer veya hariç tutar.

Yine de iyi bir fikir olurdu:

--query '{datetime:{$gt:ISODate("2014-01-01T00:00:00.000Z")}},{_id:0,name:1,address:1,interests:1}'* )
  1. Mongodump bson dosya yapısını kullanır ve veri türlerini korur . Mongoexport edecek değerlerin veri türünü kaybetmek . NumberLong ("1431677405876") gibi yalnızca 1431677405876 biçimine dönüştürülür. Bu nedenle MongoDB'ye geri aktarmanız gerekirse mongodump önerilir.

--Query ve mongoexport veri türü örneğine ilişkin açıklama için teşekkür ederiz.
Howard Lee

0

Mongoexport aslında türleri korur ancak verileri tutarsız hale getirir. Bir alanı Ints ve Longs ile dışa aktarıyorsanız, bunu sırasıyla Sayılar ve JSON nesneleri olarak dışa aktarır, bu da onu daha da zorlaştırabilir.

"Katı mod. BSON türlerinin katı mod gösterimleri JSON RFC'ye uygundur. Herhangi bir JSON ayrıştırıcısı, bu katı mod gösterimlerini anahtar / değer çiftleri olarak ayrıştırabilir; ancak, yalnızca MongoDB dahili JSON ayrıştırıcısı biçim tarafından aktarılan tür bilgilerini tanır."

https://docs.mongodb.com/manual/reference/mongodb-extended-json/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.