0

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

但是当我浏览 RavenDB文档时,有一个特定的句子真的让我重新考虑了我的初衷。

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

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

我的问题是:

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

编辑:

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

编辑2:

我对原始问题进行了编辑并收集了更多信息。把我当成一个真正愚蠢的人。我需要解释。请不要将我与诸如此类的事情混淆"permanent/static"

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

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

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

当您在一分钟内使用它一百次时,索引将被提升为永久(默认值)。如果它保持动态并且在 20 分钟内未使用,则会被删除。(默认)。但是,如果我有将要使用的查询,我不知道 TempIndexPromotionMinimumQueryCount / 2 per TempIndexPromotionThreshold。所以也许我现在的问题是:

经常使用但动态的索引和永久索引之间有什么显着区别吗?

4

2 回答 2

1

该声明的意思是,如果您的应用程序大量使用动态/临时索引,最好将其转换为静态/永久索引。

于 2012-12-14T15:33:58.143 回答
1

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

  1. 始终由RavenDB创建,因为无法使用现有的动态/静态索引来回答您的查询
  2. 只存在于内存中,不存在于磁盘中。
  3. 如果 Raven 服务器重新启动,将存在
  4. 如果使用量未超过特定的查询阈值/经过的时间,将被删除
  5. 与静态索引相比,维护资源的优先级较低

与静态索引相反。静态索引:

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

是的,动态索引也有优先级,但静态索引在维护中是第一优先级,其次是动态索引。

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

你有3个选择:

  1. 让 RavenDB 自己解决(动态 -> 静态)
  2. 将定义从环境复制/粘贴到环境。(静止的)
  3. [推荐] 在代码中创建索引。(静止的)

推荐的方法是,如果您提前知道要索引什么,最好创建一个实现AbstractIndexCreationTask<T>然后注册它的类。在 RavenDB 网站上可以找到在代码中创建静态索引的文档。这样,您还将在您的环境中拥有一组一致的索引。

于 2014-04-24T13:14:31.313 回答