RavenDB中的永久索引

时间:2012-12-14 15:10:30

标签: .net nosql ravendb

我目前想为RavenDB创建一些静态索引以获得更好的性能。

但是当我经历RavenDB documentation时,有一个特定的句子真的让我重新考虑我原来的意图。

  

因此,我们建议将应用程序中的大多数操作基于静态索引,或者至少确保动态索引创建的临时索引已提升为永久索引。

好吧,因为我的解决方案非常庞大,我甚至不知道我需要哪些索引。这将迫使我查看整个解决方案并为每个其他操作创建静态索引。我可能夸大了,但仍然......我不知道所有这些工作是否值得。

我的问题是:

如何确保临时索引已提升为永久索引?

修改

我学到的是一些索引被提升为持久化的永久/静态自动索引,即使重新启动Raven服务器也不会丢失它们。我理解的是它取决于服务器Configuration options。所以我的一些索引已被提升为永久性,并且重启后我只丢失了那些临时索引。不过我的问题仍然存在。

EDIT2:

我在原始问题中进行了编辑并收集了更多信息。把我当成一个非常愚蠢的人。我需要解释。请不要将我与"permanent/static"

之类的东西混淆

静态索引是永久性的,但永久索引不一定是static。也许我在问错误的问题。我只是想确保RavenDb服务器不必为每次查询调用创建新的动态索引,我每分钟都不会调用一百次。

  

RavenDB可以分析查询并动态创建一个临时索引,该索引会在被处理之前保留一段时间。

我从Ravendb服务器配置选项中了解到:

当您在一分钟内使用它一百次时,索引会被提升为永久性(默认值)。如果它仍然是动态的并且它在20分钟内没有使用它就会被删除。(默认)。 但是,如果我有疑问将会被使用,我不知道怎么办? 每 TempIndexPromotionThreshold TempIndexPromotionMinimumQueryCount / 2 。所以也许我现在的问题是:

持续使用但动态索引和永久索引之间是否存在显着差异?

2 个答案:

答案 0 :(得分:1)

该语句的含义是,如果应用程序正在大量使用动态/临时索引,则最好将其转换为静态/永久索引。

答案 1 :(得分:1)

动态索引(经常使用与否):

  1. 始终由RavenDB创建,因为无法使用现有的动态/静态索引来回答您的查询
  2. 仅存在于内存中,而不存在于磁盘上。
  3. 如果重启Raven Server,
  4. 如果使用情况未超过查询的某个阈值/已过去的时间,则会被删除
  5. 对静态索引的维护资源具有较低的优先级
  6. 与静态索引相反。静态索引:

    1. 是其中之一
      • 手动/自动提升的动态索引
      • 在Raven Studio中手动定义的静态索引
      • 由应用程序在.NET代码中创建并在RavenDB中注册
    2. 存储在磁盘上
    3. 如果Raven Server重新启动,将重新加载
    4. 永远不会被Raven Server自动删除
    5. 维护的优先级更高。
    6. 是动态索引也有优先权,但静态索引是维护的第一优先,其次是动态索引。

      您还说您的应用程序非常“大”(高容量/高品种/高吞吐量?),并且我认为开发人员计算机上必定存在一些开发周期。通过开发人员测试,您可能已经为您创建了索引。接下来的步骤是如何将它们转移到生产中。

      您有3个选择:

      1. 让RavenDB自行解决(动态 - >静态)
      2. 将定义从环境复制/粘贴到环境中。 (静态)
      3. [推荐]在代码中创建索引。 (静态)
      4. 推荐的方法是,如果您事先知道要编制索引的内容,最好创建一个实现AbstractIndexCreationTask<T>的类,然后注册它。 creating a static index in code的文档可在RavenDB网站上找到。 这样,您的环境中也将拥有一组一致的索引。