如何在Django RESTful API中提高200万数据查询速度
我有一个科研出版物的200万条数据记录。我使用django restframework编写API来搜索如何在Django RESTful API中提高200万数据查询速度,django,mongodb,database-performance,Django,Mongodb,Database Performance,我有一个科研出版物的200万条数据记录。我使用django restframework编写API来搜索title和abstract中的数据。当我将postgres用作db时,这需要12秒,但是如果我将MongoDB用作db,它将下降到6秒 但对我来说,即使是6秒也要等用户很久。我为标题和摘要编制了索引,但摘要索引失败,因为一些摘要文本太长 以下是使用MongoDB(MongoEngine作为ODM)的django模型: 如何提高查询性能,什么堆栈使搜索和检索更快?关于使用Postgres优化Dj
title
和abstract
中的数据。当我将postgres
用作db时,这需要12秒,但是如果我将MongoDB
用作db,它将下降到6秒
但对我来说,即使是6秒也要等用户很久。我为标题
和摘要
编制了索引,但摘要索引失败,因为一些摘要文本太长
以下是使用MongoDB(MongoEngine作为ODM)的django模型:
如何提高查询性能,什么堆栈使搜索和检索更快?关于使用Postgres优化Django ORM的一些建议:
- 对经常搜索的字段使用
db_index=True
,这些字段在条目之间有一定程度的重复,如“title”
- 使用
values()
和values\u list()
仅从查询集中选择所需的列
- 如果您在这些列中的任何一列中进行全文搜索(如
contains
查询),请记住Django支持
- 使用
print queryset.query
检查数据库中的SQL查询类型,以及是否可以对其进行改进
- 许多Postgres优化技术依赖于自定义SQL查询,这些查询可以在Django中使用
RawSQL
表达式进行
- 请记住,在数据库中搜索数据有很多种方法,无论是关系型还是非关系型。在您的情况下,MongoDB并不比Postgres“更快”,它只是在查询您真正想要的方面做得更好
+1以获取解释。我不赞成MongoDB胜过Postrges。当我尝试这两种方法时,我发现MongoDB的效果很好,就是这样。我使用db_index=True
进行索引,还使用values()
使检索更轻松,我甚至删除了API中使用queryset.count()
的“count”。让我用queryset.query
试试看发生了什么。我会在尝试之后进行更新。你发现MongoDB更快了吗?这太广泛了。根据您的查询、索引、硬件、可能的搜索后端、全文搜索等,可能存在多种可能性。但这就是我面临的问题。你能给我一个更好的方法来解决这个问题吗?或者任何建议都可以简化这个问题。回答你的快速问题:我也在Mac Pro硬件上使用全文搜索。我用postgres和MongoDB作为数据库进行了测试。请告诉我,你想知道更多的信息来解决这个问题。
class Journal(Document):
title = StringField()
journal_title = StringField()
abstract = StringField()
full_text = StringField()
pub_year = IntField()
pub_date = DateTimeField()
pmid = IntField()
link = StringField()