Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django RESTful API中提高200万数据查询速度_Django_Mongodb_Database Performance - Fatal编程技术网

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

如何在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

我有一个科研出版物的200万条数据记录。我使用django restframework编写API来搜索
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()