時刻は、Mongodbのクエリ時間、データの転送に使用された時間、ネットワークのラウンドトリップ、Pythonリストの操作で構成されます。それぞれを最適化することができます。
1つは転送するデータ量を減らすことです。あなたはreading_time
とscore
しか必要ないので、それらを取り出すことができます。平均的な文書サイズが大きい場合、このアプローチは非常に効果的です。
earnings = self.collection.find({}, {'reading_time': True, 'score': True})
秒。 Mongoは限られた量のデータを一括して転送します。データには最大60k行が含まれ、データの転送には複数回かかります。往復回数を減らすようにcursor.batchSizeを調整できます。
第3に、可能であればネットワーク帯域を増やしてください。
第4位。あなたはnumpy array
を利用して加速することができます。これはPythonのリストよりも速いCのような配列データ構造です。固定長配列を事前に割り当て、インデックスで値を代入します。これにより、list.append
に電話する際の内部調整が回避されます。
count = earnings.count()
score = np.empty((count,), dtype=float)
reading_time = np.empty((count,), dtype='datetime64[us]')
for i, earning in enumerate(earnings):
score[i] = earning["score"]
reading_time[i] = earning["reading_time"]
df = pd.DataFrame()
df['reading_time'] = reading_time
df['score'] = score
出典
2016-12-15 15:18:29
gzc
各リストをdata_dicに事前に割り当て、リストに常に追加するのではなく、特定のインデックスで要素を単に変更することも可能です。また、複数のコアを利用する場合は、マルチスレッドを導入することもできます。 –
try [MongoDB aggregation](https://docs.mongodb.com/manual/aggregation/) – Valijon