2014-03-02 20 views

回答

4

沒有深入到技術細節,讓我們試着描述整個過程:

對於網址:

http://host/database/docid 
  1. 處理請求
  2. 匹克數據庫名,看,如果文件句柄打開或找到並打開相關文件
  3. 漫步想着Btree索引尋找指定的docid。這是O(logn)操作
  4. 閱讀文檔
  5. 返回結果給客戶端現在

的觀點:

http://host/database/_design/category/_view/specific/?key=docid 
  1. 處理請求
  2. 匹克數據庫名,看是否文件句柄打開或找到並打開相關文件
  3. 漫步思想Btree索引尋找指定設計文檔編號
  4. 找到索引文件。他的名字是根據ddoc的意見+語言+選項字段進行散列。
  5. 打開文件或使用已打開的文件句柄
  6. 找到索引指定視圖功能
  7. 步行認爲B樹索引中查找指定鍵 6.5如果你想爲全文檔內容 - 添加include_docs=true查詢參數,這就是意志花費你額外的I/O操作
  8. 返回結果給客戶端

正如你看到的,請求看法是有點比文件ID要求更加複雜。

下面是使用由wrk文檔ID的僞基準:

Running 1m test @ http://host/database/docid 
    8 threads and 100 connections 
    Thread Stats Avg  Stdev  Max +/- Stdev 
    Latency 48.35ms 7.14ms 102.98ms 83.13% 
    Req/Sec 250.38  24.81 323.00  74.06% 
    Latency Distribution 
    50% 45.99ms 
    75% 50.98ms 
    90% 57.95ms 
    99% 74.01ms 
    119880 requests in 1.00m, 103.71MB read 
Requests/sec: 1997.91 
Transfer/sec:  1.73MB 

並使用視圖:

Running 1m test @ http://host/database/_design/category/_view/specific/?key=docid 
    8 threads and 100 connections 
    Thread Stats Avg  Stdev  Max +/- Stdev 
    Latency 61.06ms 13.68ms 178.97ms 79.74% 
    Req/Sec 200.38  28.80 263.00  71.60% 
    Latency Distribution 
    50% 57.05ms 
    75% 66.98ms 
    90% 77.01ms 
    99% 112.99ms 
    96071 requests in 1.00m, 28.69MB read 
Requests/sec: 1601.06 
Transfer/sec: 489.55KB 

和查看與include_docs=true

Running 1m test @ http://host/database/_design/category/_view/specific/?key=docid&include_docs=true 
    8 threads and 100 connections 
    Thread Stats Avg  Stdev  Max +/- Stdev 
    Latency 82.95ms 13.26ms 200.98ms 77.46% 
    Req/Sec 145.91  15.11 192.00  73.28% 
    Latency Distribution 
    50% 80.77ms 
    75% 88.97ms 
    90% 98.97ms 
    99% 124.98ms 
    69988 requests in 1.00m, 69.89MB read 
Requests/sec: 1166.27 
Transfer/sec:  1.16MB 

然而,視圖是不通過他們的ID獲取文件。它們是數據庫的二級索引,並允許以更多不同的方式查找數據。他們支持減少操作,分組,這對統計非常有用。