php - MongoDB 搜索 - 自动完成

标签 php mysql performance mongodb autocomplete

我们目前正在 MySQL 上运行我们的应用程序,并计划迁移到 MongoDB。我们已经移动了一些部分,但在 MongoRegex 性能方面存在问题。

我们有一个自动完成搜索框,它连接 6 个表(索引/非索引字段)并在 mysql 上超快地返回结果。同样的事情在 MongoDB 上执行起来真的很慢。仅一次收集就需要大约 2.3 秒。用户必须等待很长时间。连接时间为 0.064 秒。查询时间 2.36 秒。我做了一些谷歌搜索,但找不到完美的答案。每个人都说 MongoRegex 很慢。如果这是真的,其他公司是如何克服这个问题的?

在 MongoDB 上运行时提高自动完成性能/体验的最佳方法是什么?

最佳答案

首先,您必须仔细设计查询。仔细选择正确索引的字段并进行相应的设计。此外,如果您使用的是正则表达式,请确保以强制查询使用索引字段的方式编写正则表达式。像/^prefix/这样的东西就可以了。 [请参阅此链接:http://docs.mongodb.org/manual/reference/operator/query/regex/#index-use ]

我见过许多使用 mongodb 范围查询的实现,但我不确定那是否是最好的,因为即时结果是关键。

除此之外,我还看到有人推荐前缀树。它有效地将前缀存储在一个字段中,然后将所有以该特定前缀开头的单词作为数组存储在下一个字段中。这个解决方案听起来很有说服力而且速度很快,因为前缀字段应该被索引,但您还必须考虑存储因素。

关于php - MongoDB 搜索 - 自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30138706/

相关文章:

ios - Unity 在 iPhone 6 Plus 上性能缓慢

php - echo 中的 if !empty 表达式

php - 显示带有异常消息的变量值

javascript - jquery 倒计时今天日期

php - 显示错误数据的 mysql 代码问题

php - 插入然后更新内部循环

php - JQuery UI 自动完成 JSON php 输出格式

mysql - 在具有非主键的列上使用 SqlAlchemy 和 MySQL 设置 AUTO_INCREMENT?

mysql - NestJs TypeORM 无法连接到 mysql

c++ - 矩阵的特征有效传递