我有一个 200 万条记录的科研出版物数据。我使用 django restframework 编写了用于在 title
和 abstract
中搜索数据的 api。在使用 postgres
作为数据库时,这花费了我 12 秒
,但是如果我使用 MongoDB
作为数据库,它会下降到 6 秒
。
但对我来说,即使是 6 秒,等待用户的时间也很长。我索引了 title
和 abstract
,但是摘要索引失败了,因为一些摘要文本太长了。
这里是使用 MongoDB 的 django 模型(MongoEngine 作为 ODM):
class Journal(Document):
title = StringField()
journal_title = StringField()
abstract = StringField()
full_text = StringField()
pub_year = IntField()
pub_date = DateTimeField()
pmid = IntField()
link = StringField()
如何提高查询性能,什么堆栈可以使搜索和检索更快?
最佳答案
关于使用 Postgres 优化 Django ORM 的一些建议:
- 在经常搜索的字段上使用
db_index=True
,并且在条目之间有一定程度的重复,例如“标题”。 - 使用
values()
和values_list()
从 QuerySet 中仅选择您想要的列。 - 如果您要在任何这些列中进行全文搜索(例如
contains
查询),请记住 Django 支持 full text search directly on a Postgres database . - 使用
print queryset.query
检查进入数据库的 SQL 查询类型,以及是否可以对其进行改进。 - 许多 Postgres 优化技术依赖于可以在 Django 中使用
RawSQL
表达式进行的自定义 SQL 查询。 - 请记住,有很多方法可以在数据库中搜索数据,无论是关系型数据还是非关系型数据。在您的情况下,MongoDB 并不比 Postgres“更快”,它只是在查询您真正想要的内容方面做得更好。
关于django - 如何在Django RESTful APIs中提高200万条数据的查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43132686/