为什么RavenDB在索引过程中读取所有文档而不仅仅是索引使用的集合?

mar*_*sks 5 ravendb

我有相当大的数据库,有大约260万个文档,我有两个集合,每个集合120万,其余的是小集合(<1000个文档).当我为小集合创建新索引时,需要花费大量时间来完成索引(因此临时索引是无用的).似乎RavenDB索引进程读取DB中的每个文档并检查是否应将其添加到索引中.我认为仅索引索引使用的集合会更好.

此外,当使用Smuggler导出数据并且我只想导出一个小集合时,它会读取所有文档,导出可能需要花费很多时间.同时使用RavenDB Linq API和索引的自定义应用程序可以在几秒钟内导出数据.

为什么RavenDB会像这样?也许有一些配置设置可能会改变这种行为?

mar*_*sks 1

看来我的问题的答案将在 RavenDB 3.0 中出现。阿延德 说:

\n
\n

在 RavenDB 2.x 中,您仍然需要为索引支付全部费用,但在 RavenDB 3.0 中情况并非如此。我们所做的\n是为了有效地优化流程,以便在这种情况下,\n我们将\n预加载参与相关集合的所有文档,\n并将它们直接发送以进行索引。

\n

我们通过利用 Raven/DocumentsByEntityName 索引来做到这一点。无论如何,它已经对数据库中的所有内容建立了索引。这是一个不错的小功能,因为它使我们能够真正利用我们很久以前所做的工作。使用一个索引来预先填充另一个索引是一个巧妙的技巧,也是我非常高兴的一个技巧。

\n
\n

这是完整的博客文章:http://ayende.com/blog/165923/shiny-features-in-the-depth-new-index-optimization

\n