从文件名或ID中检索单个文档是否更快?

问题描述 投票:0回答:1

这个简单的问题...

是这个;

http://host/database/docid

比这快;

http://host/database/_design/category/_view/specific/?key=docid

我希望索引视图会更快,但我不确定,详细答案会很好。

database database-design nosql couchdb
1个回答
4
投票

[不深入探讨技术细节,让我们尝试描述整个过程:

对于URL:

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索引查找指定的设计文档ID
  4. 找到索引文件。他的名字基于ddoc的视图+语言+选项字段中的哈希值。
  5. 打开文件或使用已打开的文件处理程序
  6. 查找指定视图功能的索引
  7. 步行想Btree索引寻找指定的键6.5如果要获取完整的文档内容,请添加include_docs=true查询参数,这将使您花费额外的I / O操作
  8. 返回结果给客户

正如您所看到的,请求视图比通过文档ID请求要复杂一些。

这里是通过文档ID使用wrk的虚拟基准测试:

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来获取文档的。它们是数据库的二级索引,并允许以更多不同的方式定位数据。它们支持归约运算,分组,这对于统计非常有用。

© www.soinside.com 2019 - 2024. All rights reserved.