首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Data Mongo @Indexed多次创建索引

Spring Data Mongo @Indexed多次创建索引
EN

Stack Overflow用户
提问于 2019-01-09 12:14:05
回答 3查看 2.9K关注 0票数 3

我在类级别上使用@Indexed注释,使用Spring,然后使用@Document

我从日志中注意到,每次建立到Mongo的连接时,都会执行索引的创建。

这是正常行为吗?它不会在数据库上造成过载吗?

请让我了解@Indexed注释的生命周期,如果已经创建了索引,是否有可能忽略索引创建?

我找不到任何这方面的文件。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-09 12:50:44

使用@Indexed确保对创建声明索引的实体的第一次访问。Spring的IndexOperations调用createIndex(…)。通常,一旦索引与给定的规范一起存在,这将是一个无操作。通常适用于启动和运行一段时间的应用程序。

AWS相当清理那些不需要释放资源的实例。当您每分钟打一次createIndex(…)电话时,我不确定这会如何影响createIndex(…)的性能。如果你没有看到负面影响,那么事情可能会好起来。

MongoDB上的索引创建准备独占锁(IX,意图是独占锁定),并在创建索引期间升级该锁。如果有足够的进程试图调用createIndex(…),这可能会产生影响。

有什么可供选择的?

  • 保持一个持久服务实例(这在某种程度上与AWS Lambda相矛盾)
  • 完全删除@Indexed并将索引创建移动到带外进程(外部创建索引)
  • 以编程方式删除@Indexed并创建索引(这是建议的方法,使您具有最大的灵活性。您可以检查所需的索引是否已经存在,并跳过索引创建)。

另请参阅:

票数 3
EN

Stack Overflow用户

发布于 2020-06-11 12:23:06

在2.2.x版本中,您可以使用名为- spring.data.mongodb.autoIndexCreation: true/false的属性控制在服务器启动时创建索引的行为

票数 1
EN

Stack Overflow用户

发布于 2019-05-06 08:34:40

我知道,无论您做什么,应用程序都会调用命令来创建Index (新建或已经退出)。这个过程对应用程序运行和确保一切都有好处。关于这个命令在MongoDb中做什么,让我们更多地检查它

  1. 索引是做什么的,这是如何工作的(index)排序:复制并给它一个命令(所有有规则的东西都将有助于加快搜索速度),可能是B树或其他结构。
  2. 命令createIndex将做什么?https://jira.mongodb.org/browse/SERVER-12699 https://jira.mongodb.org/browse/SERVER-10879这两个问题说明了这一点,它不会做已经退出的相同的事情。所以逻辑很简单。

应用程序:我想要一些东西(创建索引并确保它在那里),~>,我应该调用CreateIndex

MongoDb:接受命令:-我看到它是新的:创建它-我看到它是复制的:噢,转储操作,我会跳过这个,让你知道。

这是我对这个问题的快速研究

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54109916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档