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

Làm cách nào để Benchmark MongoDB với YCSB?

Trong khi nói về các đặc điểm hoạt động của hệ thống, hầu hết các nhà cung cấp DBaaS tự giới hạn việc cung cấp thông tin về phần cứng mà hệ thống của họ được cung cấp. Thực sự khó có thể nói chính xác về đặc điểm thông lượng / độ trễ thực tế của việc triển khai dựa trên đám mây với số lượng biến trong một hệ thống như vậy. Môi trường ảo hóa, khối lượng công việc không thể đoán trước, độ trễ mạng, các khu vực địa lý khác nhau chỉ là một số vấn đề cần cân nhắc.

Tuy nhiên, bạn nên hiểu rõ về hiệu suất thực tế của việc triển khai MongoDB của mình:để bạn có thể cung cấp chính xác dựa trên nhu cầu ứng dụng của mình; để bạn thực sự có thể so sánh các nhà cung cấp DBaaS khác nhau để đảm bảo rằng bạn đang nhận được nhiều lợi ích nhất.

Blog này là tài liệu sơ lược về cách chạy một số điểm chuẩn hiệu suất cơ bản trên cụm MongoDB của bạn. Nó đi vào chi tiết về cách định cấu hình và chạy các bài kiểm tra điểm chuẩn YCSB và giải thích kết quả. Nguồn cảm hứng cho nó đến từ blog MongoDB gần đây về các cải tiến hiệu suất trong MongoDB 3.0.

YCSB là bộ chương trình và đặc tả mã nguồn mở Java phổ biến được phát triển tại Yahoo! để so sánh hiệu suất tương đối của các cơ sở dữ liệu NoSQL khác nhau. Khối lượng công việc của nó được sử dụng trong các nghiên cứu so sánh khác nhau về cơ sở dữ liệu NoSQL.

Thiết lập YCSB

Phần này và các phần sau này sẽ hướng dẫn bạn qua quy trình từng bước để thiết lập, định cấu hình và chạy thử nghiệm YCSB trên hệ thống nhà cung cấp DBaaS yêu thích của bạn.

Để chạy kiểm tra khối lượng công việc, bạn sẽ cần một máy khách, tốt nhất là ở cùng vị trí địa lý với cụm MongoDB của bạn để tránh độ trễ qua Internet. Chọn một cấu hình có lượng nước ép phù hợp để chạy nhiều luồng để tải cụm Mongo của bạn một cách thích hợp. Máy cần cài đặt phiên bản Java, Maven và git gần đây.

Các bước:

  • Nếu Java, Maven hoặc git chưa được cài đặt trên hệ thống của bạn, hãy cài đặt chúng. Tham khảo tài liệu có sẵn cho hệ điều hành cụ thể của bạn. Đảm bảo rằng bạn cài đặt phiên bản Maven tương thích với phiên bản Java của bạn. Kiểm tra xem tất cả các phần phụ thuộc đang hoạt động chính xác. Ví dụ:
$ javac -version
javac 1.8.0_25
$ mvn -version
Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-14T01:40:27+05:30)
Maven home: /usr/local/Cellar/maven/3.3.1/libexec
Java version: 1.8.0_25, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.10.2", arch: "x86_64", family: "mac"
$ git --version
git version 1.9.5 (Apple Git-50.3)
  • Theo đề xuất của trang Github của YCSB, bạn có thể nhận được kho lưu trữ tar của YCSB. Nhưng chúng tôi khuyên bạn nên xây dựng nó từ nguồn. Các bước được ghi lại trong MongoDB README của YCSB. Điều này sẽ giúp chúng tôi bật xác thực MongoDB cho nhà cung cấp dịch vụ đám mây của bạn sau này.
git clone git://github.com/brianfrankcooper/YCSB.git
cd YCSB
mvn clean package
  • Lưu ý:Nếu `mvn clean package` của bạn hoặc `mvn clean install` lệnh không thành công do lỗi định vị gói “mapkeeper”, xóa hoặc nhận xét 2 phiên bản của các mục “mapkeeper” trong pom.xml ở cấp cơ sở. Hãy xem số báo này trên Github để biết thêm thông tin.
  • Sau khi xây dựng thành công, bạn đã sẵn sàng chạy thử nghiệm YCSB!

Bật xác thực

Hầu hết các nhà cung cấp MongoDB đều cung cấp xác thực MongoDB theo mặc định và không có cách nào để vô hiệu hóa nó. Rất tiếc, YCSB hiện không hỗ trợ xác thực MongoDB. Bản thân việc triển khai ứng dụng khách hiện nay chủ yếu sử dụng các lệnh gọi API không dùng nữa. Để đáp ứng nhu cầu của chúng tôi, chúng tôi đã thêm một thuộc tính YCSB cụ thể của MongoDB, 'mongodb.auth' cùng với một vài dòng mã để hỗ trợ nó. Các thay đổi rất đơn giản và có thể tìm thấy một điểm khác biệt tại đây. Các thuộc tính YCSB cụ thể của MongoDB được liệt kê tại đây.

Xây dựng lại gói bằng mvn một lần nữa khi các thay đổi hoàn tất. Tham khảo phần ở trên về cách tạo YCSB bằng Maven.

Chạy thử nghiệm

Phần này của wiki YCSB liệt kê chi tiết các hoạt động tiếp theo và tiếp theo. Chúng tôi sẽ mô tả ngắn gọn chúng ở đây cùng với các gợi ý khác.

  • Bước tiếp theo là chọn loại khối lượng công việc bạn muốn chạy. Hãy dành thời gian để đọc và hiểu phần Khối lượng công việc chính của wiki YCSB. Chúng được tóm tắt ở đây:
    • Khối lượng công việc A:Cập nhật khối lượng công việc nặng:50/50% Kết hợp Số lần Đọc / Viết
    • Khối lượng công việc B:Phần lớn khối lượng công việc đọc:95/5% Kết hợp Số lần Đọc / Viết
    • Khối lượng công việc C:Chỉ đọc:100% lần đọc
    • Khối lượng công việc D:Đọc khối lượng công việc mới nhất:Nhiều lưu lượng truy cập hơn trên các phụ trang gần đây
    • Khối lượng công việc E:Phạm vi ngắn:Truy vấn dựa trên phạm vi ngắn
    • Khối lượng công việc F:Đọc-sửa đổi-ghi:Đọc, sửa đổi và cập nhật các bản ghi hiện có
  • Rõ ràng, các khối lượng công việc riêng lẻ có thể được điều chỉnh bằng cách sử dụng Thuộc tính lõi. Bạn có thể muốn chọn một khối lượng công việc và điều chỉnh các thuộc tính để phù hợp với một cái gì đó phù hợp với các đặc điểm của ứng dụng của bạn. (Nghiên cứu so sánh này đã chọn một loạt các khối lượng công việc được “tinh chỉnh” thú vị). Ngoài ra, hãy tham khảo blog MongoDB mà chúng tôi đã đề cập trong phần đầu tiên. (Thử nghiệm của chúng tôi sẽ chọn Khối lượng công việc A với tỷ lệ đọc / cập nhật mặc định).
  • Chọn số hoạt động (Thuộc tính ‘operationcount’) để kiểm tra tự chạy trong một khoảng thời gian thích hợp. Các bài kiểm tra kết thúc trong vòng 30 phút không thể là chỉ báo tốt về hiệu suất chung của hệ thống.
  • Chọn số luồng thích hợp mà YCSB sẽ chạy. Điều này thực sự phụ thuộc vào việc máy khách của bạn tốt đến mức nào, cụm MongoDB của bạn có thể chịu tải bao nhiêu và nó đại diện cho ứng dụng thực tế của bạn như thế nào. Chúng tôi sẽ chạy các bài kiểm tra điểm chuẩn của mình dựa trên một loạt các chủ đề.
  • Chạy giai đoạn tải. Chọn số lượng bản ghi (Thuộc tính ‘recordcount’) để chèn vào cơ sở dữ liệu gần với số lượng thao tác bạn định chạy trên đó. Chọn một số lượng chủ đề thích hợp để việc chèn không mất quá nhiều thời gian. Ví dụ:
    ./bin/ycsb load mongodb -s -P workloads/workloada -p recordcount=10000000 -threads 16 -p
     mongodb.url="mongodb://user:[email protected]:9999,server2.example.com:9999/dbname" -p 
    mongodb.auth="true"
    
    • load ‘Cờ chỉ ra rằng đây là một lần chạy tải.
    • s 'Cờ in trạng thái ở các khoảng thời gian 10 giây
    • recordcount ‘Được đặt thành 10 triệu.
    • threads ‘Đặt số lượng chuỗi khách hàng là 16.
    • mongodb.auth ‘Là thuộc tính mà chúng tôi đã viết để kích hoạt xác thực MongoDB.
  • Nhớ
    • Chuyển hướng stdout đến một tệp.
    • Sử dụng ‘screen ‘Hoặc một phương pháp tương đương để phiên của bạn không bị mất khi chạy các hoạt động này
  • Khi giai đoạn tải dữ liệu hoàn tất, bạn đã sẵn sàng để chạy khối lượng công việc của mình. Ví dụ:
./bin/ycsb run mongodb -s -P workloads/workloada -p 
mongodb.url="mongodb://user:[email protected]:9999,server2.example.com:9999/dbname" -p
 mongodb.auth="true" -p operationcount=10000000 -threads 2
  • Lặp lại các lần chạy với nhiều luồng khác nhau. Hãy nhớ chuyển hướng kết quả để bạn có thể so sánh chúng sau này. Ví dụ chúng tôi đã lặp lại các bài kiểm tra của mình cho chuỗi 2, 4, 8, 16 và 32.

Phân tích kết quả

Phần cuối cùng của trang wiki YCSB này nói về phân tích kết quả. Các bit thông tin thú vị nhất là Thông lượng tổng thể và Độ trễ phân vị 95/99%. Thông thường, việc tăng số lượng luồng sẽ làm tăng thông lượng cho đến khi lợi ích giảm dần và độ trễ trở nên không thể chấp nhận được. Ví dụ đây là biểu đồ của Thông lượng và Độ trễ so với số luồng cho một hệ thống thử nghiệm mà chúng tôi đang cố gắng làm điểm chuẩn. Khối lượng công việc được chọn là Khối lượng công việc A và khoảng 3 triệu hoạt động.

Từ biểu đồ có thể kết luận rằng 16 luồng có lẽ là “điểm ngọt ngào” từ quan điểm tải đối với máy chủ MongoDB này:Ngoài ra, đường thông lượng bằng phẳng ngay cả khi số luồng tăng theo cấp số nhân trong khi độ trễ tăng lên đến mức không thể chấp nhận được.

Một vài gợi ý:

  • Để có bức tranh tốt hơn về hiệu suất hệ thống qua đám mây, hãy tự động hóa và sau đó lặp lại các bài kiểm tra này là những điểm khác nhau trong ngày. Chúng tôi nhận thấy rằng các đặc điểm về hiệu suất có thể thay đổi đáng kể qua từng ngày.
  • Khi so sánh hai nhà cung cấp DBaaS tiềm năng, hãy đảm bảo rằng bạn chọn các máy khách và cụm DBaaS trong cùng một khu vực địa lý. Các cụm phải có cấu hình tương tự. Ngoài ra, hãy nhớ chạy các bài kiểm tra vào nhiều thời điểm khác nhau trong ngày.

Tiếp theo là gì

Dưới đây là một số điều mà chúng tôi dự định sẽ điều tra khi chúng tôi thực hiện nhiều công việc hơn trong lĩnh vực này:

  • Chạy khối lượng công việc từ nhiều máy song song:Khi cố gắng tải một cụm MongoDB dung lượng cao, một máy khách duy nhất sẽ không đủ. YCSB hiện không cung cấp cách dễ dàng để chạy khối lượng công việc từ nhiều máy song song. Tuy nhiên, nó có thể được thực hiện thủ công. Điều này cũng sẽ hữu ích khi cố gắng tải dữ liệu vào một cụm lớn.
  • Kích thước của Tập dữ liệu:Kích thước của cơ sở dữ liệu so với bộ nhớ của hệ thống MongoDB sẽ thay đổi các đặc điểm về thông lượng / độ trễ tuyệt đối mà đối với các tập dữ liệu lớn hơn, MongoDB sẽ phải đạt được đĩa .
  • Kích thước của từng bản ghi:Sẽ rất thú vị với các đặc điểm hiệu suất khi kích thước bản ghi lớn, đặc biệt khi nó gần với kích thước bản ghi được hỗ trợ tối đa. Điều này có thể rất quan trọng đối với các ứng dụng chủ yếu thực hiện các hoạt động đọc-sửa-ghi-ghi ngược lại (như Khối lượng công việc F).
  • Trình điều khiển MongoDB thay thế:Vì chúng tôi hiện đang quan tâm đến việc so sánh hai nhà cung cấp DBaaS khác nhau, chúng tôi đã không cố gắng sử dụng trình điều khiển cơ sở dữ liệu hiệu quả hơn. Rõ ràng, có thể đạt được những con số tuyệt đối tốt hơn nhiều với các trình điều khiển mới nhất và hiệu quả hơn. Điều này sẽ rất thú vị đối với các ứng dụng đang cố gắng trích xuất lượng nước trái cây cuối cùng ra khỏi hệ thống của họ. Blog này nói về các phép đo cải thiện hiệu suất thông qua YCSB bằng cách sử dụng trình điều khiển MongoDB không đồng bộ.
  • Công cụ đo điểm chuẩn thay thế:Sysbench cho MongoDB là một công cụ mà chúng tôi thấy thú vị. Chúng tôi đang quan sát những người khác.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Thêm Trình xác thực mới vào Bộ sưu tập hiện có

  2. Nhóm MongoDB theo mảng phần tử bên trong

  3. mongo:lợi nhuận không bằng count ()

  4. MongoDB + trình điều khiển C # + mảng truy vấn các phần tử trong đó mỗi phần tử mảng chứa tài liệu con để truy vấn

  5. Cách triển khai cơ sở dữ liệu nguồn mở