MongoDB:Big query or Small queries

一件事情,要用 Big query 還是 Small queries 好呢?也就是用一個很複雜的 Query,還是拆成幾個小 Query 呢?
一件事情要用 Big Query 還是很多 Small Query (small queries),有很多因素要考慮。但擔心篇幅太多,僅供幾個引子,讓大家去想一下。
  1. Connection pool
  2. Lock
  3. Thread model
MongoDB 是 single thread model,也就是大多時候只會用到一顆 CPU,而 Query 會 Read lock, Insert / Remove / Update 還會加上 Write lock。
所以若是 MMAPv1 引擎,collection-level locking 會讓 Query 只能在單一 collection 中處理 (Read lock),再加上沒有 MVCC 以及天生的 single thread model,所以無法有效處理高併發。這時候通常 Big Query 會比 Small queries 來得好。
反之若是 WiredTiger,document-level locking 加上 MVCC 設計,比較能處理高併發。這時候通常 Small queries 會比 Big Query 來得好。
可是事事無絕對,還是要看什麼樣的 Query。例如多大的 Query、是不是跨 Collections 的 Query 等。
但無論哪個引擎,都會受限在 MongoDB 天生是 single thread model 的設計,無法善用多核 CPU。所幸 MongoDB 天生擁有良好的 Sharding 技術,可以跑多個 MongoDB instances 並採用 Sharding 技巧,還是可以盡量壓出機器的效能。
單機跑多 instances 可以參考官方文件 http://docs.mongodb.org/manu…/tutorial/deploy-shard-cluster/

留言

這個網誌中的熱門文章

Json概述以及python對json的相關操作

Docker容器日誌查看與清理

利用 Keepalived 提供 VIP