Đánh giá mongoDB với YCSB

Như 1 bài trước mình có chỉ dẫn mọi người cài đặt mongodb với docker(https://viblo.asia/p/cai-dat-mongo-cluster-voi-docker-m68Z0NN25kG) hôm nay mình sẽ dùng 1 tool khá phổ biến (YCSB) để thực hiện đánh giá hiệu năng của thằng này xem sao nhé
Các bạn cài ycsb theo chỉ dẫn sau: https://github.com/brianfrankcooper/YCSB
Sau khi các bạn cài đặt mongodb theo như bài viết trước đó của mình. Để ý có 2 services như sau

router0:     image: mongo     command: mongos --configdb configRs/configsvr0:27017,configsvr1:27017,configsvr2:27017 --port 27017     volumes:       - /etc/localtime:/etc/localtime:ro       - ./scripts/sharding_replicaset:/scripts/sharding_replicaset     ports:       - 27017:27017     đường dẫns:       - configsvr2 router1:     image: mongo     command: mongos --configdb configRs/configsvr0:27017,configsvr1:27017,configsvr2:27017 --port 27017     volumes:       - /etc/localtime:/etc/localtime:ro       - ./scripts/sharding_replicaset:/scripts/sharding_replicaset     ports:       - 27018:27017     đường dẫns:       - router0 

Đây là 2 routers dùng để giao tiếp với người sử dụng. router0 có map port 27017 (port mặc định của mongodb khi bạn cài độc lập) ra ngoài. Như vậy từ bên ngoài mình chỉ cần gọi đến url dạng như sau là có thể vào web vào cả mạng mongodb rồi

mongodb://localhost/healthCareDB 

vì sao ta không cần map cổng ở đây, vì khi gọi mongodb-url, sẽ mặc định lấy cổng là 27017, mà trong cụm docker mình tạo ra, router0 map đúng cổng mặc định của mongo, nên mặc định url sẽ nhận. healthCareDB là tên database mình tạo ra. đây sẽ là database được test.
OK, đầu tiên để test, mình phải load data vào cụm trước chứ. Mọi người chạy lệnh ycsb sau:

./bin/ycsb load mongodb -P workloads/workloada -p mongodb.url="mongodb://localhost/healthCareDB?w=1" -p recordcount=100000 -s  -threads 32 > outputLoad.txt 

Các tham số có ý nghĩa như sau: w = 1, nghĩa là trong 1 replica, chỉ cần ghi thành công 1 node là ok, các node khác sẽ được đồng bộ sau. recordcount là số lượng bản ghi muốn ghi vào cụm. -p có ý nghĩa là property. sau -p là hàng loạt tham số của lệnh ycsb này. -threads 32 nghĩa là có 32 client cùng ghi.
Kết quả trả về file outputLoad.txt có dạng như sau:

mongo client connection created with mongodb://localhost:27017/healthCareDB?w=1 [OVERALL], RunTime(ms), 279319.0 [OVERALL], Throughput(ops/sec), 3580.135973564276 [TOTAL_GCS_PS_Scavenge], Count, 26.0 [TOTAL_GC_TIME_PS_Scavenge], Time(ms), 110.0 [TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.039381495709207036 [TOTAL_GCS_PS_MarkSweep], Count, 0.0 [TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0.0 [TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0 [TOTAL_GCs], Count, 26.0 [TOTAL_GC_TIME], Time(ms), 110.0 [TOTAL_GC_TIME_%], Time(%), 0.039381495709207036 [CLEANUP], Operations, 1.0 [CLEANUP], AverageLatency(us), 2213.0 [CLEANUP], MinLatency(us), 2212.0 [CLEANUP], MaxLatency(us), 2213.0 [CLEANUP], 95thPercentileLatency(us), 2213.0 [CLEANUP], 99thPercentileLatency(us), 2213.0 [INSERT], Operations, 1000000.0 [INSERT], AverageLatency(us), 276.660963 [INSERT], MinLatency(us), 197.0 [INSERT], MaxLatency(us), 35871.0 [INSERT], 95thPercentileLatency(us), 327.0 [INSERT], 99thPercentileLatency(us), 369.0 [INSERT], Return=OK, 1000000 

Nhìn qua file kết quả, ta có các thông số cơ bản như là runtime, throughput, maxLatency và minLatency. về Latency mình đã nói ở những bài trước. Như vậy đổi khác tham số threads ta sẽ có nhiều file output khác nhau.

Như câu lệnh trên là lệnh load data, nghĩa là làm 100% ghi. Các lệnh khác (update, read) sẽ có dạng như sau:

./bin/ycsb run mongodb -P workloads/workloadc -p mongodb.url="mongodb://localhost:27017/healthCareDB?w=1" -p operationcount=100000 -s 

để ý workloads/workloadc là các kịch bản test được được hiểu ở đây: https://github.com/brianfrankcooper/YCSB/wiki/Core-Workloads
Bạn hoàn toàn có thể được hiểu 1 kịch bản test riêng cho mình bằng các vào web thư mục ycsb/workloads và tạo ra các file workloads với content như sau:

recordcount=1000 operationcount=1000 workload=com.yahoo.ycsb.workloads.CoreWorkload  readallfields=true  readproportion=0.5 updateproportion=0.5 scanproportion=0 insertproportion=0  requestdistribution=zipfian 

OK, vậy đây là kết quả sau khi chạy test với số lượng threads từ 1-120.


Nguồn viblo.asia