gpt4 book ai didi

mobile - 有没有办法在 couchdb View 中发出附件数据

转载 作者:行者123 更新时间:2023-12-03 23:43:09 25 4
gpt4 key购买 nike

我发现在网站上显示图像数据时使用 CouchDB 附件非常有用。但是,当我将数据库复制到移动环境时,运行 View 然后必须循环浏览文档以访问其附件的效率非常低。在 iOS/Android 平台上,将数据存储为常规 BLOBS 并通过一个 View 查询访问所有二进制数据似乎更有效, View 查询首先发出所有文档数据。有没有办法在我的 map 函数中读取附件数据,并将其包含在发出语句中。我看到通过 _attachments 提供了附件信息,但这并不能访问数据。

更新
在文档本身而不是附件中使用 BLOBS 的一个主要缺点(未在已接受的答案中详细说明)是,当您更新文档时,您必须获取整个文档,然后将其发回。如果您不使用附件,则必须获取所有二进制数据,而附件则不需要。如果您要对文档进行更新,那么使用附件确实是设计二进制数据的唯一合理方法。

最佳答案

你发现了一个很好的问题!

什么是附件?

是二进制数据吗?好吧,您可以对数据进行 Base64 编码并将其直接存储在文档中(类似于 data URI )。你当然可以有文本或应用程序/json 附件。所以不是这样。

是直接下载吗?并不真地。 Show and list functions让您直接提供文档的任何部分(或基于文档数据构建新内容)。

那么什么是附件呢?对我来说,附件的工作定义是,在 View 、显示和列表中无法访问的数据 .这是一种优化。您无法从服务器端 Javascript 访问它;但是您可以提高速度,因为 CouchDB 不必编码和解码大量数据。

有时我也像C指针一样思考它。使用指针非常快。它们是一种小而简单的数据类型。然而,代价是额外的编程工作,因为它们必须被取消引用才能获得数据。你总是有一个额外的步骤。这就是速度的代价。 CouchDB 附件是类似的。

如果您的数据很小(可能是网站图标、视频卡片、文本)并且适合整个文档,那就去吧!不要附上它们。然而,对于较大的数据,例如大多数图像和其他文件,附件就变得必要了。

多次获取

假设您查询一个 View 并获得 20 行以显示在屏幕上。现在您必须获取 20 个图像附件。

程序员本能地认为这是不可取的。而且,是的,这可能会破坏交易。然而,在许多情况下,这是一个很好的权衡。 Donald Knuth 说:“过早的优化是万恶之源。”从由 SSD 支持的本地服务器进行 21 次总提取会杀死我们吗?

在许多情况下,进行 20 次查询就可以了。关键是要同时制作它们。 CouchDB(和移动 couchbase)针对并发请求进行了优化。您会发现获取 20 张图片所需的时间与获取一张图片所需的时间基本相同。

在每种语言中,同时获取 HTTP 资源的工作方式不同。在 Javascript 中,很容易,只需几行代码即可 async.js .

// Assuming fetch_image(), and images = ['alice.png', 'bob.png',  etc.]
async.forEach(images, fetch_image, function(er) {
if(er) throw er
console.log('Fetched 20 images!')
})

关于mobile - 有没有办法在 couchdb View 中发出附件数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10036736/

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