django - 如何在Django RESTful APIs中提高200万条数据的查询速度

标签 django mongodb database-performance

我有一个 200 万条记录的科研出版物数据。我使用 django restframework 编写了用于在 titleabstract 中搜索数据的 api。在使用 postgres 作为数据库时,这花费了我 12 秒,但是如果我使用 MongoDB 作为数据库,它会下降到 6 秒

但对我来说,即使是 6 秒,等待用户的时间也很长。我索引了 titleabstract,但是摘要索引失败了,因为一些摘要文本太长了。

这里是使用 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/

相关文章:

MYSQL 复制缓慢但突然增加,然后在 mysql Slave 中再次缓慢无法

从数据库填充 Django Dropdown

python - 变量不存在 : Failed lookup for key [val2] in u'None'

mongodb - Mongodb 中的投影无法正常工作

java - 我们如何解决: "the method insert(DBObject[]) in the type DBCollection is not applicable for the arguments (BasicDBObject)?

MySQL按日期大间隔查询

MySQL - INSERT 查询需要很长时间

django - 使用 Oauth 和 Python 授权应用程序

django - BooleanField 中的 'default=True' 有什么意义

javascript - mongodb nodejs - 转换循环结构