因此,我正在开发一款人工智能图像生成应用程序,并提出了全文搜索功能,该功能允许用户根据提示搜索所有生成的图像。问题是我们的图像集合超过 10 亿行。后端团队反驳说,他们过去尝试过这种方法,但性能不佳,因为集合/表太大,有时需要长达 8 秒的时间。现在我相信这可能是因为他们正在对超过 10 亿个表/集合进行全文搜索,但如果我们首先根据 userID 过滤它进行查询,然后对那个小得多的集合执行全文搜索,那么它的性能会很高,对吧?我只知道 SQL 数据库,所以我不确定,但 mongodb 也不相似吗?如果您知道更有效的方法来做到这一点,请提供您的建议🙏
是的,通过首先按用户 ID 过滤集合,然后对较小的文档子集执行全文搜索,可以提高大型 MongoDB 集合的全文搜索性能。但是,如果集合仍然很大,这种方法可能还不够。 您可能需要考虑使用专为高性能全文搜索而设计的专用搜索引擎,可以处理非常大的数据集。
MongoDB 可以检索具有特定 userID 值的文档的所有 GUID。如果 userID 字段已建立索引,则这是一个快速操作。然后,您可以从每个文档中请求提示字段。最后,您可以搜索提示字段集合。
但是,大型数据库上的全文查询需要标记化,而 MongoDB 并不是为此设计的。标记化创建单词到短语以及单词到文档的映射。为此,您需要将数据库文本和 GUID 输入到搜索引擎(例如 Solr 或 Elasticsearch)中。
以下是一些提高大型 MongoDB 集合全文搜索性能的其他技巧:
注意:在写入量很大的数据库中更新索引可能会降低性能,特别是当您的写入量多于读取量时。