我目前想为RavenDB创建一些静态索引以获得更好的性能。
但是当我经历RavenDB documentation时,有一个特定的句子真的让我重新考虑我原来的意图。
因此,我们建议将应用程序中的大多数操作基于静态索引,或者至少确保动态索引创建的临时索引已提升为永久索引。
好吧,因为我的解决方案非常庞大,我甚至不知道我需要哪些索引。这将迫使我查看整个解决方案并为每个其他操作创建静态索引。我可能夸大了,但仍然......我不知道所有这些工作是否值得。
我的问题是:
如何确保临时索引已提升为永久索引?
修改
我学到的是一些索引被提升为持久化的永久/静态自动索引,即使重新启动Raven服务器也不会丢失它们。我理解的是它取决于服务器Configuration options
。所以我的一些索引已被提升为永久性,并且重启后我只丢失了那些临时索引。不过我的问题仍然存在。
EDIT2:
我在原始问题中进行了编辑并收集了更多信息。把我当成一个非常愚蠢的人。我需要解释。请不要将我与"permanent/static"
静态索引是永久性的,但永久索引不一定是static
。也许我在问错误的问题。我只是想确保RavenDb服务器不必为每次查询调用创建新的动态索引,我每分钟都不会调用一百次。
RavenDB可以分析查询并动态创建一个临时索引,该索引会在被处理之前保留一段时间。
我从Ravendb服务器配置选项中了解到:
当您在一分钟内使用它一百次时,索引会被提升为永久性(默认值)。如果它仍然是动态的并且它在20分钟内没有使用它就会被删除。(默认)。 但是,如果我有疑问将会被使用,我不知道怎么办? 每 TempIndexPromotionThreshold TempIndexPromotionMinimumQueryCount / 2 。所以也许我现在的问题是:
持续使用但动态索引和永久索引之间是否存在显着差异?
答案 0 :(得分:1)
该语句的含义是,如果应用程序正在大量使用动态/临时索引,则最好将其转换为静态/永久索引。
答案 1 :(得分:1)
动态索引(经常使用与否):
与静态索引相反。静态索引:
是动态索引也有优先权,但静态索引是维护的第一优先,其次是动态索引。
您还说您的应用程序非常“大”(高容量/高品种/高吞吐量?),并且我认为开发人员计算机上必定存在一些开发周期。通过开发人员测试,您可能已经为您创建了索引。接下来的步骤是如何将它们转移到生产中。
您有3个选择:
推荐的方法是,如果您事先知道要编制索引的内容,最好创建一个实现AbstractIndexCreationTask<T>
的类,然后注册它。 creating a static index in code的文档可在RavenDB网站上找到。
这样,您的环境中也将拥有一组一致的索引。