フォルダを監視してデータベースにインポートする


1

私は、新しいファイルがフォルダ内に作成されるときはいつでも、それが自動的に内容を読んでそれをデータベースにプッシュするようにシステムを設定しようとしています。これらのファイルは主に.txtファイルですが、私はそれらを.csvファイルに変換する必要があるかもしれません。

現在使用しています 番犬 これはとてもうまくいきます。特定のフォルダを「監視」し、ファイル(/フォルダ)が作成、編集、または削除されるたびにイベントを作成します。私の質問は、このイベントを処理するための最善/最も効率的な方法は何ですか?

ファイルは毎日特定の時間に(毎日同じ時間に)追加され、1日に100から1000の異なるファイルの範囲になります。 すべて ファイルが数分以内にフォルダに追加されます。

マイコード、 サイコプグ

import sys
import time
import logging
import psycopg2
import pprint
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

def main():
    conn_string = "host='localhost' dbname='dbname' user='user' password='password'"
    print "Connecting to database\n ->%s" % (conn_string)
    conn = psycopg2.connect(conn_string)
    cursor = conn.cursor()
    cursor.execute("COPY trades FROM 'filepath/test.txt' DELIMITERS ',' CSV;")
    records = cursor.fetchall()
    pprint.pprint(records)

if __name__ == "__main__":
    main()
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    path = sys.argv[1] if len(sys.argv) > 1 else '.'
    event_handler = LoggingEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

ご覧のとおり、スクリプトはデータベースに接続してインポートします。 test.txt (静的な場所)それから、それはまたフォルダを見て、何が起こっても印刷します。これら2つのイベントはまだ接続されていません。したがって、私の質問、より具体的には、私は呼び出すべきです main() 毎回新しい on_create トリガされます(したがって、毎回新しい接続)?または、データベースへの接続を作成してからフォルダを監視し(つまり、開いている接続を維持しながら)、呼び出します cursos.execute 毎回新しい on_create トリガーされます。

最も効率的な方法は何でしょうか。
(もちろん filepath/test.txt 見つかったファイルのパスに変更されます)

データベース:PostgreSQL。 Pythonバージョン2.7

回答:


0

私はつながりを保ちます。気になる人は、10分以内に新しいファイルが届かない場合はタイムアウトを設定して、接続を閉じて、次回必要になったときに再作成します。

接続を開いたままにしておく場合、トランザクションを開いたままにしないように注意することが非常に重要です。最後の作業項目をコミット(またはロールバック)して、トランザクションがトランザクション内に入るようにする必要があります。 <IDLE> 状態。これを怠ると、データベースサーバのパフォーマンスに問題が発生し、望ましくないディスク容量の使用が増加します。

トランザクションを調べて、トランザクションがアイドル状態であることを確認できます。 pg_stat_activity PostgreSQLで表示します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.