2016-12-23 62 views
0

15個の列と約100万行の大きなcsvファイルがあります。私はtinyDBにデータを解析したい。私が使用しているコードは以下の通りです:大きなcsvファイルをtinydbに解析するのにはいつもかかります

import csv 
from tinydb import TinyDB 

db = TinyDB('db.monitor') 
table = db.table('Current') 

i=0 

datafile = open('newData.csv', 'rb') 
data=csv.reader(datafile, delimiter = ';') 

for row in data: 
    table.insert({'WT_ID': row[0], 'time': row[1], 'MeanCurrent': row[2], 'VapourPressure': row[3], 'MeanVoltage':row[4], 'Temperature': row[5], 'Humidity': row[6], 'BarPressure': row[7], 'RPM': row[8], 'WindSector': row[9], 'WindSpeed': row[10], 'AirDensity': row[12], 'VoltageDC': row[13], 'PowerSec': row[14], 'FurlingAngle': row[15]}) 
    i=i+1 
    print i 

しかし、実際にはそれは本当にかかります。私は進捗状況を追跡するために変数を設定しました。最初の行は速く実行されましたが、現在は1時間以上経過しており、ほぼ1Hzのペースで約10000行を解析しました。

見つかりませんでした。何か類似しているので、どんな助けもありがとうございます

ありがとう

+0

これはおそらくhttp://codereview.stackexchange.com/に移動してください。おそらく、 '' insert_multiple() '' –

+0

をチェックアウトしてください。同じ問題がありました。秒)。 ujsonをインストールし、 'insert_multiple'を使用すると、私の挿入が大幅に増えました。正確には測定されませんが、50秒から1または2までのように...ここでは、 'insert_multiple'を使用することが重要です! – klaas

答えて

0

TinyDBが最適ですか? Transationalデータベースが必要で、TinyDBはドキュメント指向です。その上で、ドキュメントから:Wy not use TinyDB

あなたは、高度な機能や高い性能が必要な場合は、あなたがにデータを蓄積しているため、TinyDBはあなた

あなたのプロセスの実行が本当に遅いために間違ったデータベースですRAM。この問題を回避するには、csvを小さなトランクに分割してスクリプトを作成します。この方法では、各繰り返しの間にメモリをクリーンにすることができます。

tinyDBはこの量の情報を管理できません。

0

私はtinyDBを使用したことがないが、あなたは2つのオプションDB

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_sql.html

パンダが一括でCSVデータを読み込み、行ずつ読み込むよりも速くすることができますへ

  1. パンダの下に試みることができますfrom file

    1. 行単位ではなくチャンク単位でcsvファイルを読み込み、各行のinsert文の代わりにinsert文を作成します。
関連する問題