Cadangkan dengan mongoexport atau mongodump?

9

Untuk cadangan produksi, MongoDB merekomendasikan mongodump, bukan mongoexport untuk akurasi data. Namun, saya perlu "menggosok" data dari database MongoDB sebelum mencadangkannya. Saya tidak mengetahui adanya opsi scrubbing data sisi server selain mongoexport . Dua pertanyaan:

  1. Apakah mongoexport mengakses cache MongoDB dalam RAM? Apakah itu mengubah set kerja di RAM seperti yang dilakukan mongodump ?
  2. perintah mongodump memiliki opsi --query ini . "Menyediakan dokumen JSON sebagai kueri yang secara opsional membatasi dokumen yang disertakan dalam output mongodump." Apakah diperlukan kueri untuk mengecualikan bidang tertentu dalam dokumen?
Howard Lee
sumber
1
Sepertinya Anda mencari ekspor daripada cadangan. Jika Anda hanya mengekspor subset bidang, mungkin Anda tidak akan dapat memulihkannya dan memiliki basis data yang sepenuhnya bisa diterapkan. Ada beberapa opsi lain untuk dipertimbangkan: mengenkripsi bidang apa pun dengan data sensitif (melalui kode aplikasi) sehingga Anda dapat melakukan mongodumpcadangan snapshot sistem file atau normal , atau menulis ekspor kustom jika mongoexporttidak melakukan apa yang Anda butuhkan. Alat atau program apa pun yang membaca data mongoddapat mengubah set kerja Anda jika data yang akan diekspor lebih besar daripada RAM yang tersedia. Snapshots filesystem tidak terlalu mengganggu
Stennie
Terima kasih atas klarifikasi. Enkripsi pada bidang adalah sesuatu yang belum saya pikirkan, saran bagus.
Howard Lee

Jawaban:

6

Sebagai jawaban untuk pertanyaan pertama Anda, kedua alat (secara default) hanya akan berjalan _idindeks untuk mengambil data dan kemudian menuliskannya ke disk. Jadi, ya, kedua alat ini akan berdampak pada perangkat kerja Anda, itulah sebabnya saya biasanya merekomendasikan untuk menjalankannya terhadap yang sekunder (lebih disukai yang tersembunyi jika mungkin). Saya akan mengulangi komentar Stennie di sini dan merekomendasikan metode cadangan lain jika Anda berurusan dengan data dalam jumlah besar.

Untuk pertanyaan kedua, saya berasumsi Anda sedang mencari opsi yang mongodumpsetara dari hanya membuang bidang tertentu. The opsi query dapat digunakan untuk hasil filter, tetapi tidak dapat digunakan dengan proyeksi (untuk memilih bidang kembali) - ini adalah permintaan fitur yang sedang dilacak dalam ALAT-28 namun belum dijadwalkan. Seperti Stennie juga sebutkan, opsi lain di sini adalah untuk menulis eksportir kustom yang sesuai dengan kebutuhan Anda (dan sekali lagi, saya masih merekomendasikan menjalankannya terhadap sekunder untuk melindungi set kerja Anda).--fieldsmongoexport

Adam C
sumber
6
  1. (maaf, tidak tahu)

  2. --query akan memilih atau mengecualikan seluruh dokumen, bukan bidang.

Akan lebih baik jika:

--query '{datetime:{$gt:ISODate("2014-01-01T00:00:00.000Z")}},{_id:0,name:1,address:1,interests:1}'* )
  1. Mongodump menggunakan struktur file bson dan mempertahankan tipe data . Mongoexport akan kehilangan tipe data dari nilai-nilai tersebut . Seperti NumberLong ("1431677405876") akan dikonversi menjadi hanya 1431677405876. Itu sebabnya mongodump disarankan jika Anda perlu mengimpor kembali ke MongoDB.
aldwinaldwin
sumber
Terima kasih atas klarifikasi Anda pada --query, dan contohnya pada tipe data kehilangan mongoexport.
Howard Lee
0

Mongoexport sebenarnya mempertahankan tipe tetapi membuat data tidak konsisten. Jika Anda mengekspor bidang dengan Ints dan Longs, itu akan mengekspornya masing-masing sebagai Angka dan objek JSON, yang dapat mempersulit jalan.

"Mode ketat. Representasi mode ketat tipe BSON sesuai dengan JSON RFC. Setiap parser JSON dapat menguraikan representasi mode ketat ini sebagai pasangan kunci / nilai; namun, hanya parser JSON internal MongoDB yang mengenali informasi jenis yang disampaikan oleh format."

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

lf2225
sumber