如何决定是否在RavenDB中的索引中存储字段?

时间:2015-08-21 14:31:56

标签: performance indexing storage ravendb diskspace

在RavenDB 3.x文档中,有多篇文章涉及在索引中存储字段值的概念,因此变换器可以从索引本身获取此数据,而不必加载文档。

但是,没有提到这样做的确切含义,而且我不清楚在哪种情况下这会带来好处而不是过多的开销。

文档基本上是这样说的:

  

预测和存储字段

     

如果投影功能仅需要存储的字段,则不会从存储中加载文档,并且所有数据都将直接来自索引。在不需要整个文档的情况下,这可以提高查询性能(通过所使用的磁盘空间的成本)。

Indexes/Querying/Projections中的indexes/storing data in indexes或多或少相同

阅读时我读了它,它并不值得关注,但在阅读 Query Flow 时,我更加确信使用它。

如果我理解正确,那么当使用带有存储的投影+索引时,你可以让查询根本无法从存储中检索文档,但代价是磁盘空间?

假设这是正确的:

  1. 关于磁盘空间的额外使用,我可以期待多少?任何人都可以在这上面贴一些数字吗?
  2. 这是多少高效的表现?这些值如何存储在索引中呢?读取存储的数据与存储的文档有多贵?
  3. 我认为直观的是,如果您的文档包含10个数字字段,并且您将其中4个存储在索引中,则需要大约40%的磁盘空间?但是,在使用该索引查询文档时,您还需要只读取40%的文档吗?

1 个答案:

答案 0 :(得分:3)

一般来说,不要打扰。 这适用于非常具体的情况,通常不值得。除非你有非常大的文档(数百KB),否则在不使用索引存储或使用变换器的情况下使用投影会更容易。