MongoDump và MongoRestore vs MongoExport và MongoImport

Jan 25 2023
MongoDB là một chương trình cơ sở dữ liệu định hướng tài liệu đa nền tảng nguồn có sẵn. Được phân loại là một chương trình cơ sở dữ liệu NoSQL, MongoDB sử dụng các tài liệu giống như JSON với các lược đồ tùy chọn.

MongoDB là một chương trình cơ sở dữ liệu định hướng tài liệu đa nền tảng nguồn có sẵn. Được phân loại là một chương trình cơ sở dữ liệu NoSQL, MongoDB sử dụng các tài liệu giống như JSON với các lược đồ tùy chọn.

Trong blog này, tôi sẽ nói về việc sử dụng ' mongodump và mongorestore' so với ' mongoexport và mongoimport' . Blog đang xem xét thực tế rằng những người đọc blog này đến từ nền tảng MongoDB và các thuật ngữ được sử dụng chỉ liên quan chặt chẽ đến MongoDB.

Khi chúng tôi làm việc với một tổ chức hoặc làm việc trên một cơ sở mã khổng lồ với lượng dữ liệu khổng lồ trong cơ sở dữ liệu, có những trường hợp chúng tôi cần sử dụng các lệnh này khá thường xuyên và có rất nhiều suy nghĩ và kiểm tra sự tỉnh táo trước khi sử dụng các lệnh này như họ thao túng dữ liệu và thao tác với dữ liệu lớn là một nhiệm vụ cần được xử lý cẩn thận, vì nó có thể dẫn đến thời gian ngừng hoạt động của cơ sở dữ liệu hoặc dư thừa dữ liệu, từ đó có thể dẫn đến tổn thất nặng nề cho dù về mặt công nghệ (tức là để ổn định lại lại cơ sở dữ liệu) hoặc có thể dẫn đến mất lòng tin của người dùng.

Hãy nói về lý do tại sao chúng ta cần những tiện ích này. Từ cái tên, chúng ta có thể kết luận rằng mongodump và mongoexport phải được sử dụng để xuất dữ liệu từ cơ sở dữ liệu và mongorestore và mongoimport phải nhập dữ liệu vào cơ sở dữ liệu, nhưng phần quan trọng là tại sao lại có nhiều tiện ích cho các tác vụ tương tự. Đó là những gì chúng ta sẽ hiểu.

mongodump

mongodump là một tiện ích dòng lệnh để tạo xuất nhị phân nội dung của cơ sở dữ liệu. mongodump có thể xuất dữ liệu từ phiên bản mongod hoặc mongos ; tức là có thể xuất dữ liệu từ các triển khai cụm độc lập, bản sao và phân mảnh. Lệnh mẫu để sử dụng mongodump là:

$ mongodump --uri=<MONGO_URL> --db=<DB_NAME> --collection=<COLL_NAME>

Đây là lệnh được chạy để loại bỏ kết xuất bằng mongodump. Theo mặc định, một thư mục kết xuất sẽ được tạo và một kết xuất cơ sở dữ liệu sẽ được tạo trong cùng một thư mục. Chúng tôi cần chuyển tham số MONGO_URL trong --urihoặc chúng tôi có thể sử dụng --user=myuser and --password=somepassđể cho phép tiện ích kết nối với máy khách MongoDB. Chúng tôi có thể chỉ định cơ sở dữ liệu và bộ sưu tập để thực hiện kết xuất bằng cách sử dụng --db and --collectiontham số và thậm chí chúng tôi có thể sử dụng --outtham số để thay đổi tên thư mục kết xuất. Bất cứ khi nào chúng tôi thực hiện kết xuất, đối với mỗi bộ sưu tập, nó sẽ tạo ra hai tệp, một là tệp .bsonvà một là .metadata.jsontệp. Để biết thêm chi tiết về mongodump, có thể tham khảo tài liệu . Bản sao lưu cơ sở dữ liệu cũng có thể được chạy vào một tệp lưu trữ bằng cách sử dụng --archivetrường này.

Lý do chúng tôi sử dụng mongodump là vì nó tạo ra các bản sao nhị phân và hiệu quả hơn ( hiệu quả có nghĩa là nó nhanh hơn mongoexport và tạo ra một kết xuất dữ liệu được nén nhiều hơn ). Một lý do khác là do mongodump tạo .bson kết xuất, do đó, nó bảo tồn các Kiểu dữ liệu phong phú của BSON. Nó cũng bảo toàn các chỉ mục và các số liệu thống kê khác trong .metadata.jsontệp, vì vậy khi chúng tôi khôi phục dữ liệu, các chỉ mục sẽ được tạo hoàn toàn. Do đó, nói chung, nó được sử dụng (và được MongoDB khuyến nghị sử dụng) để sao lưu dữ liệu theo lịch trình thông qua cron hoặc thứ gì đó khác.

Lưu ý: Chúng tôi không thể sử dụng --archivecờ và --outcờ cùng nhau trong cùng một lệnh mongodump.

mongorestore

mongorestore là phần bổ sung của mongodump và được sử dụng để nhập dữ liệu được kết xuất thông qua mongodump hoặc mongoexport. mongorestore là một thao tác chỉ chèn , có nghĩa là nó sẽ không ghi đè lên một tài liệu trong cơ sở dữ liệu đã tồn tại.

Mongorestore cho phép chúng tôi thực hiện một số tùy chọn khôi phục một phần bằng cách chỉ định một bộ sưu tập hoặc danh sách các bộ sưu tập mà chúng tôi muốn khôi phục vào cơ sở dữ liệu của bạn. Nếu chúng tôi chỉ cần khôi phục một bộ sưu tập, chúng tôi có thể sử dụng --collectioncờ trong đó chúng tôi sẽ cần chỉ định --dbcờ với cơ sở dữ liệu mà chúng tôi đang khôi phục cũng như đường dẫn đến BSONtệp bộ sưu tập. Nên sử dụng --nsIncludecờ thay vì cờ bộ sưu tập.

Nếu chúng tôi muốn kiểm tra xem a mongorestorecó hoạt động hay không trước khi nhập cơ sở dữ liệu, chúng tôi có thể sử dụng a --dryRunđể kiểm tra xem quá trình khôi phục có hoạt động như mong đợi hay không. Với --dryRuncờ, mongorestore sẽ trả về thông tin tóm tắt mongorestore mà không cần nhập bất kỳ dữ liệu nào.

$ mongorestore --db=mydb --nsInclude="staging.*" dump/

mongoexport

mongoexport hoạt động giống như mongodump, nhưng nó ít hiệu quả hơn về không gian và tạo kết xuất dữ liệu ở định dạng con người có thể đọc được, tức là định dạng JSON , và do đó cũng mất nhiều thời gian hơn. Theo mặc định, mongoexport ghi vào thiết bị xuất chuẩn, nhưng chúng ta cũng có thể ghi dữ liệu vào một tệp bằng cách sử dụng tham --outsố. Nhưng như chúng ta đã thảo luận trong mongodump, kết xuất của mongoexport không được nén và không tạo ra .metadata.jsonnên không thể bảo toàn các chỉ mục và theo mặc định, nó cũng không thể bảo toàn các loại dữ liệu BSON phong phú. Mặc dù trong phiên bản mới hơn của mongo, mongoexport có hỗ trợ bảo tồn các loại BSON phong phú bằng cách sử dụng --jsonFormat=canonicaltham số.

Một lợi ích của mongoexport là chúng ta cũng có thể xuất các trường cụ thể, sử dụng --fields=field1,field2...tham số và chỉ định tất cả các giá trị được phân tách bằng dấu phẩy. Chúng tôi cũng có thể sử dụng --skip, --limitvà --sorttrong mongoexport để nhận kết quả được lọc và hạn chế. Cũng có rất nhiều trường mà chúng ta có thể sử dụng khi đang sử dụng mongoexport. Chúng tôi cũng có thể sử dụng --querycác tham số để nhận được nhiều kết quả/kết xuất được lọc hơn. Khi chúng tôi thực hiện kết xuất bằng cách sử dụng mongoexport, việc thêm chúng vào Ứng dụng giao diện người dùng cơ sở dữ liệu như MongoDB Compass sẽ trở nên dễ dàng .

mongoimport

mongoimport là phần bổ sung của mongoexport và được sử dụng để khôi phục quá trình xuất JSON, CSV hoặc TSV mở rộng được tạo bởi mongoexporthoặc có khả năng là một công cụ xuất của bên thứ ba khác. Sự khác biệt lớn giữa mongorestore và tiện ích mongoimport là --modecờ có các tùy chọn chèn, nâng cấp và hợp nhất. Chỉ từ cái tên chúng ta có thể hiểu rằng trong trường hợp chế độ chèn , chúng ta chỉ có thể chèn các tài liệu _id duy nhất và sẽ ghi lại lỗi trong trường hợp trùng lặp. Trong trường hợp upsert , nếu đã tồn tại một tài liệu có cùng _ id, thì tài liệu mới sẽ thay thế tài liệu trước đó có cùng _ id. Trường hợp thứ ba là hợp nhất, trong đó các tài liệu hiện có khớp với một tài liệu trong tệp nhập được hợp nhất với tài liệu mới.

Kết luận: Các tiện ích mongodump / mongorestore hoàn hảo cho chiến lược sao lưu và khôi phục cơ sở dữ liệu mongo. Các tiện ích này cho phép chúng tôi kết xuất và khôi phục từ một tệp lưu trữ duy nhất có thể dễ dàng nén và lưu trữ hoặc chuyển qua email. Mongorestorecho phép chúng tôi bao gồm hoặc loại trừ một số bộ sưu tập nhất định không được nhập và/hoặc khôi phục vào cơ sở dữ liệu mới với tùy--nsInclude chọn cờ và--nsExclude. Các tiện ích mongoexport / mongoimport rất phù hợp để làm việc với các bộ sưu tập trong cơ sở dữ liệu mongo và chèn/cập nhật tài liệu trong các bộ sưu tập đó. Chúng ta có thể sử dụng--modecờ trong mongoimportđể xác định xem chúng tôi có muốn chèn, thay thế hoặc hợp nhất tài liệu từ tệp đã nhập của mình hay không.

Cảm ơn bạn đã đọc và bạn có thể liên hệ với tôi trên LinkedIn và GitHub .