Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.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
Python MongoDB Atlas查询需要很长时间才能完成_Python_Python 3.x_Mongodb - Fatal编程技术网

Python MongoDB Atlas查询需要很长时间才能完成

Python MongoDB Atlas查询需要很长时间才能完成,python,python-3.x,mongodb,Python,Python 3.x,Mongodb,我将数据存储在MongoDB Atlas集群上,但我注意到,当我执行一个非常简单的查询时,我的脚本将需要5秒钟以上的时间来执行。既然我需要尽可能快的查询,有人能帮我找到我是否做错了什么吗?我的网速没有问题,所以这不是问题所在 平均记录如下所示: {"_id":{"$oid":"id"},"datetimeraw":"202007061535","rate":{"$nu

我将数据存储在MongoDB Atlas集群上,但我注意到,当我执行一个非常简单的查询时,我的脚本将需要5秒钟以上的时间来执行。既然我需要尽可能快的查询,有人能帮我找到我是否做错了什么吗?我的网速没有问题,所以这不是问题所在

平均记录如下所示:

{"_id":{"$oid":"id"},"datetimeraw":"202007061535","rate":{"$numberInt":"950"},"amount":{"$numberDouble":"246.900944"},"datetime":{"$date":{"$numberLong":"1594049700000"}}}
现在我一共有1000张唱片。问题是我知道我可能会达到20/30k的记录。但是如果我现在有问题,我担心有那么多的记录,这将是无法忍受的。这个问题可能是由MongoDB Atlas本身引起的吗

这是我的密码:

import numpy as np
import pandas as pd
from pymongo import MongoClient

client = MongoClient('mongodb+srv://user:pass@test-2liju.mongodb.net/test?retryWrites=true')
db = client.mydata

pData = pd.DataFrame(list(db.mydata.find()))

print(pData)
此脚本在不到1秒的时间内运行(数据集是只读公共数据集,因此您可以自己尝试):

import pymongo
from datetime import datetime
c=pymongo.MongoClient(host="mongodb+srv://readonly:readonly@demodata.rgl39.mongodb.net/demo?retryWrites=true&w=majority")

db=c["demo"]
zipcodes=db["zipcodes"]
start=datetime.utcnow()
l=list(zipcodes.find())
end=datetime.utcnow()
print(f"Duration: {end-start}")
print(f"Docs count: {len(l)}")

在我的笔记本电脑上,不到一秒钟就检索到了29353份文档。你能试试看,你是否还能看到6秒的延迟。你是在自由层上运行吗?此数据集正在M10上运行。

尝试相同的查询结果,但使用记录的_id获取它。如果速度很快,您在查询记录的字段上缺少索引。问题不是我需要其中一个,而是我需要所有的索引,以便在pandas DataFrame上使用它们,那么您缺少了拥有数据库的意义。。。您应该利用数据库功能来运行查询,而不是将所有内容都放在内存中的数据帧中并从中选择数据。这样做总是比选择特定的DB条目慢。如果你想要像内存中一样快速的东西,我建议移动到像Redis/memcache这样的东西。。。不使用MongousRedis是一种选择,但是当数据量变大时,MongoDB不是比Redis更好吗?因为Mongo没有模式?Redis列表允许您在其中放置任何想要的对象。但同样正确的工具适合正确的工作,我相信你只需要让你的查询只获取数据的一部分。我没有办法让查询更具选择性,我需要存储数据并使用它;我所做的基本上是从一个脚本中获取数据,然后从另一个脚本中检索数据。我不认为1000条json记录太多,无法从客户端处理。如何将数据存储在数组中?我基本上会在一个文档中存储更多的记录,比如{'datetime':'2020-7-6','data':[]}。它会使它更快吗?每次需要5秒吗?我希望第一次抓取会很慢,而随后的抓取会更快?能否将处理节点移近数据库?e、 g.通过将ec2节点放置在与db相同的区域,添加了一个在1秒内处理29k条记录的示例。看上面,现在我没有时间执行查询了。我仍在试图找出问题是否出在我的wifi上,但现在它在不到1秒的时间内就能正常工作