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

为什么RavenDB在索引过程中读取所有文档,而不仅仅是索引使用的集合?,ravendb,Ravendb,我有一个相当大的数据库,有大约260万个文档,其中我有两个集合,每个集合120万个,其余的都是小集合(RavenDB实际上没有任何真正的“集合”概念)。所有文档几乎相同。它只需查看每个文档中的Raven实体名称元数据,以确定如何将内容分组,以便按类型查询并在management studio中显示“集合”页面 我不确定这一点的具体理由。我认为这与文档存储所使用的底层ESENT表有关。也许Ayende可以回答得更好。您的特定用例是很好的例子,说明了为什么可能会有不同的做法 您可以尝试使用多个数据库

我有一个相当大的数据库,有大约260万个文档,其中我有两个集合,每个集合120万个,其余的都是小集合(RavenDB实际上没有任何真正的“集合”概念)。所有文档几乎相同。它只需查看每个文档中的
Raven实体名称
元数据,以确定如何将内容分组,以便按类型查询并在management studio中显示“集合”页面

我不确定这一点的具体理由。我认为这与文档存储所使用的底层ESENT表有关。也许Ayende可以回答得更好。您的特定用例是很好的例子,说明了为什么可能会有不同的做法


您可以尝试使用多个数据库。您可以将大量文档放在一个数据库中,将其他所有内容放在另一个数据库中。当然,在索引相关文档、多重映射/缩减或其他需要将不同类型的文档放在同一个数据库中的情况下,您可能会遇到问题。

请参阅女士,我的问题的答案是RavenDB 3.0。Ayende说:

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

我们通过使用Raven/DocumentsByEntityName索引来实现这一点 已经为数据库中的所有内容编制了索引。这是一个很好的解决方案 小功能,因为它允许我们真正利用 我们很久以前就已经做过了。使用一个索引预填充另一个索引 这是一个巧妙的把戏,我对此感到非常高兴


下面是完整的博客帖子:

我希望Raven团队能够添加一个可选的“收藏”列表索引定义。如果该列表为空,则索引过程按原样工作。但是,如果该列表已定义,则索引只应考虑来自该列表的集合。这将显著提高性能,并且应该非常易于实现。我们与走私者有类似的问题。我们自己的实现使用Raven实体名称但与收集过滤相比,速度明显快于走私者。