如何在Django RESTful API中提高200万数据查询速度

时间:2017-03-31 04:51:35

标签: django mongodb database-performance

我有200万条记录的科研出版物数据。我使用django restframework编写apis来搜索titleabstract中的数据。在使用12 seconds作为db时,这会带我postgres,但如果我使用MongoDB作为db,它会下降到6seconds

但即使是6秒也会让很多用户等待我。我将titleabstract编入索引,但是抽象索引失败了,因为一些抽象文本太冗长了。

这是使用MongoDB(MongoEngine作为ODM)的django模型:

class Journal(Document):
    title = StringField()
    journal_title = StringField()
    abstract = StringField()
    full_text = StringField()
    pub_year = IntField()
    pub_date = DateTimeField()
    pmid = IntField()
    link = StringField()

如何提高查询性能,什么堆栈使搜索和检索更快??

1 个答案:

答案 0 :(得分:4)

关于使用Postgres优化Django ORM的一些指示:

  • 在经常搜索的字段上使用db_index=True,并在条目之间有一定程度的重复,例如“title”。
  • 使用values()values_list()仅从QuerySet中选择所需的列。
  • 如果您在任何这些列中进行全文搜索(例如contains查询),请记住Django支持full text search directly on a Postgres database
  • 使用print queryset.query检查进入数据库的SQL查询类型以及是否可以对其进行改进。
  • 许多Postgres优化技术都依赖于可以使用RawSQL表达式在Django中进行的自定义SQL查询。
  • 请记住,在数据库中搜索数据有很多种方法,无论是关系数据还是非关系数据。在你的情况下,MongoDB并不比Postgres“更快”,它只是在查询你真正想要的东西方面做得更好。