MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm thế nào để định cấu hình MongoDB trình điều khiển Java MongoOptions để sử dụng trong sản xuất?

Cập nhật lên 2.9:

  • autoConnectRetry chỉ có nghĩa là trình điều khiển sẽ tự động cố gắng kết nối lại với (các) máy chủ sau khi ngắt kết nối không mong muốn. Trong môi trường sản xuất, bạn thường muốn đặt giá trị này thành true.

  • kết nốiPerHost là số lượng kết nối vật lý mà một cá thể Mongo đơn lẻ (nó là singleton nên bạn thường có một kết nối cho mỗi ứng dụng) có thể thiết lập cho một quy trình mongod / mongos. Tại thời điểm viết, trình điều khiển java sẽ thiết lập số lượng kết nối này cuối cùng ngay cả khi thông lượng truy vấn thực tế thấp (theo thứ tự từ bạn sẽ thấy thống kê "conn" trong mongostat tăng lên cho đến khi đạt đến con số này trên mỗi máy chủ ứng dụng).

    Không cần thiết đặt giá trị này cao hơn 100 trong hầu hết các trường hợp nhưng cài đặt này là một trong những thứ "thử nghiệm và xem". Lưu ý rằng bạn sẽ phải đảm bảo rằng bạn đặt mức này đủ thấp để tổng số lượng kết nối đến máy chủ của bạn không vượt quá

    db.serverStatus().connections.available

    Trong quá trình sản xuất, chúng tôi hiện có cái này ở mức 40.

  • connectTimeout . Như tên gợi ý số mili giây trình điều khiển sẽ đợi trước khi nỗ lực kết nối bị hủy bỏ. Đặt thời gian chờ dài (15-30 giây) trừ khi có cơ hội thực tế, dự kiến, điều này sẽ cản trở các nỗ lực kết nối thành công. Thông thường, nếu một nỗ lực kết nối mất hơn vài giây thì cơ sở hạ tầng mạng của bạn không có khả năng đạt được thông lượng cao.

  • maxWaitTime . Số mili giây mà một luồng sẽ đợi kết nối khả dụng trên nhóm kết nối và đặt ra một ngoại lệ nếu điều này không xảy ra kịp thời. Giữ mặc định.

  • socketTimeout . Giá trị thời gian chờ của ổ cắm tiêu chuẩn. Đặt thành 60 giây (60000).

  • threadAllowedToBlockForConnectionMultiplier . Hệ số nhân cho các kết nốiPerHost biểu thị số luồng được phép đợi các kết nối khả dụng nếu nhóm hiện đang cạn kiệt. Đây là cài đặt sẽ gây ra ngoại lệ "com.mongodb.DBPortPool $ SemaphoresOut:Out of semaphores để có được kết nối db". Nó sẽ ném ngoại lệ này khi hàng đợi luồng này vượt quá giá trị threadAllowedToBlockForConnectionMultiplier. Ví dụ:nếu các kết nốiPerHost là 10 và giá trị này là 5 thì tối đa 50 luồng có thể chặn trước khi ngoại lệ nói trên được ném ra.

    Nếu bạn mong đợi thông lượng đạt đỉnh lớn có thể khiến hàng đợi lớn tạm thời làm tăng giá trị này. Chúng tôi có nó lúc 1500 vào lúc này vì lý do đó chính xác. Nếu tải truy vấn của bạn thường xuyên vượt quá máy chủ, bạn chỉ nên cải thiện tình hình phần cứng / tỷ lệ của mình cho phù hợp.

  • readPreference . (CẬP NHẬT, 2.8+) Được sử dụng để xác định tùy chọn đọc mặc định và thay thế "slaveOk". Thiết lập một ReadPreference thông qua một trong các phương thức nhà máy của lớp. Bạn có thể tìm thấy mô tả đầy đủ về các cài đặt phổ biến nhất ở cuối bài đăng này

  • w . (CẬP NHẬT, 2.6+) Giá trị này xác định độ "an toàn" của việc ghi. Khi giá trị này là -1, việc ghi sẽ không báo cáo bất kỳ lỗi nào bất kể lỗi mạng hoặc cơ sở dữ liệu. WriteConcern.NONE là WriteConcern được xác định trước thích hợp cho việc này. Nếu w là 0 thì lỗi mạng sẽ làm cho việc ghi không thành công nhưng lỗi mongo thì không. Điều này thường được gọi là ghi "cháy và quên" và nên được sử dụng khi hiệu suất quan trọng hơn tính nhất quán và độ bền. Sử dụng WriteConcern.NORMAL cho chế độ này.

    Nếu bạn đặt w thành 1 hoặc cao hơn, việc ghi được coi là an toàn. Tính năng ghi an toàn thực hiện việc ghi và theo dõi nó bằng một yêu cầu tới máy chủ để đảm bảo việc ghi thành công hoặc truy xuất giá trị lỗi nếu không (nói cách khác, nó sẽ gửi lệnh getLastError () sau khi bạn viết). Lưu ý rằng cho đến khi hoàn thành lệnh getLastError () này, kết nối sẽ được bảo lưu. Do đó và lệnh bổ sung, thông lượng sẽ thấp hơn đáng kể so với ghi với w <=0. Với giá trị w bằng chính xác 1 MongoDB đảm bảo việc ghi thành công (hoặc không thể xác minh được) trên phiên bản mà bạn đã gửi ghi.

    Trong trường hợp tập hợp bản sao, bạn có thể sử dụng các giá trị cao hơn cho w whcih yêu cầu MongoDB gửi bản ghi cho ít nhất thành viên "w" của tập hợp bản sao trước khi trả lại (hoặc chính xác hơn, hãy đợi bản sao bài viết của bạn tới thành viên "w" ). Bạn cũng có thể đặt w thành chuỗi "đa số" yêu cầu MongoDB thực hiện việc ghi vào phần lớn các thành viên của nhóm bản sao (WriteConcern.MAJORITY). Đánh máy, bạn nên đặt giá trị này thành 1 trừ khi bạn cần hiệu suất thô (-1 hoặc 0) hoặc ghi sao chép (> 1). Giá trị cao hơn 1 có tác động đáng kể đến thông lượng ghi.

  • fsync . Tùy chọn độ bền buộc mongo chuyển sang đĩa sau mỗi lần ghi khi được bật. Tôi chưa bao giờ gặp bất kỳ vấn đề nào về độ bền liên quan đến việc ghi tồn đọng vì vậy chúng tôi có điều này trên false (mặc định) trong quá trình sản xuất.

  • j * (MỚI 2.7+) *. Boolean mà khi được đặt thành true buộc MongoDB phải đợi một cam kết nhóm ghi nhật ký thành công trước khi quay trở lại. Nếu bạn đã bật tính năng ghi nhật ký, bạn có thể bật tính năng này để tăng độ bền. Tham khảo http://www.mongodb.org/display/DOCS/Journaling để xem việc viết nhật ký mang lại cho bạn điều gì (và do đó, tại sao bạn có thể muốn bật cờ này).

ReadPreference Lớp ReadPreference cho phép bạn định cấu hình các truy vấn cá thể mongod được định tuyến nếu bạn đang làm việc với các tập hợp bản sao. Các tùy chọn sau có sẵn:

  • ReadPreference.primary () :Tất cả các lần đọc chỉ được chuyển đến thành viên chính của repset. Sử dụng điều này nếu bạn yêu cầu tất cả các truy vấn trả về dữ liệu nhất quán (được viết gần đây nhất). Đây là mặc định.

  • ReadPreference.primaryPreferred () :Tất cả các lần đọc sẽ được chuyển đến thành viên chính repset nếu có thể nhưng có thể truy vấn thành viên thứ cấp nếu nút chính không khả dụng. Như vậy nếu tài liệu chính trở nên không khả dụng thì các lần đọc cuối cùng sẽ trở nên nhất quán, nhưng chỉ khi tài liệu chính không khả dụng.

  • ReadPreference.secondary () :Tất cả các lần đọc được chuyển đến thành viên repset thứ cấp và thành viên chính chỉ được sử dụng để ghi. Chỉ sử dụng điều này nếu bạn có thể sống với những lần đọc cuối cùng nhất quán. Các thành viên repset bổ sung có thể được sử dụng để mở rộng hiệu suất đọc mặc dù có giới hạn về số lượng thành viên (bỏ phiếu) mà một repet có thể có.

  • ReadPreference.secondaryPreferred () :Tất cả các bài đọc sẽ được chuyển đến các thành viên repset thứ cấp nếu có bất kỳ bài nào trong số họ có sẵn. Thành viên chính chỉ được sử dụng để viết trừ khi tất cả các thành viên phụ không còn nữa. Ngoài dự phòng cho thành viên chính để đọc, nó giống với ReadPreference.secondary ().

  • ReadPreference.nethers () :Các bài đọc được chuyển đến thành viên repset gần nhất có sẵn cho máy khách cơ sở dữ liệu. Chỉ sử dụng nếu những lần đọc nhất quán cuối cùng được chấp nhận. Thành viên gần nhất là thành viên có độ trễ thấp nhất giữa khách hàng và các thành viên repset khác nhau. Vì các thành viên bận rộn cuối cùng sẽ có độ trễ cao hơn, điều này nên cũng tự động cân bằng tải đọc mặc dù theo kinh nghiệm của tôi thứ cấp (Ưu tiên) dường như làm như vậy tốt hơn nếu độ trễ của thành viên tương đối nhất quán.

Lưu ý:Tất cả các phiên bản trên đều có các phiên bản hỗ trợ thẻ của cùng một phương pháp, thay vào đó sẽ trả về các phiên bản TaggableReadPreference. Bạn có thể tìm thấy mô tả đầy đủ về các thẻ tập hợp bản sao tại đây:Thẻ tập hợp bản sao




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Hoạt động đẩy trong MongoDB

  2. Mongodb khớp các ký tự có dấu làm ký tự cơ bản

  3. PyMongo - lặp lại con trỏ

  4. Mongoose Giá trị duy nhất trong mảng đối tượng lồng nhau

  5. Thứ tự của các chỉ mục kết hợp quan trọng như thế nào trong hiệu suất MongoDB?