Thứ sáu, 15/04/2016 | 00:00 GMT+7

Cách nhập và xuất database MongoDB trên Ubuntu 14.04

MongoDB is one of the most popular NoSQL database engines. It is famous for being scalable, powerful, reliable and easy to use. In this article we'll show you how to import and export your MongoDB databases.

MongoDB là một trong những công cụ database NoSQL phổ biến nhất. Nó nổi tiếng vì có khả năng mở rộng, mạnh mẽ, tin cậy và dễ sử dụng. Trong bài viết này, ta sẽ hướng dẫn bạn cách nhập và xuất database MongoDB của bạn.

Ta nên làm rõ rằng bằng lệnh và xuất trong bài viết này, ta nghĩa là xử lý dữ liệu ở định dạng con người có thể đọc được, tương thích với các sản phẩm phần mềm khác. Ngược lại, các hoạt động backup và khôi phục tạo hoặc sử dụng dữ liệu binary cụ thể của MongoDB, dữ liệu này không chỉ bảo toàn tính nhất quán và toàn vẹn của dữ liệu mà còn bảo vệ các thuộc tính MongoDB cụ thể của nó. Do đó, đối với việc di chuyển, thường ưu tiên sử dụng backup và khôi phục miễn là hệ thống nguồn và hệ thống đích tương thích. Backup , khôi phục và di chuyển nằm ngoài phạm vi của bài viết này - hãy tham khảo Cách backup , khôi phục và di chuyển cơ sở dữ liệu MongoDB trên Ubuntu 14.04 .

Yêu cầu

Trước khi làm theo hướng dẫn này, hãy đảm bảo bạn hoàn thành các yêu cầu sau:

Trừ khi có lưu ý khác, tất cả các lệnh yêu cầu quyền root trong hướng dẫn này phải được chạy với quyền user không phải root có quyền sudo.

Hiểu kiến thức cơ bản

Trước khi tiếp tục với bài viết này, một số hiểu biết cơ bản về vấn đề này là cần thiết. Nếu bạn có kinh nghiệm với các hệ thống database quan hệ phổ biến như MySQL, bạn có thể tìm thấy một số điểm tương đồng khi làm việc với MongoDB.

Điều đầu tiên bạn nên biết là MongoDB sử dụng các định dạng json và bson (json binary ) để lưu trữ thông tin của nó. Json là định dạng con người có thể đọc được, nó hoàn hảo để xuất và cuối cùng là nhập dữ liệu . Bạn có thể quản lý thêm dữ liệu đã xuất của bạn bằng bất kỳ công cụ nào hỗ trợ json, bao gồm một editor đơn giản.

Một tài liệu json mẫu trông như thế này:

Ví dụ về Định dạng json
{"address":[
    {"building":"1007", "street":"Park Ave"},
    {"building":"1008", "street":"New Ave"},
]}

Json rất thuận tiện để làm việc, nhưng nó không hỗ trợ tất cả các kiểu dữ liệu có sẵn trong bson. Điều này nghĩa là sẽ có cái gọi là 'mất độ trung thực' của thông tin nếu bạn sử dụng json. Đó là lý do tại sao để backup / khôi phục, tốt hơn nên sử dụng bson binary sẽ có thể khôi phục database MongoDB của bạn tốt hơn.

Thứ hai, bạn không phải lo lắng về việc tạo database MongoDB một cách rõ ràng. Nếu database bạn chỉ định để nhập chưa tồn tại, nó sẽ tự động được tạo. Thậm chí tốt hơn là trường hợp với cấu trúc bộ sưu tập (bảng database ). Trái ngược với các công cụ database khác, trong MongoDB, cấu trúc lại được tạo tự động khi chèn tài liệu đầu tiên (hàng database ).

Thứ ba, trong MongoDB, việc đọc hoặc chèn một lượng lớn dữ liệu, chẳng hạn như cho các việc của bài viết này, có thể tốn nhiều tài nguyên và tiêu tốn nhiều dung lượng CPU, bộ nhớ và ổ đĩa. Đây là điều quan trọng khi xem xét rằng MongoDB thường được sử dụng cho database lớn và Dữ liệu lớn. Giải pháp đơn giản nhất cho vấn đề này là chạy xuất / backup trong đêm.

Thứ tư, tính nhất quán thông tin có thể có vấn đề nếu bạn có server MongoDB bận, nơi thông tin thay đổi trong quá trình xuất database . Không có giải pháp đơn giản nào cho vấn đề này, nhưng ở cuối bài viết này, bạn sẽ thấy các khuyến nghị để đọc thêm về nhân rộng.

Nhập thông tin vào MongoDB

Để tìm hiểu cách nhập thông tin vào MongoDB, hãy sử dụng database MongoDB mẫu phổ biến về nhà hàng. Nó ở định dạng .json và có thể được download bằng wget như sau:

  • wget https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json

Sau khi download hoàn tất, bạn sẽ có một file có tên primer-dataset.json (kích thước 12 MB) trong folder hiện tại. Hãy nhập dữ liệu từ file này vào database mới có tên là newdb và vào một bộ sưu tập có tên là restaurants . Để nhập, ta sẽ sử dụng lệnh mongoimport như sau:

  • sudo mongoimport --db newdb --collection restaurants --file primer-dataset.json

Kết quả sẽ như thế này:

Đầu ra của mongoimport
2016-01-17T14:27:04.806-0500    connected to: localhost
2016-01-17T14:27:07.315-0500    imported 25359 documents

Như lệnh trên cho thấy, 25359 tài liệu đã được nhập. Bởi vì ta không có database có tên newdb , MongoDB đã tự động tạo nó.

Hãy xác minh việc nhập bằng cách kết nối với database MongoDB mới được tạo có tên là newdb như sau:

  • sudo mongo newdb

Đến đây bạn đã kết nối với phiên newdb database newdb mới được tạo. Lưu ý dấu nhắc của bạn đã thay đổi, cho biết rằng bạn đã kết nối với database .

Đếm tài liệu trong bộ sưu tập nhà hàng bằng lệnh:

  • db.restaurants.count()

Kết quả sẽ hiển thị là 25359 , chính xác là số tài liệu đã nhập. Để kiểm tra tốt hơn, bạn có thể chọn tài liệu đầu tiên từ bộ sưu tập nhà hàng như sau:

  • db.restaurants.findOne()

Kết quả sẽ như thế này:

Đầu ra của db.restaurants.findOne ()
{
        "_id" : ObjectId("569beb098106480d3ed99926"),
        "address" : {
                "building" : "1007",
                "coord" : [
                        -73.856077,
                        40.848447
                ],
                "street" : "Morris Park Ave",
                "zipcode" : "10462"
        },
        "borough" : "Bronx",
        "cuisine" : "Bakery",
        "grades" : [
                {
                        "date" : ISODate("2014-03-03T00:00:00Z"),
                        "grade" : "A",
                        "score" : 2
                },
...
        ],
        "name" : "Morris Park Bake Shop",
        "restaurant_id" : "30075445"
}

Việc kiểm tra chi tiết như vậy có thể tiết lộ các vấn đề với tài liệu như nội dung, mã hóa của chúng, v.v. Định dạng json sử dụng UTF-8 và các xuất và nhập của bạn phải ở mã hóa đó. Hãy nhớ điều này nếu bạn chỉnh sửa thủ công các file json. Nếu không, MongoDB sẽ tự động xử lý giúp bạn.

Để thoát khỏi dấu nhắc MongoDB, hãy nhập exit tại dấu nhắc :

  • exit

Bạn sẽ được quay lại dấu nhắc dòng lệnh bình thường với quyền là user không phải root của bạn.

Xuất thông tin từ MongoDB

Như ta đã đề cập trước đây, bằng cách xuất thông tin MongoDB, bạn có thể có được file văn bản có thể đọc được của con người với dữ liệu . Theo mặc định, thông tin được xuất ở định dạng json nhưng bạn cũng có thể xuất sang csv (giá trị được phân tách bằng dấu phẩy).

Để xuất thông tin từ MongoDB, hãy sử dụng lệnh mongoexport . Nó cho phép bạn xuất một bản xuất rất chi tiết để bạn có thể chỉ định một database , một bộ sưu tập, một trường và thậm chí sử dụng một truy vấn cho việc xuất.

Một ví dụ mongoexport đơn giản sẽ là xuất bộ sưu tập nhà hàng từ database newdb mà ta đã nhập trước đó. Nó có thể được thực hiện như thế này:

  • sudo mongoexport --db newdb -c restaurants --out newdbexport.json

Trong lệnh trên, ta sử dụng --db để chỉ định database , -c cho bộ sưu tập và --out cho file mà dữ liệu sẽ được lưu.

Đầu ra của một mongoexport thành công sẽ giống như sau:

Đầu ra của mongoexport
2016-01-20T03:39:00.143-0500    connected to: localhost
2016-01-20T03:39:03.145-0500    exported 25359 records

Kết quả trên cho thấy 25359 tài liệu đã được nhập - cùng số lượng với những tài liệu đã nhập.

Trong một số trường hợp, bạn có thể chỉ cần xuất một phần bộ sưu tập của bạn . Xem xét cấu trúc và nội dung của file json nhà hàng, hãy xuất tất cả các nhà hàng đáp ứng các tiêu chí để được đặt tại quận Bronx và có các món ăn Trung Quốc. Nếu ta muốn nhận thông tin này trực tiếp khi được kết nối với MongoDB, hãy kết nối lại với database :

  • sudo mongo newdb

Sau đó, sử dụng truy vấn này:

  • db.restaurants.find( { borough: "Bronx", cuisine: "Chinese" } )

Kết quả được hiển thị đến terminal . Để thoát khỏi dấu nhắc MongoDB, hãy nhập exit tại dấu nhắc :

  • exit

Nếu bạn muốn xuất dữ liệu từ dòng lệnh sudo thay vì trong khi kết nối với database , hãy thực hiện phần truy vấn trước đó của lệnh mongoexport bằng cách chỉ định nó cho đối số -q như sau:

  • sudo mongoexport --db newdb -c restaurants -q "{ borough: 'Bronx', cuisine: 'Chinese' }" --out Bronx_Chinese_retaurants.json

Lưu ý ta đang sử dụng dấu nháy đơn bên trong dấu nháy kép cho các điều kiện truy vấn. Nếu bạn sử dụng dấu ngoặc kép hoặc các ký tự đặc biệt như $ bạn sẽ phải loại bỏ chúng bằng dấu gạch chéo ngược ( \ ) trong truy vấn.

Nếu quá trình xuất thành công, kết quả sẽ như sau:

Đầu ra của mongoexport
2016-01-20T04:16:28.381-0500    connected to: localhost
2016-01-20T04:16:28.461-0500    exported 323 records

Ở trên cho thấy rằng 323 bản ghi đã được xuất và bạn có thể tìm thấy chúng trong file Bronx_Chinese_retaurants.json mà ta đã chỉ định.

Kết luận

Bài viết này đã giới thiệu cho bạn những điều cơ bản của việc nhập và xuất thông tin đến và đi từ database MongoDB. Bạn có thể tiếp tục đọc thêm về Cách backup , khôi phục và di chuyển database MongoDB trên Ubuntu 14.04Cách cài đặt database MongoDB có thể mở rộng .

Nhân rộng không chỉ hữu ích cho khả năng mở rộng, mà nó còn quan trọng đối với các chủ đề hiện tại. Nhân rộng cho phép bạn tiếp tục chạy dịch vụ MongoDB của bạn mà không bị gián đoạn từ server MongoDB slaver trong khi bạn đang khôi phục server sau khi bị lỗi. Một phần của bản sao cũng là nhật ký hoạt động (oplog) , ghi lại tất cả các hoạt động sửa đổi dữ liệu . Bạn có thể sử dụng log này, giống như sử dụng log binary trong MySQL, để khôi phục dữ liệu của bạn sau khi lần backup cuối cùng diễn ra. Nhớ lại rằng quá trình backup thường diễn ra vào ban đêm và nếu bạn quyết định khôi phục một bản backup vào buổi tối, bạn sẽ thiếu tất cả các bản cập nhật kể từ lần backup cuối cùng.


Tags:

Các tin liên quan

Cách backup, khôi phục và di chuyển database MongoDB trên Ubuntu 14.04
2016-04-15
Cách chạy database cụm đa node với Cassandra trên Ubuntu 14.04
2016-03-31
Cách nhập và xuất database OrientDB trên Ubuntu 14.04
2016-01-06
Cách thiết lập database từ xa để tối ưu hóa hiệu suất trang web với MySQL
2014-04-17
Cách kết nối Node.js với database MongoDB trên VPS
2013-10-09
Cách thiết lập database MongoDB có thể mở rộng
2013-02-26