2011-06-29 10 views
0

私はmysqlデータベースバックエンドで動作するdjangoサイトを持っています。私はadminユーザーのかなり大きいアップロードを受け入れて、一部のデータを一括インポートします。データは、データベースに必要な形式とは少し異なる形式で提供されるため、少し解析する必要があります。ファイルをディスクに書き込まずにMySql一括インポート

私はこのデータをcsvにピボットしてcStringIOオブジェクトに書き込むことができ、その後単にmysqlのバルクインポートコマンドを使用してそのファイルをロードすることができます。私は最初にディスクにファイルを書き込むことをスキップするのが好きですが、私はそれを回避する方法を見つけることができないようです。私は過去にpostgresqlでこの正確なことを基本的に行ってきましたが、残念ながらこのプロジェクトはmysql上にあります。

短い:私はに、同一の、類似のではなく、大きなログファイルを処理して対処しGenerator Tricks for Systems Programmersと呼ばれる優れたチュートリアルでは、あり

答えて

1

「バルクインポート」とは、LOAD DATA [LOCAL] INFILEの場合、最初にデータをいくつかのファイルに書き込む方法はありません。あなた(そして私)は本当に配列からテーブルを直接書きたいと思うでしょう。

しかし、LinuxのようないくつかのOSでは、RAM常駐のファイルシステムを使用することで、傷ついている部分を緩和することができます。私はこれらの人の1人をセットアップする方法を知るためのシステム管理者では不十分です。私は私のためにそれをするために私のISPの技術サポートを得なければならなかった。私が見つけたan articleそのかもしれない有益な情報があります。

HTH

+0

残念です。私はメモリ内のファイルシステムをセットアップすることができますが、それは私が対処したくない可動部分ですので、そうしないでしょう。ディスクへの書き込みのコストは、おそらく*悪い*ではありません。私はちょうどあなたがpostgresqlのCOPY操作のようにそれを処理することを望む – John

+0

ええ、それは悪くないです。そして、私はそれを1日に1回だけ行う必要があります。しかし、私がそのコードを見るたびに、私は自分の歯を磨いて苦労しなければなりません。省略は、MySQLの大きな穴です。 –

2

をオブジェクトのようにメモリのファイルを取り込み、何とかMySQLの一括インポート操作を使用することができますあなたの状況。ストリーム内の現在の(そしておそらく以前の)データだけにアクセスして必要な変換を実行できる限り、これはあなたのために働くかもしれません。

私はそれが非常に貴重なことができる異なったの考え方を紹介していると思うので、この宝石を多くの答えで言及しました。コンパニオンピースA Curious Course on Coroutines and Concurrencyがあります。頭がひどく捻れてしまうことがあります。

+0

+1すばらしいリンク! –