저는 현재 100 만 개가 넘는 항목 (트윗)의 증가하는 데이터베이스를 시각화하고 파이썬에서 병목 현상을 일으키는 프로젝트에 대해 잘 모르고 있습니다. 얼굴.Python의 대규모 MongoDB 컬렉션에 대한 빠른 쿼리
일부 세부 정보 :
데이터베이스는 시간, 텍스트 등 난에 질의하고 모든 필드에 색인이 생성됩니다.
컬렉션의 각 항목에는 거의 100 개의 중첩 된 필드가 포함 된 매우 크고 복잡한 구조가 포함되어 있습니다.
시각화는 저장된 데이터의 일부만 필요하기 때문에 적은 수의 열만 투영합니다.
쿼리 된 필드는 String, float32/64, date 및 id 유형입니다.
저는 PyMongo와 Monary를 모두 사용했습니다. 둘 다 실망스러운 결과를 보았습니다.
Mongo 쉘에서 파이썬 내에서 처리 시간을 가깝게하는 확실한 해결책이 있습니까? Idea는 Mongo가 Python으로 전송하기 전에 쿼리 결과를 별도의 컬렉션에 저장하고 Python/Pandas 대신 Javascript 기반 솔루션을 사용하는 방법을 고려했습니다.
Monary를 사용하는이 쿼리 (10 초 동안)는 2878 개의 행을 반환하고 76 초가 걸립니다.
start_time = datetime.datetime.strptime('2017-09-09 00:00:00', '%Y-%m-%d
%H:%M:%S').replace(
tzinfo=timeZone).astimezone(tz.tzutc())
end_time = datetime.datetime.strptime('2017-09-09 00:10:00', '%Y-%m-%d
%H:%M:%S').replace(tzinfo=timeZone).astimezone(
tz.tzutc())
columns = ['created_at']
type = ['date']
arrays = mon.query(
'streamingTwitterDB',
'streamingTwitterDB',
{'created_at': {'$gt': start_time, '$lte': end_time}},
columns,
type
)
df = numpy.matrix(arrays).transpose()
df = pd.DataFrame(df, columns=columns)
mongo에서 나는 거의 즉시 한 시간 동안 쿼리 할 수 있습니다.
이 모듈은 꽤 유망 해 보입니다! 타이밍 비교를 했습니까? – MaxU
예, 빠릅니다. PyMongo (문서를 NumPy 배열의 행으로 변환하기 전에 dicts로 변환해야 함)와 Monary의 오버 헤드 (필드 이름과 일치하는 n- 제곱 알고리즘으로 인해 큰 문서에서 속도가 느려짐)를 피할 수 있습니다. NumPy 열). 시도해보고 어떻게 효과가 있는지 알려주세요! –
이 라이브러리는 변환하기 전에 컬렉션 내의 필드를 쿼리 할 수 있습니까? 데이터가 전체적으로 투영되거나 변환되는 예제 만 찾을 수 있습니다. –