Hướng dẫn mongodb federated query - truy vấn liên kết mongodb

Tài liệu về nhà → MongoDB AtlasMongoDB Atlas

Trên trang này

  • Truy vấn dữ liệu trên S3
  • Truy vấn dữ liệu trong cụm Atlas của bạn
  • Truy vấn dữ liệu trong bộ dữ liệu hồ dữ liệu của bạn
  • Truy vấn dữ liệu tại HTTP hoặc HTTPSURLHTTP or HTTPS URL
  • Chạy các truy vấn liên kết
  • Xử lý sự cố

Bạn có thể sử dụng Ngôn ngữ truy vấn MongoDB (MQL) trên Liên đoàn dữ liệu ATLAS để truy vấn và phân tích dữ liệu trên lưu trữ dữ liệu của bạn. Liên đoàn dữ liệu Atlas hỗ trợ hầu hết, nhưng không phải tất cả các lệnh máy chủ tiêu chuẩn. Để tìm hiểu thêm về các lệnh máy chủ MongoDB được hỗ trợ và không được hỗ trợ và các giai đoạn pipleline tổng hợp, hãy xem các lệnh MongoDB được hỗ trợ.

Để truy vấn dữ liệu trên lưu trữ dữ liệu của bạn, cấu hình lưu trữ thể hiện cơ sở dữ liệu được liên kết của bạn phải chứa các cài đặt xác định:

  • Cửa hàng thể hiện cơ sở dữ liệu được liên kết của bạn.

  • Cơ sở dữ liệu cơ sở dữ liệu được liên kết cơ sở dữ liệu ảo và bộ sưu tập ánh xạ tới cửa hàng thể hiện cơ sở dữ liệu được liên kết của bạn.

Bạn có thể tạo hoặc cập nhật Cấu hình lưu trữ thể hiện cơ sở dữ liệu được liên kết của mình cho lưu trữ dữ liệu của mình bằng Trình chỉnh sửa trực quan hoặc Trình chỉnh sửa JSON. Để biết thêm thông tin, hãy xem Tạo từ UI.Visual Editor or the JSON Editor. For more information, see Create From the UI.

Liên đoàn dữ liệu Atlas tạo cơ sở dữ liệu ảo và bộ sưu tập bạn đã chỉ định trong cấu hình thể hiện cơ sở dữ liệu được liên kết của bạn cho dữ liệu trong lưu trữ dữ liệu của bạn. Khi bạn kết nối với thể hiện cơ sở dữ liệu được liên kết và chạy các truy vấn, liên kết dữ liệu ATLAS sẽ xử lý các truy vấn của bạn đối với dữ liệu và trả về kết quả truy vấn.

Người dùng cơ sở dữ liệu phải có một trong các vai trò sau để chạy các truy vấn đối với cá thể cơ sở dữ liệu được liên kết:

  • READWRETEANYDATABASE

  • Readanydatabase

  • Một vai trò tùy chỉnh với đặc quyền tìm kiếmcustom role with the find privilege

Bạn có thể chạy tối đa 30 truy vấn đồng thời trên thể hiện cơ sở dữ liệu được liên kết của mình chống lại:

  • Dữ liệu trong thùng S3 của bạn.S3 bucket.

  • Tài liệu trong cụm Atlas MongoDB của bạn.

  • Trích xuất dữ liệu trong bộ dữ liệu hồ dữ liệu Atlas.

  • Dữ liệu trong các tệp được lưu trữ tại các URL có thể truy cập công khai.URLs.

Mẹo

Nhìn thấy:

  • Cách kết nối với thể hiện cơ sở dữ liệu được liên kết của bạn

  • Cách chạy truy vấn so với dữ liệu của bạn bằng cách sử dụng thể hiện cơ sở dữ liệu được liên kết của bạn

Các phần sau đây có chứa InformTaion liên quan đến việc chạy các truy vấn so với dữ liệu trong lưu trữ dữ liệu của bạn.

Khi triển khai phiên bản cơ sở dữ liệu được liên kết của bạn, nếu bạn đã chỉ định một thùng S3 có cả quyền đọc và ghi hoặc AWSS3S3: PUTOBject, bạn cũng có thể lưu kết quả truy vấn của mình trong thùng S3 của mình bằng cách sử dụng $out cho S3.S3 bucket with both read and write permissions or AWS S3 s3:PutObject permission, you can also save your query results in your S3 bucket using $out to S3.

Nếu bạn tạo thành công hoặc cập nhật một đối tượng trên lưu trữ dữ liệu S3 của mình, Liên đoàn dữ liệu sẽ trả về phiên bản mới nhất của đối tượng đó cho bất kỳ yêu cầu đọc tiếp theo nào và tất cả các hoạt động danh sách của các đối tượng cũng phản ánh các thay đổi. Nếu truy vấn của bạn chứa nhiều giai đoạn, mỗi giai đoạn sẽ nhận được dữ liệu gần đây nhất có sẵn từ lưu trữ dữ liệu vì giai đoạn đó được xử lý.S3 data store, Data Federation returns the latest version of that object for any subsequent read requests and all list operations of the objects also reflect the changes. If your query contains multiple stages, each stage receives the most recent data available from the data store as that stage is processed.

Theo mặc định, Liên đoàn dữ liệu ATLAS không trả lại tài liệu theo bất kỳ thứ tự cụ thể nào cho các truy vấn trên các liên kết dữ liệu cho các cửa hàng dữ liệu S3. Liên đoàn dữ liệu Atlas đọc đồng thời các phân vùng và thứ tự phản hồi lưu trữ cơ bản xác định tài liệu nào liên đoàn dữ liệu ATLAS trả về trước, trừ khi bạn xác định thứ tự bằng cách sử dụng $sort trong truy vấn của bạn. Ví dụ: nếu bạn chạy cùng một truy vấn findOne() hai lần, bạn có thể thấy các tài liệu khác nhau và nếu bạn sử dụng $skip, các tài liệu khác nhau có thể bị bỏ qua nếu $sort không được sử dụng trong truy vấn.S3 data stores. Atlas Data Federation reads the partitions concurrently and the underlying storage response order determines which documents Atlas Data Federation returns first, unless you define order using $sort in your query. For example, if you run the same findOne() query twice, you could see different documents, and if you use $skip, different documents might be skipped if $sort is not used in the query.

Bạn phải chịu chi phí "dữ liệu được xử lý" cho lượng dữ liệu mà các quy trình liên kết dữ liệu ATLAS trả lại kết quả cho các truy vấn của bạn ngoài chi phí "dữ liệu được trả về" cho lượng dữ liệu mà liên kết dữ liệu ATLAS trả về. Ví dụ: đối với tệp 10 GB, bạn phải chịu chi phí "dữ liệu được xử lý" sau ngoài chi phí "dữ liệu được trả về": chi phí:

  • Nếu bạn không có phân vùng, Liên đoàn dữ liệu Atlas sẽ đọc toàn bộ tệp để trả về kết quả cho truy vấn. Do đó, bạn phải chịu 10 GB chi phí "xử lý dữ liệu".

  • Nếu bạn có 10 phân vùng 1 GB mỗi phân vùng, các mục tiêu của Liên đoàn dữ liệu Atlas và đọc một phân vùng duy nhất. Do đó, bạn phải chịu 1 GB chi phí "xử lý dữ liệu".

Nếu bạn truy vấn một bộ sưu tập trong Liên đoàn dữ liệu Atlas được ánh xạ chỉ một bộ sưu tập Atlas, Liên đoàn dữ liệu Atlas hoạt động như một proxy và chuyển tiếp truy vấn của bạn đến Atlas. Khi hoạt động như một proxy, Liên đoàn dữ liệu Atlas không quét dữ liệu vào bộ sưu tập ảo của mình để truy vấn do đó cải thiện hiệu suất và giảm chi phí. Tối ưu hóa này không có sẵn cho các truy vấn trên các bộ sưu tập Liên đoàn dữ liệu ATLAS được ánh xạ tới nhiều bộ sưu tập Atlas.

Thí dụ

Xem xét cấu hình lưu trữ thể hiện cơ sở dữ liệu được liên kết sau: Cấu hình:

{
"stores" : [
{
"name" : "atlas-store",
"provider": "atlas",
"clusterName": "myCluster",
"projectId": "5e2211c17a3e5a48f5497de3"
}
],
"databases" : [
{
"name" : "atlas-db",
"collections" : [
{
"name" : "foo",
"dataSources" : [
{
"storeName" : "atlas-store",
"database" : "myFooData",
"collection" : "foo"
}
]
},
{
"name" : "barbaz",
"dataSources" : [
{
"storeName" : "atlas-store",
"database" : "myBarData",
"collection" : "bar"
},
{
"storeName" : "atlas-store",
"database" : "myBazData",
"collection" : "baz"
}
]
}
]
}
]
}

Đối với cấu hình lưu trữ trên, Liên đoàn dữ liệu ATLAS hoạt động như một proxy cho các truy vấn trên bộ sưu tập foo và chuyển tiếp các truy vấn đến ATLAS. Hiệu suất và tối ưu hóa chi phí này không có sẵn cho các truy vấn trên bộ sưu tập barbazbarbaz được ánh xạ tới nhiều bộ sưu tập Atlas.

Bạn cũng có thể lưu kết quả truy vấn của mình trong cụm Atlas của mình bằng cách sử dụng $out vào Atlas.

Nếu bạn tạo thành công hoặc cập nhật một tài liệu trong bộ sưu tập của mình trên Atlas Cluster, Liên đoàn dữ liệu sẽ trả về phiên bản mới nhất của tài liệu đó cho bất kỳ yêu cầu đọc tiếp theo nào và tất cả các hoạt động danh sách của bộ sưu tập cũng phản ánh các thay đổi. Nếu truy vấn của bạn chứa nhiều giai đoạn, mỗi giai đoạn sẽ nhận được dữ liệu gần đây nhất có sẵn từ lưu trữ dữ liệu vì giai đoạn đó được xử lý.

Atlas ghi lại các truy vấn của bạn đối với dữ liệu cụm của bạn trong nhật ký kiểm toán cụm Atlas. Mục nhập nhật ký cho người dùng cơ sở dữ liệu ở định dạng sau:

--

Ví dụ: đối với người dùng cơ sở dữ liệu được định cấu hình trong ATLAS là

--

2, nhật ký nhật ký trong nhật ký kiểm toán cụm Atlas giống như sau:

{
"atype" : "authenticate",
"ts" : { "$date" : "2022-04-29T13:17:54.020+00:00" },
"local" : { "ip" : "XXXX", "port" : 27017 },
"remote" : { "ip" : "XXXXX", "port" : 10844 },
"users" : [ { "user" : "CN=atlasDataLake-DataLake0-test_datalake0", "db" : "$external" } ],
"roles" : [ { "role" : "backup", "db" : "admin" }, { "role" : "readWriteAnyDatabase", "db" : "admin" }, { "role" : "clusterMonitor", "db" : "admin" }, { "role" : "enableSharding", "db" : "admin" }, { "role" : "atlasAdmin", "db" : "admin" }, { "role" : "dbAdminAnyDatabase", "db" : "admin" } ],
"param" : { "user" : "CN=atlasDataLake-DataLake0-test_datalake0", "db" : "$external", "mechanism" : "MONGODB-X509" },
"result" : 0
}

Ghi chú

Cơ chế kết nối luôn là

--

3 trong nhật ký kiểm toán cụm Atlas.

Đối với các truy vấn, Liên đoàn dữ liệu Atlas sử dụng các phân vùng mà bạn đã tạo trên các trường trong quá trình tạo đường ống Atlas Data Lake. Thứ tự của các trường trong các phân vùng rất quan trọng theo cách tương tự như đối với các chỉ mục hợp chất. Dữ liệu được tối ưu hóa cho các truy vấn bởi trường thứ nhất, tiếp theo là trường thứ hai, v.v. Liên đoàn dữ liệu Atlas phân chia các phân vùng theo thứ tự; Nếu một truy vấn bỏ qua một phân vùng cụ thể, Liên đoàn dữ liệu Atlas kém hiệu quả trong việc sử dụng bất kỳ phân vùng nào theo điều đó.Compound Indexes. Data is optimized for queries by the first field, followed by the second field, and so on. Atlas Data Federation parses the partitions in order; if a query omits a particular partition, Atlas Data Federation is less efficient in making use of any partitions that follow that.

Liên đoàn dữ liệu Atlas ít hoạt động hơn trong việc hỗ trợ các truy vấn trên các trường không có phân vùng. Liên đoàn dữ liệu Atlas không hỗ trợ các truy vấn trên các trường được loại trừ rõ ràng khi tạo đường ống Atlas Data Lake.

Ghi chú

Cơ chế kết nối luôn là --3 trong nhật ký kiểm toán cụm Atlas.

Đối với các truy vấn, Liên đoàn dữ liệu Atlas sử dụng các phân vùng mà bạn đã tạo trên các trường trong quá trình tạo đường ống Atlas Data Lake. Thứ tự của các trường trong các phân vùng rất quan trọng theo cách tương tự như đối với các chỉ mục hợp chất. Dữ liệu được tối ưu hóa cho các truy vấn bởi trường thứ nhất, tiếp theo là trường thứ hai, v.v. Liên đoàn dữ liệu Atlas phân chia các phân vùng theo thứ tự; Nếu một truy vấn bỏ qua một phân vùng cụ thể, Liên đoàn dữ liệu Atlas kém hiệu quả trong việc sử dụng bất kỳ phân vùng nào theo điều đó.

Liên đoàn dữ liệu Atlas ít hoạt động hơn trong việc hỗ trợ các truy vấn trên các trường không có phân vùng. Liên đoàn dữ liệu Atlas không hỗ trợ các truy vấn trên các trường được loại trừ rõ ràng khi tạo đường ống Atlas Data Lake.URL in your collection. When you connect to your federated database instance and run queries, Data Federation processes your queries against the data and returns the query results.

BetaS3 bucket, and at your HTTP URL. For federated queries, your federated database instance storage configuration must contain the settings that define:

  • Hỗ trợ cho các cửa hàng dữ liệu HTTP có sẵn dưới dạng tính năng beta. Tính năng và tài liệu tương ứng có thể thay đổi bất cứ lúc nào trong giai đoạn beta.S3, Atlas, and HTTP data stores.

  • Liên đoàn dữ liệu cũng tạo ra một phân vùng cho mỗi URL trong bộ sưu tập của bạn. Khi bạn kết nối với thể hiện cơ sở dữ liệu được liên kết và chạy truy vấn, liên kết dữ liệu sẽ xử lý các truy vấn của bạn đối với dữ liệu và trả về kết quả truy vấn.S3, Atlas, and HTTP data stores.

Bạn có thể sử dụng Liên đoàn dữ liệu Atlas để truy vấn và phân tích một cái nhìn thống nhất về dữ liệu trong cụm Atlas, thùng S3 và tại URL HTTP của bạn. Đối với các truy vấn được liên kết, cấu hình lưu trữ thể hiện cơ sở dữ liệu được liên kết của bạn phải chứa các cài đặt xác định:Visual Editor or the JSON Editor. For more information, see Create From the UI.

Cửa hàng dữ liệu S3, Atlas và HTTP của bạn.S3 bucket, and HTTP store in virtual databases and collections and returns a union of data in the results.

Các trường hợp cơ sở dữ liệu được liên kết với các bộ sưu tập ảo ánh xạ tới các cửa hàng dữ liệu S3, Atlas và HTTP của bạn. We are currently experiencing increased query processing wait times for Atlas Data Federation. Our Engineering team is investigating. Normal service will resume shortly, please try again.

Bạn có thể tạo hoặc cập nhật Cấu hình lưu trữ thể hiện cơ sở dữ liệu được liên kết của mình bằng Trình chỉnh sửa trực quan hoặc Trình chỉnh sửa JSON. Để biết thêm thông tin, hãy xem Tạo từ UI.