Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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
如何减少MongoDB';s内存消耗和提高其响应时间?还是Python中具有相同改进的变通方法?_Python_Mongodb_Memory_Time_Sqlperformance - Fatal编程技术网

如何减少MongoDB';s内存消耗和提高其响应时间?还是Python中具有相同改进的变通方法?

如何减少MongoDB';s内存消耗和提高其响应时间?还是Python中具有相同改进的变通方法?,python,mongodb,memory,time,sqlperformance,Python,Mongodb,Memory,Time,Sqlperformance,我使用的是“MongoDB v4.2.x”。我的服务器内存只有4GB,MongoDB的利用率超过了60%。我运行的是简单的查询,甚至不是聚合,而且响应时间太慢 问题:在查询MongoDB数据库时,如何减少内存消耗并提高响应时间 到目前为止的想法: MongoDB中是否有内存限制选项,以便加载的数据库中未使用的部分可以外包给磁盘 将“wiredTiger”缓存大小更改为1GB,但响应时间非常缓慢。还有其他MongoDB的改进吗 Python中是否有一种变通方法,而不是调整MongoDB本身

我使用的是“MongoDB v4.2.x”。我的服务器内存只有4GB,MongoDB的利用率超过了60%。我运行的是简单的查询,甚至不是聚合,而且响应时间太慢

问题:在查询MongoDB数据库时,如何减少内存消耗并提高响应时间

到目前为止的想法:

  • MongoDB中是否有内存限制选项,以便加载的数据库中未使用的部分可以外包给磁盘

  • 将“wiredTiger”缓存大小更改为1GB,但响应时间非常缓慢。还有其他MongoDB的改进吗

  • Python中是否有一种变通方法,而不是调整MongoDB本身


  • 如果您只是想提高响应时间并减少MongoDB占用的内存,一个解决方法是将MongoDB数据加载到pandas数据帧中,如下两个选项

  • PyMongo的bson模块:如果连接到MongoDB确实有问题,那么您可以将数据库(或者最多是您真正需要的确切部分)导出为bson文件,然后使用PyMongo的bson.decode_all()将整个bson文件读取到一个数据帧中。有关详细信息,请参阅

  • MongoDB集合:或者,如果您可能至少在开始时打开了MongoDB,则可以将MongoDB集合中的数据加载到DataFrame中,请参阅。加载后,关闭MongoDB以释放应用程序使用的内存

  • 在开始时加载数据库的额外时间是一次性成本。一旦将整个数据库放在一个数据帧中,就可以使用Python查询内存中的数据帧

    如何减少Python中的内存消耗和响应时间,以及其他事项:

    • 可以在运行Python脚本期间释放内存,请参见,也可以覆盖对象

    • 要避免不必要的对象复制,请使用参数“inplace”/“self assign changed objects/use”更改对象。若要使用其他技巧在原地更改对象,请使用其他技巧,即避免复制

    • 对于大规模操作,请尽可能将熊猫对象转换为numpy对象。Python是在numpy上构建的,在numpy上速度最快,pandas提供了更多(更舒适)的选项,但开销更大

    • 选择列表理解而不是df.apply()/df.iterrows(),请参阅

    当数据帧中有数据库时,还需要考虑:

    • (勾选此项)
    您可能需要在宽格式和长格式之间进行更改:

    • df.explode()/df.groupby(有关时间序列,请参见此处)
    • df.枢轴与df.熔体(=未剥离)

    要检查查询响应缓慢的原因,请使用。应包含有关内存用途的一些详细信息。请提供有关您的案例的更多信息。你是否使用索引?数据库和每个集合中有多少文档。蒙哥罗盘呢?你熟悉这个软件吗?没有什么灵丹妙药,没有什么秘密的
    optimizeMemory
    标志可以让你的查询快速进行。您需要分析您的使用情况以及它对服务器资源的影响。@Alexedim我的应用程序是instagram+airbnb的组合。是的,我有所有必要字段的索引。在我的数据库中,有80个集合,每个集合有10000条记录。不,我用的是mongobooster。我不知道Mongo Compass。@CodeCaster如何分析查询的使用?谢谢回答,让我用pandas DataFrame检查一下。