gpt4 book ai didi

performance - 为什么从 CouchDB 读取数据这么慢? (1.5MB/s左右)

转载 作者:行者123 更新时间:2023-12-04 00:50:47 24 4
gpt4 key购买 nike

我有一个正在运行的 CouchDB (1.1.1) 服务器,其中包含 400-600KB 大小范围内的大量文档。

如果我从数据库中获取一个完整的文档(不是从 View 中,只是原始文档),它需要 200-400 毫秒才能完成,这相当于大约 1.5MB/s 的吞吐量。

如果我将相同的数据写入磁盘上的原始文件,它们会在 10-20 毫秒(大约 25-50 MB/秒)内加载。

我希望 CouchDB 有一些开销,但是一个数量级(和一些)对于本质上是阅读的东西来说似乎很疯狂!

谁能解释为什么会这样?

更新 :根据下面的要求,curl的时间:

# time curl http://localhost:5984/[dbname]/[documentname]

real 0m0.684s
user 0m0.004s
sys 0m0.020s

获取的文档为 642842 字节。我已经在标准 1TB 硬盘和 EC2 实例(EBS 卷)上对其进行了测试,结果相似。

最佳答案

我认为这是几个因素

  • 您正在通过 HTTP 获取,这基本上是一种更高延迟的协议(protocol)。特别是,您正在使用 curl 从头开始​​建立 TCP 连接。 . (Web 浏览器和大多数客户端软件保持一个持久的 HTTP/1.1 keepalive 连接池。)但从根本上说,CouchDB 选择了一种“较慢”的协议(protocol),因为它是如此通用且如此标准。
  • 对于 CouchDB,您的文档尺寸较大。大多数文档都是一位数或两位数的 KB,而不是三倍数。 CouchDB 在一大口中对 JSON 进行编码/解码(即它不是从磁盘流式传输的。)
  • EC2(甚至 EBS)i/o 不仅对于数据库来说不太理想(它本身具有高延迟),而且它还会随着您的邻居生成与您竞争的未知 i/o 突发而波动。
  • CouchDB 是文件系统之上的文件系统。 .couch 文件看起来很像文件系统本身。所以你正在成倍地降低效率。 .couch 文件和元数据需要对存储进行随机 i/o; 阅读文档需要.couch 中的随机 i/o文件。您可能会看到磁盘延迟的影响成倍增加。您可以比较阅读文档与阅读等效的 MySQL 行,而不是比较阅读文档与阅读文件系统文件。

  • 请注意,我并不是说 CouchDB 实际上很快并且您的结果不正确。恰恰相反:CouchDB 比许多人预期的要慢。一定程度上还有改进和优化的空间;但主要是 CouchDB 认为这些成本对于它带来的更广泛的好处是值得的。

    CouchDB 未能通过基准测试,并在严格的测试中脱颖而出。我建议您接下来在 CouchDB 上对完整负载进行基准测试,模拟您对多个并发访问的预期需求,并尽可能接近您对它的实际需求。这将是一个更有帮助的测试,一般来说,CouchDB 在那里的表现令人印象深刻。

    也就是说,CouchDB 是一个特定于域的数据库,因此很明显您也在寻找不同的工具。

    关于performance - 为什么从 CouchDB 读取数据这么慢? (1.5MB/s左右),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9807200/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com