Hướng dẫn does mongodb allow multiple connections? - mongodb có cho phép nhiều kết nối không?

Bối cảnh: Tôi đang cố gắng tối ưu hóa tốc độ API Node.js của mình, được xây dựng với Express và Mongoose trên đám mây Amazon. Tôi có một cuộc gọi API mất nhiều thời gian để chạy (cuộc gọi API của tôi /số liệu thống kê biên dịch dữ liệu từ rất nhiều nguồn và do đó tạo ra hàng trăm truy vấn Mongo và do đó mất khoảng 20 giây để chạy). Tôi đã nhận thấy rằng, trong khi cuộc gọi API này đang chạy, các cuộc gọi API khác cũng nhấn vào bộ bản sao Mongo đang chậm lại. Suy nghĩ đầu tiên của tôi là các truy vấn thống kê chậm, do đó chặn, nhưng theo bảng thống kê của tôi, tôi không có bất kỳ truy vấn nào mất> 100ms để chạy, và các số liệu thống kê DB Mongo của tôi đều ở trong phạm vi khá lành mạnh (hơn 20 truy vấn mỗi lần thứ hai,: I'm trying to optimize the speed of my Node.js API, built with Express and Mongoose on the Amazon Cloud. I have one API call that takes a good amount of time to run (my /stats API call compiles data from lots of sources, and thus makes hundreds of mongo queries and thus takes about 20 seconds to run). I have noticed that, while this API call is running, other API calls that also hit the Mongo replica set are slow to return. My first thought was that the stats queries were slow, thus blocking, but according to my stat panel I don't have any queries taking > 100ms to run, and also my Mongo DB stats are all in pretty healthy ranges (20+ queries per second, <1% btree miss, <5% lock).

Câu hỏi: Ngay bây giờ, ứng dụng Node.js của tôi thiết lập một kết nối duy nhất với tập Mongo khi khởi động và tất cả các truy vấn sử dụng kết nối đó. Sẽ tốt hơn để thiết lập nhiều kết nối? Ví dụ, tôi có nên thiết lập kết nối Mongo mới cho mỗi yêu cầu API gửi đến không? Hoặc, có lẽ tôi nên có một số lượng kết nối tĩnh với bộ bản sao và cân bằng tải giữa các kết nối đó khi thực hiện các truy vấn?: Right now, my Node.js app establishes a single connection to the Mongo set on startup, and all queries use that connection. Would it be better to establish multiple connections? Eg, should I establish a new Mongo connection for each inbound API request, instead? Or, maybe I should have a static number of connections to the replica set, and load-balance between those connections when executing queries?

Hoặc có thể tôi hoàn toàn mất cơ sở?

Trên trang này

  • Tại sao cụm của tôi có nhiều chuỗi kết nối?
  • Điều này có ý nghĩa gì đối với các cụm Google Cloud hoặc Azure ở chế độ chỉ nhìn thấy?Azure clusters in peering-only mode?
  • Cụm azure của tôi có thể tạo ra nhiều vùng không?Azure cluster span multiple regions?
  • Làm cách nào để vô hiệu hóa chế độ chỉ nhìn thấy?
  • Làm thế nào điều này ảnh hưởng đến AWSVPC khi tôi sử dụng DNS tùy chỉnh?AWS VPC peering when I use custom DNS?
  • Làm cách nào để xác định chuỗi kết nối mà ứng dụng của tôi sử dụng?
  • Tôi có phải cập nhật chuỗi kết nối của mình khi di chuyển sang một nhà cung cấp đám mây khác không?

Atlas cung cấp nhiều chuỗi kết nối. Các chuỗi này cho phép bạn kết nối với các cụm của bạn từ cả bối cảnh công cộng và riêng tư.

Để kết nối với Atlas, hãy trỏ các ứng dụng của bạn vào URI để giao tiếp với một cụm. Atlas tạo ra các cụm có nhiều hơn một nút hoặc máy chủ. Mỗi nút có tên máy chủ riêng giải quyết thành địa chỉ IP. URI, được gọi là chuỗi kết nối, mà Atlas kết nối có thể có nhiều hơn một tên máy chủ. Định cấu hình Atlas để chấp nhận kết nối với các máy chủ cụm từ các địa chỉ IP được phép.URI to communicate with a cluster. Atlas creates clusters with more than one node or host. Each node has its own hostname that resolves to an IP address. The URI, known as a connection string, to which Atlas connects might have more than one hostname. Configure Atlas to accept connections to the cluster hosts from allowed IP addresses.

Atlas đảm bảo kết nối từ địa chỉ IP công cộng thông qua xác thực và TLS. Nếu bạn muốn kết nối với địa chỉ IP riêng, bạn có thể sử dụng:TLS. If you want to connect to private IP addresses, you can use:

  • AWS và GCP VPC

  • Azure vnet nhìn chằm chằm

  • AWS Privatelink và Azure Private Link

Các tính năng này tất cả quản lý giao tiếp qua các địa chỉ IP nội bộ trong các mạng an toàn.

Atlas cung cấp nhiều hơn một chuỗi kết nối khi sử dụng các mạng bảo mật. Mỗi mạng cung cấp một chuỗi giải quyết cho các địa chỉ IP khác nhau.

Tất cả các cụm có một chuỗi kết nối tiêu chuẩn. Điều này giải quyết cho cụm của:standard connection string. This resolves to the cluster's:

  • Địa chỉ IP công khai cho các kết nối Internet và

  • Địa chỉ IP riêng VPC cho các cụm AWS khi được giải quyết từ VPC PEEDED. private IP addresses for AWS clusters when resolved from a peered VPC.

Sử dụng chuỗi này cho các ứng dụng kết nối qua internet hoặc kết nối với các cụm ngang hàng trong AWS.AWS.

Các cụm với các mạng đồng nhất có IP riêng để phân kết chuỗi kết nối. Chuỗi này giải quyết thành địa chỉ IP có sẵn cho:Private IP for Peering connection string. This string resolves to IP addresses available to:

  • Mạng lưới đồng nhất trong Azure hoặc Google CloudAzure or Google Cloud

  • Các cụm AWS PEERED với dịch vụ DNS tùy chỉnh. peered clusters with a custom DNS service.

Sử dụng chuỗi kết nối này với các ứng dụng kết nối:

  • Trong mạng Azure hoặc Google Cloud PeedAzure or Google Cloud peered network

  • Đến các cụm AWS khi sử dụng AWS với dịch vụ DNS tùy chỉnh.AWS clusters when using AWS with custom DNS service.

Các cụm AWS hoặc Azure ở các vùng có các điểm cuối riêng được cấu hình có một hoặc nhiều chuỗi kết nối. Mỗi chuỗi được giải quyết thành địa chỉ IP riêng của giao diện mạng trong VPC hoặc VNET của bạn kết nối trực tiếp với bộ cân bằng tải trong ATLAS VPC hoặc VNET. Sử dụng các chuỗi kết nối này với các ứng dụng kết nối với các điểm cuối riêng tư. or Azure clusters in regions with private endpoints configured have one or more connection strings. Each string resolves to the private IP address of a network interface in your VPC or VNet that connects directly to a load balancer in the Atlas VPC or VNet. Use these connection strings with applications connecting with private endpoints.

Trước ngày 31 tháng 3 năm 2020, bạn được yêu cầu cho phép chế độ chỉ Peering kết nối với cơ sở dữ liệu trên các cụm Azure hoặc Google Cloud được nối mạng. Chế độ này:Azure or Google Cloud clusters. This mode:

  • Ảnh hưởng đến độ phân giải DNS toàn cầu vàDNS resolution and

  • Giới hạn bất kỳ kết nối cơ sở dữ liệu bên ngoài mạng PEED.

Nhiều chân trời nâng các hạn chế này và mở khóa các tính năng bổ sung. Trong các dự án chạy các cụm MongoDB 3.6 trở lên, bạn có thể sử dụng:

  • Dịch vụ ứng dụng

  • Biểu đồ

  • Di cư trực tiếp

Để tận dụng nhiều chân trời:

  • Cập nhật các chuỗi kết nối hiện có của ứng dụng của bạn để sử dụng IP riêng cho các chuỗi kết nối nhìn thấy,Private IP for Peering connection strings,

  • Vô hiệu hóa chế độ chỉ nhìn thấy và, and

  • Kết nối bằng cách sử dụng các chuỗi được phác thảo tại sao cụm của tôi có nhiều chuỗi kết nối ?.Why does my cluster have multiple connection strings?.

Ghi chú

Bạn có thể tiếp tục kết nối với các cụm của mình bằng cách sử dụng chuỗi kết nối hỗ trợ nhìn thấy hiện có tại thời điểm này. Chế độ chỉ nhìn thấy ngăn chặn quyền truy cập vào chức năng được cải thiện và giảm giới hạn của nhiều chân trời. Để sử dụng các tính năng mới và loại bỏ các giới hạn cũ, MongoDB yêu cầu bạn sử dụng các chuỗi kết nối mới.

Yes.

Thay đổi ứng dụng của bạn để kết nối bằng IP riêng cho chuỗi kết nối PEEL. Thay đổi này cho phép các ứng dụng của bạn kết nối từ các mạng đồng nhất bằng UI hoặc API.Private IP for Peering connection string. This change allows your applications to connect from peered networks using the UI or API.

Để mở rộng sang các khu vực hơn, đầu tiên vô hiệu hóa chế độ chỉ trên các cụm Azure hiện có.Azure clusters first.

IP riêng cho các chuỗi kết nối nhìn thấy hoạt động với các cụm mongoDB 3.6 trở lên. work with MongoDB 3.6 or later clusters.

Để vô hiệu hóa chế độ chỉ nhìn thấy bằng cách sử dụng:

Trước ngày 31 tháng 3 năm 2020, các ứng dụng được triển khai trong AWS bằng các dịch vụ DNS tùy chỉnh và VPC được cung cấp với Atlas không thể kết nối qua các địa chỉ IP riêng tư:AWS using custom DNS services and VPC-peered with Atlas couldn't connect over private IP addresses:

  • DNS tùy chỉnh quyết tâm đến địa chỉ IP công cộng.DNS resolved to public IP addresses.

  • AWS DNS nội bộ đã quyết định đến các địa chỉ IP riêng. internal DNS resolved to private IP addresses.

Các ứng dụng được triển khai với các dịch vụ DNS tùy chỉnh trong AWS nên sử dụng IP riêng cho các chuỗi kết nối. Để hiển thị các chuỗi này:DNS services in AWS should use Private IP for Peering connection strings. To show these strings:

  1. Chuyển đổi bằng cách sử dụng DNS tùy chỉnh trên AWS với VPC Peering trên

    mongodb+srv://xyx456-ab123.mongodb.net

    1 từ menu Cài đặt dự án.Using Custom DNS on AWS with VPC Peering on

    mongodb+srv://xyx456-ab123.mongodb.net

    1 from the Project Settings menu.

  2. Xem phương thức kết nối cho cụm AWS của bạn.connect modal for your AWS Cluster.

  3. Chọn IP riêng cho chuỗi kết nối PEERING.Private IP for Peering connection string.

Cấu trúc của URI của chuỗi kết nối cho biết loại chuỗi. Nếu bạn đã tạo một kết nối nhìn thấy hoặc điểm cuối riêng tư, Atlas sẽ hiển thị nhiều hơn một trong những tùy chọn này để sử dụng.URI indicates the string's type. If you have created a peering connection or private endpoint, Atlas displays more than one of these options for your use.

Chuỗi kết nối tiêu chuẩn theo định dạng này:

mongodb://xyz456-shard-00-00.ab123.mongodb.net:27017
mongodb+srv://xyz456.ab123.mongodb.net

Chấm trước

mongodb+srv://xyx456-ab123.mongodb.net

2 quan trọng. URI sử dụng định dạng này quyết tâm với các địa chỉ IP công cộng trừ khi kết nối từ bên trong AWS với cấu hình PEELING VPC.URIs using this format resolve to public IP addresses except when connecting from inside AWS with VPC-peering configured.

Quan trọng

Định dạng này thay đổi một ký tự từ các chuỗi kết nối kế thừa: một dấu gạch nối (

mongodb+srv://xyx456-ab123.mongodb.net

3) sau khi tên cụm trở thành một khoảng thời gian (

mongodb+srv://xyx456-ab123.mongodb.net

4).Legacy Connection Strings: a hyphen (

mongodb+srv://xyx456-ab123.mongodb.net

3) after the cluster name becomes a period (

mongodb+srv://xyx456-ab123.mongodb.net

4).

Thí dụ

Chuỗi kết nối di sản này:

mongodb+srv://xyx456-ab123.mongodb.net

được viết như chuỗi kết nối tiêu chuẩn này:

mongodb+srv://xyx456.ab123.mongodb.net

Đối với các cụm mới, các bộ bản sao và mảnh vỡ không lấy tên của chúng từ tên của cụm. Các tên mới sử dụng ID ký tự sáu chữ và số.

Chuỗi kết nối riêng theo định dạng này:

mongodb://xyx456-shard-00-00-pri.ab123.mongodb.net:27017
mongodb+srv://xyx456-pri.ab123.mongodb.net

mongodb+srv://xyx456-ab123.mongodb.net

5 trước

mongodb+srv://xyx456-ab123.mongodb.net

2 quan trọng. URI sử dụng định dạng này quyết tâm đến các địa chỉ IP riêng có thể truy cập trong mạng PEED. Nếu bạn định cấu hình mạng lưới cho cụm của mình, bạn phải sử dụng tên máy chủ mới khi bạn kết nối với cụm của mình để sử dụng sự đồng nhất.URIs using this format resolve to private IP addresses reachable within the peered network. If you configure network peering for your cluster, you must use the new hostname when you connect to your cluster to utilize the peering.

Quan trọng

Định dạng này thay đổi một ký tự từ các chuỗi kết nối kế thừa: một dấu gạch nối (

mongodb+srv://xyx456-ab123.mongodb.net

3) sau khi tên cụm trở thành một khoảng thời gian (

mongodb+srv://xyx456-ab123.mongodb.net

4).

Thí dụ

mongodb://pl-0-us-east-1a.ab123.mongodb.net:1024
mongodb+srv://pl-0-us-east-1a.ab123.mongodb.net

Chuỗi kết nối di sản này:

mongodb://pl-0-us-west-1.ab123.mongodb.net:1024
mongodb+srv://cluster0-pl-0-us-west-1.ab123.mongodb.net

được viết như chuỗi kết nối tiêu chuẩn này:s using this format can be reachable via the AWS VPC where someone configured PrivateLink, though access can be transitive from other VPCs peered in turn.

Đối với các cụm mới, các bộ bản sao và mảnh vỡ không lấy tên của chúng từ tên của cụm. Các tên mới sử dụng ID ký tự sáu chữ và số.

mongodb://pl-0-eastus2.ab123.azure.mongodb.net:1024
mongodb+srv://pl-0-eastus2.ab123.azure.mongodb.net

Chuỗi kết nối riêng theo định dạng này:

mongodb+srv://xyx456-ab123.mongodb.net

5 trước

mongodb+srv://xyx456-ab123.mongodb.net

2 quan trọng. URI sử dụng định dạng này quyết tâm đến các địa chỉ IP riêng có thể truy cập trong mạng PEED. Nếu bạn định cấu hình mạng lưới cho cụm của mình, bạn phải sử dụng tên máy chủ mới khi bạn kết nối với cụm của mình để sử dụng sự đồng nhất.

Trong các cụm mới, các bộ bản sao và mảnh vỡ không lấy tên của chúng từ tên của cụm. Các tên mới sử dụng ID ký tự sáu chữ và số.s using this format can be reachable via the Azure VNet where someone configured Private Link, though access can be transitive from other VNets peered in turn.

Các chuỗi kết nối AWS Privatelink tuân theo định dạng này:

Nếu bạn bật cài đặt điểm cuối riêng tư khu vực, các chuỗi kết nối AWS Privatelink tuân theo định dạng này:

foo-shard-00-00-ab123.mongodb.net
foo-ab123.mongodb.net

URI sử dụng định dạng này có thể truy cập được thông qua AWSVPC nơi ai đó được cấu hình Privatelink, mặc dù lần lượt truy cập có thể chuyển đổi từ các VPC khác.

foo-shard-00-00-ab123.azure.mongodb.net
foo-ab123.azure.mongodb.net

Các chuỗi kết nối liên kết riêng Azure theo định dạng này:

mongodb+srv://xyx456-ab123.mongodb.net

0

Nếu bạn bật cài đặt điểm cuối riêng tư khu vực, các chuỗi kết nối liên kết riêng Azure tuân theo định dạng này:Private Only mode, these hostnames resolve to peered network IP addresses. If you disabled that mode, hostnames resolve to public IP addresses.

mongodb://pl-0-eastus2.ab123.azure.mongodb.net:1024
mongodb+srv://cluster0-pl-0-eastus2.ab123.azure.mongodb.net
Peering Only mode, switch to Private IP for Peering connection strings.

URI sử dụng định dạng này có thể truy cập được thông qua Azure VNET nơi ai đó được cấu hình liên kết riêng, mặc dù lần lượt truy cập có thể chuyển tiếp từ các VNE khác.

  • Trước ngày 31 tháng 3 năm 2020, bạn đã viết chuỗi kết nối Atlas như sau:

  • AWS

AzureAzure and was created before multi-cloud clusters were available:

  1. Google Cloud

  2. Nếu bạn đã bật chế độ riêng, các tên máy chủ này quyết tâm đến các địa chỉ IP mạng đã cân đối. Nếu bạn vô hiệu hóa chế độ đó, tên máy chủ sẽ giải quyết các địa chỉ IP công khai.

  3. Nếu ứng dụng của bạn sử dụng chuỗi kết nối kế thừa trong chế độ chỉ nhìn vào chế độ, hãy chuyển sang IP riêng cho các chuỗi kết nối.

  4. Nó phụ thuộc vào:

  5. Nhà cung cấp đám mây nào mà cụm hiện tại của bạn sử dụng vàURI connection string.

  6. Khi bạn tạo cụm.standard connection string.

    Nếu cụm của bạn chạy trên Google Cloud hoặc Azure và được tạo trước khi các cụm đa đám mây có sẵn:

  7. Mở trình xây dựng cụm.

  8. Chỉnh sửa cụm.

  9. Thêm các nút chỉ đọc từ nhà cung cấp đám mây mục tiêu của bạn.

    • Xem xét và gửi các thay đổi.

    • Sao chép chuỗi kết nối URI được phân phối bằng dấu phẩy.

    • Thay thế chuỗi kết nối trong ứng dụng của bạn bằng chuỗi kết nối tiêu chuẩn mới này.

  10. Nó phụ thuộc vào:

  11. Nhà cung cấp đám mây nào mà cụm hiện tại của bạn sử dụng vàURI connection string.

  12. Khi bạn tạo cụm.URI connection string in your application with this new URI connection string.

  13. Mở trình xây dựng cụm.

  14. Chỉnh sửa cụm.

Thêm các nút chỉ đọc từ nhà cung cấp đám mây mục tiêu của bạn.AWS or was created after October 2020:

  1. Mở trình xây dựng cụm.

  2. Chỉnh sửa cụm.

  3. Thay đổi nhà cung cấp đám mây.

  4. Xem xét và gửi các thay đổi.

MongoDB có thể xử lý bao nhiêu kết nối?

Các số cổng nằm trong khoảng từ 1 đến 65535. Vì vậy, từ một ứng dụng ứng dụng điểm chuẩn duy nhất, tôi chỉ có thể tạo 65535 kết nối đi.1 to 65535. So from a single benchmark client, I can only create 65535 outgoing connections.

MongoDB có thể có nhiều mối quan hệ?

Nhiều mối quan hệ là một loại mối quan hệ MongoDB trong đó bất kỳ hai thực thể nào trong một tài liệu có thể có nhiều mối quan hệ.Trong mối quan hệ này, chúng tôi có thể xem xét một trường hợp của trang web các khóa học trực tuyến, nơi có nhiều khóa học và nhiều người dùng.. In this relationship, we can consider a case of Online courses website where there are many courses and also many users.

MongoDB có đa luồng không?

Máy chủ MongoDB hiện đang sử dụng luồng trên mỗi kết nối cộng với một số luồng bên trong.Bạn có thể liệt kê tất cả các luồng (bao gồm cả IDLE và hệ thống) bằng DB.hiện tại (đúng) trong vỏ Mongo.Nếu bạn có 8 yêu cầu đến, mỗi yêu cầu sẽ được xử lý bởi một luồng kết nối riêng biệt.. You can list all threads (including idle and system) using db. currentOp(true) in the mongo shell. If you have 8 incoming requests, each of those will be handled by a separate connection thread.

Làm thế nào để MongoDB kết nối với nhiều cơ sở dữ liệu?

Định cấu hình nhiều kết nối:..
Tạo DB.sơ đẳng.Tệp JS.....
Tạo DB.sơ trung.Tệp JS.....
Tạo chỉ mục.Tệp JS.Tệp này sẽ xuất tất cả các kết nối cơ sở dữ liệu.....
Cấu trúc thư mục của bạn sẽ trông như thế này ..
Khởi tạo kết nối cơ sở dữ liệu trong máy chủ.Tệp JS như bạn sẽ làm với kết nối mặc định ..