从信息流或按ID检索单个文档是否更快?

查理

简单的问这个...

这是;

http://host/database/docid

比这更快;

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

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

克萨尔

在不深入技术细节的情况下,让我们尝试描述整个过程:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章