Bson trong mongodb là gì?

BSON có thông số kỹ thuật được công bố. [4][5] Phần tử trên cùng trong cấu trúc phải thuộc loại đối tượng BSON và chứa 1 hoặc nhiều phần tử, trong đó phần tử bao gồm tên trường, loại và giá trị. Tên trường là chuỗi. Các loại bao gồm

  • Chuỗi Unicode (sử dụng bảng mã UTF-8)
  • số nguyên 32 bit
  • số nguyên 64 bit
  • double (số dấu phẩy động IEEE 754 64-bit)
  • thập phân128 (128-bit số dấu phẩy động IEEE 754-2008; biến thể Số thập phân nhị phân (BID)), thích hợp làm phương tiện truyền dữ liệu tài chính nhạy cảm ở vị trí thập phân và số chính xác tùy ý với 34 chữ số thập phân chính xác, giá trị tối đa xấp xỉ 106145
  • datetime không có múi giờ (số nguyên dài tính bằng mili giây kể từ kỷ nguyên Unix)
  • mảng byte (đối với dữ liệu nhị phân tùy ý)
  • boolean (
    MongoClient mongoClient = MongoClients.create();
    MongoDatabase database = mongoClient.getDatabase("myDB");
    MongoCollection collection = database.getCollection("employees");
    2 và
    MongoClient mongoClient = MongoClients.create();
    MongoDatabase database = mongoClient.getDatabase("myDB");
    MongoCollection collection = database.getCollection("employees");
    3)
  • vô giá trị
  • đối tượng BSON
  • mảng BSON
  • mã JavaScript
  • Dữ liệu nhị phân MD5
  • Biểu thức chính quy (biểu thức chính quy tương thích với Perl ("PCRE") phiên bản 8. 41 với hỗ trợ UTF-8)[6]

Một điểm khác biệt quan trọng đối với JSON là BSON chứa các loại không có trong JSON (e. g. mảng datetime và byte) và cung cấp khả năng xử lý nghiêm ngặt về kiểu đối với một số kiểu số thay vì kiểu "số" chung. Đối với các tình huống mà các loại bổ sung này cần được thể hiện dưới dạng văn bản, định dạng JSON mở rộng của MongoDB[7] có thể được sử dụng

Hiệu quả[sửa]

So với JSON, BSON được thiết kế để hoạt động hiệu quả cả về không gian lưu trữ và tốc độ quét. Các phần tử lớn trong tài liệu BSON được bắt đầu bằng trường độ dài để tạo điều kiện quét. Trong một số trường hợp, BSON sẽ sử dụng nhiều không gian hơn JSON do tiền tố độ dài và chỉ số mảng rõ ràng. [2]

Bây giờ, mô tả chuyên sâu về MongoDB và tất cả các khả năng của nó nằm ngoài phạm vi của bài viết này. Tuy nhiên, sẽ rất hữu ích nếu bạn hiểu một số khái niệm chính

MongoDB là một công cụ lưu trữ tài liệu NoSQL phân tán. Tài liệu được lưu trữ dưới dạng dữ liệu BSON và được nhóm lại với nhau thành các bộ sưu tập. Các tài liệu trong một bộ sưu tập tương tự như các hàng trong bảng cơ sở dữ liệu quan hệ

Để có cái nhìn sâu hơn, hãy xem bài viết giới thiệu về MongoDB

2. BSON là gì?

BSON là viết tắt của JSON nhị phân. Đó là một giao thức để tuần tự hóa nhị phân dữ liệu giống như JSON

JSON là định dạng trao đổi dữ liệu phổ biến trong các dịch vụ web hiện đại. Nó cung cấp một cách linh hoạt để biểu diễn các cấu trúc dữ liệu phức tạp

BSON cung cấp một số lợi thế so với việc sử dụng JSON thông thường

  • gọn nhẹ. Trong hầu hết các trường hợp, việc lưu trữ cấu trúc BSON yêu cầu ít dung lượng hơn so với JSON tương đương của nó
  • Loại dữ liệu. BSON cung cấp các loại dữ liệu bổ sung không có trong JSON thông thường, chẳng hạn như Date và BinData

Một trong những lợi ích chính của việc sử dụng BSON là dễ dàng duyệt qua. Tài liệu BSON chứa siêu dữ liệu bổ sung cho phép thao tác dễ dàng với các trường của tài liệu mà không cần phải đọc toàn bộ tài liệu

3. Trình điều khiển MongoDB

Bây giờ chúng ta đã hiểu cơ bản về BSON và MongoDB, hãy xem cách sử dụng chúng cùng nhau. Chúng tôi sẽ tập trung vào các hành động chính từ từ viết tắt CRUD (Tạo, Đọc, Cập nhật, Xóa)

MongoDB cung cấp trình điều khiển phần mềm cho hầu hết các ngôn ngữ lập trình hiện đại. Trình điều khiển được xây dựng trên thư viện BSON, có nghĩa là chúng tôi sẽ làm việc trực tiếp với API BSON khi xây dựng truy vấn. Để biết thêm thông tin, hãy xem hướng dẫn của chúng tôi về ngôn ngữ truy vấn MongoDB

Trong phần này, chúng ta sẽ xem xét việc sử dụng trình điều khiển để kết nối với một cụm và sử dụng API BSON để thực hiện các loại truy vấn khác nhau. Lưu ý rằng trình điều khiển MongoDB cung cấp lớp Bộ lọc có thể giúp chúng tôi viết mã gọn hơn. Tuy nhiên, đối với hướng dẫn này, chúng tôi sẽ chỉ tập trung vào việc sử dụng API BSON cốt lõi

Để thay thế cho việc sử dụng trực tiếp trình điều khiển MongoDB và BSON, hãy xem hướng dẫn Spring Data MongoDB của chúng tôi

3. 1. Đang kết nối

Để bắt đầu, trước tiên chúng tôi thêm trình điều khiển MongoDB dưới dạng phụ thuộc vào ứng dụng của mình


    org.mongodb
    mongodb-driver-sync
    3.10.1

Sau đó, chúng tôi tạo kết nối đến cơ sở dữ liệu MongoDB và bộ sưu tập

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("myDB");
MongoCollection collection = database.getCollection("employees");

Các phần còn lại sẽ xem xét việc tạo truy vấn bằng tham chiếu bộ sưu tập

3. 2. Chèn

Giả sử chúng ta có JSON sau đây mà chúng ta muốn chèn dưới dạng tài liệu mới vào bộ sưu tập nhân viên

{
  "first_name" : "Joe",
  "last_name" : "Smith",
  "title" : "Java Developer",
  "years_of_service" : 3,
  "skills" : ["java","spring","mongodb"],
  "manager" : {
     "first_name" : "Sally",
     "last_name" : "Johanson"
  }
}

Ví dụ JSON này hiển thị các loại dữ liệu phổ biến nhất mà chúng ta sẽ gặp với các tài liệu MongoDB. văn bản, số, mảng và tài liệu nhúng

Để chèn cái này bằng BSON, chúng tôi sẽ sử dụng API tài liệu của MongoDB

Document employee = new Document()
    .append("first_name", "Joe")
    .append("last_name", "Smith")
    .append("title", "Java Developer")
    .append("years_of_service", 3)
    .append("skills", Arrays.asList("java", "spring", "mongodb"))
    .append("manager", new Document()
                           .append("first_name", "Sally")
                           .append("last_name", "Johanson"));
collection.insertOne(employee);

Lớp Tài liệu là API chính được sử dụng trong BSON. Nó mở rộng giao diện Bản đồ Java và chứa một số phương thức quá tải. Điều này giúp dễ dàng làm việc với các kiểu gốc cũng như các đối tượng phổ biến như ID đối tượng, ngày tháng và danh sách

3. 3. Tìm thấy

Để tìm một tài liệu trong MongoDB, chúng tôi cung cấp một tài liệu tìm kiếm chỉ định những trường cần truy vấn. Ví dụ: để tìm tất cả các tài liệu có họ là “Smith”, chúng tôi sẽ sử dụng tài liệu JSON sau đây

{  
  "last_name": "Smith"
}

Được viết bằng BSON, đây sẽ là

Document query = new Document("last_name", "Smith");
List results = new ArrayList<>();
collection.find(query).into(results);

Truy vấn "Tìm" có thể chấp nhận nhiều trường và hành vi mặc định là sử dụng toán tử logic và để kết hợp chúng. Điều này có nghĩa là chỉ những tài liệu khớp với tất cả các trường mới được trả về

Để giải quyết vấn đề này, MongoDB cung cấp toán tử truy vấn hoặc

{
  "$or": [
    { "first_name": "Joe" },
    { "last_name":"Smith" }
  ]
}

Điều này sẽ tìm thấy tất cả các tài liệu có tên “Joe” hoặc họ “Smith”. Để viết cái này dưới dạng BSON, chúng tôi sẽ sử dụng Tài liệu lồng nhau giống như truy vấn chèn ở trên

Document query = 
  new Document("$or", Arrays.asList(
      new Document("last_name", "Smith"),
      new Document("first_name", "Joe")));
List results = new ArrayList<>();
collection.find(query).into(results);

3. 4. Cập nhật

Truy vấn cập nhật hơi khác một chút trong MongoDB vì chúng yêu cầu hai tài liệu

  1. Các tiêu chí lọc để tìm một hoặc nhiều tài liệu
  2. Một tài liệu cập nhật chỉ định những trường cần sửa đổi

Ví dụ: giả sử chúng tôi muốn thêm kỹ năng “bảo mật” cho mọi nhân viên đã có kỹ năng “mùa xuân”. Tài liệu đầu tiên sẽ tìm thấy tất cả nhân viên có kỹ năng “mùa xuân” và tài liệu thứ hai sẽ thêm mục “bảo mật” mới vào mảng kỹ năng của họ

Trong JSON, hai truy vấn này sẽ giống như

________số 8

Và trong BSON, họ sẽ là

Document query = new Document(
  "skills",
  new Document(
    "$elemMatch",
    new Document("$eq", "spring")));
Document update = new Document(
  "$push",
  new Document("skills", "security"));
collection.updateMany(query, update);

3. 5. Xóa bỏ

Xóa truy vấn trong MongoDB sử dụng cú pháp tương tự như truy vấn tìm. Chúng tôi chỉ cung cấp một tài liệu chỉ định một hoặc nhiều tiêu chí để phù hợp

Ví dụ: giả sử chúng tôi tìm thấy một lỗi trong cơ sở dữ liệu nhân viên của mình và vô tình tạo cho nhân viên một giá trị âm cho số năm làm việc. Để tìm tất cả, chúng tôi sẽ sử dụng JSON sau đây

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("myDB");
MongoCollection collection = database.getCollection("employees");
0

Tài liệu BSON tương đương sẽ là

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("myDB");
MongoCollection collection = database.getCollection("employees");
1

4. Sự kết luận

Trong hướng dẫn này, chúng ta đã xem phần giới thiệu cơ bản về xây dựng các truy vấn MongoDB bằng thư viện BSON. Chỉ sử dụng API BSON, chúng tôi đã triển khai các hoạt động CRUD cơ bản cho bộ sưu tập MongoDB

Những gì chúng tôi chưa đề cập đến là các chủ đề nâng cao hơn như phép chiếu, tập hợp, truy vấn không gian địa lý, hoạt động hàng loạt, v.v. Tất cả những thứ này đều có thể sử dụng chỉ bằng thư viện BSON. Các ví dụ mà chúng ta đã thấy ở đây tạo thành các khối xây dựng mà chúng ta sẽ sử dụng để triển khai các hoạt động nâng cao hơn này

Tại sao BSON được sử dụng trong MongoDB?

Không giống như các hệ thống lưu trữ JSON dưới dạng giá trị được mã hóa chuỗi hoặc blob được mã hóa nhị phân, MongoDB sử dụng BSON để cung cấp các tính năng lập chỉ mục và truy vấn mạnh mẽ trên định dạng dữ liệu phổ biến nhất của web . .

BSON dùng để làm gì?

BSON là định dạng được sử dụng cho cả lưu trữ dữ liệu và truyền mạng trong MongoDB . Sau khi lưu trữ dữ liệu trong MongoDB, bạn có thể muốn lấy lại dữ liệu của mình dưới dạng JSON, trong số nhiều định dạng khác. Khi bạn muốn xuất tệp của mình dưới dạng JSON, bạn có thể sử dụng công cụ cơ sở dữ liệu của MongoDB, bsondump , để chuyển đổi tài liệu BSON thành JSON.

Sự khác biệt giữa JSON và BSON là gì?

Sau đây là những khác biệt giữa JSON và BSON. Đây là loại định dạng tệp nhị phân. JSON chứa một số kiểu dữ liệu cơ bản như chuỗi, số, Boolean, null. BSON chứa một số loại dữ liệu bổ sung như ngày, dấu thời gian, v.v. Cơ sở dữ liệu như AnyDB, redis, v.v.

BSON hay JSON nào nhanh hơn?

BSON nhanh hơn một chút so với JSON khi tạo các định dạng tương ứng với dung lượng lớn (10.000 hàng trong 0. 3 giây) và bộ dữ liệu nhỏ. Tuy nhiên, khi phân tích cú pháp trở lại Ruby Hash, BSON nhanh gấp đôi so với JSON với bộ dữ liệu lớn. Với các bộ dữ liệu nhỏ, JSON tiến gần hơn đến BSON, nhưng nó vẫn chậm hơn trong hai.