CouchDB中插入速度的快速降低

CouchDB中插入速度的快速降低,couchdb,couchdb-python,Couchdb,Couchdb Python,我正在处理一些输入文件,并将获得的记录作为 CouchDB文件。 我注意到插入速度随着时间的推移而降低 数据库大小增加 我所做的是: 从输入文件读取数据 处理数据以获得结构化文档 将文档放入本地缓冲区 一旦缓冲区有1000个文档,就执行couchdb批量插入 重复此操作,直到输入数据完全处理完毕 这里有我当前跑步的日志: 2012-03-15 10:15:58,716 - docs= 10000 rate=2282.38 entries/s 2012-03-15 10:16:46,748 - d

我正在处理一些输入文件,并将获得的记录作为 CouchDB文件。 我注意到插入速度随着时间的推移而降低 数据库大小增加

我所做的是:

  • 从输入文件读取数据
  • 处理数据以获得结构化文档
  • 将文档放入本地缓冲区
  • 一旦缓冲区有1000个文档,就执行couchdb批量插入
  • 重复此操作,直到输入数据完全处理完毕
  • 这里有我当前跑步的日志:

    2012-03-15 10:15:58,716 - docs= 10000 rate=2282.38 entries/s
    2012-03-15 10:16:46,748 - docs=100000 rate=1822.76 entries/s
    2012-03-15 10:17:47,433 - docs=200000 rate=1592.01 entries/s
    2012-03-15 10:18:48,566 - docs=300000 rate=1358.32 entries/s
    2012-03-15 10:19:54,637 - docs=400000 rate=1572.55 entries/s
    2012-03-15 10:21:01,690 - docs=500000 rate=1560.41 entries/s
    2012-03-15 10:22:09,400 - docs=600000 rate=1556.22 entries/s
    2012-03-15 10:23:16,153 - docs=700000 rate=1550.21 entries/s
    2012-03-15 10:24:30,850 - docs=800000 rate=1393.61 entries/s
    2012-03-15 10:25:46,099 - docs=900000 rate=1336.83 entries/s
    2012-03-15 10:27:09,290 - docs=1000000 rate= 871.37 entries/s
    2012-03-15 10:28:31,745 - docs=1100000 rate=1256.36 entries/s
    2012-03-15 10:29:53,313 - docs=1200000 rate=1140.49 entries/s
    2012-03-15 10:31:29,207 - docs=1300000 rate=1080.79 entries/s
    2012-03-15 10:33:23,917 - docs=1400000 rate= 741.65 entries/s
    2012-03-15 10:35:45,475 - docs=1500000 rate= 567.96 entries/s
    2012-03-15 10:39:04,293 - docs=1600000 rate= 564.01 entries/s
    2012-03-15 10:42:20,160 - docs=1700000 rate= 499.29 entries/s
    2012-03-15 10:46:06,270 - docs=1800000 rate= 505.04 entries/s
    2012-03-15 10:50:24,745 - docs=1900000 rate= 402.14 entries/s
    2012-03-15 10:55:23,800 - docs=2000000 rate= 346.19 entries/s
    2012-03-15 11:02:03,217 - docs=2100000 rate= 274.59 entries/s
    2012-03-15 11:08:21,690 - docs=2200000 rate= 269.57 entries/s
    
    “速率”显示最后一千个文档的插入速率, 正如你所看到的,它的退化速度非常快

    • 这正常吗
    • 我能做些什么来保持高插入率吗
    • 你有使用大型CouchDB数据库的经验吗
    • 你有什么建议想和大家分享吗

    高插入率是不正常的,这是因为所有东西都整齐地放入了磁盘缓存中。随着数据库大小的增加,最终需要从磁盘读取数据以更新btree。最好将插入测试运行更长的时间,绘制它的图形,然后您应该看到前面的巨大尖峰是奇怪的,不是更低的,而是随后的或多或少的恒定速率


    从您提出这个问题的其他线程来看,另一个重要因素是您使用了完全随机的uuid。因为CouchDB基于b+树,所以插入完全随机的ID是最糟糕的更新方案。CouchDB附带了许多uuid算法,默认的称为“sequential”的算法返回的值发生冲突的可能性非常低,这些值仍然是顺序的,足以提供更好的插入性能。

    高插入率是不正常的,这是由磁盘缓存中的所有内容都非常适合造成的。随着数据库大小的增加,最终需要从磁盘读取数据以更新btree。最好将插入测试运行更长的时间,绘制它的图形,然后您应该看到前面的巨大尖峰是奇怪的,不是更低的,而是随后的或多或少的恒定速率


    从您提出这个问题的其他线程来看,另一个重要因素是您使用了完全随机的uuid。因为CouchDB基于b+树,所以插入完全随机的ID是最糟糕的更新方案。CouchDB附带了许多uuid算法,默认情况下,称为“sequential”的算法返回的值发生冲突的可能性非常低,这些值仍然是顺序的,足以提供更好的插入性能。

    实际上,它与文档id的大小有关,而不是与文档id的顺序有关。我已经通过使用一个非常小(几个字符)的doc_id解决了这个问题,实际上是一个base64编码的单调递增的doc_id。我还使用了一个Erlang排序字典来执行编码,但这是一个小问题。实际上,它更多地与doc_id的大小相关,而不是与它的排序相关。我已经通过使用一个非常小(几个字符)的doc_id解决了这个问题,实际上是一个base64编码的单调递增的doc_id。我还使用了一个Erlang有序字典来执行编码,但这是一个小问题。