2011-01-09 17 views
1

私はフラットファイルデータベースを持っています(私が知っているグロス - 最悪の部分は1.4GBです)、私はそれをMySQLデータベースに移動しています。問題は私がこれをやることについてどうやって行くのか分からないことです。私はここで関連するすべての質問をチェックしましたが、私がやりたいことや私のデータベースが現在どのように設定されているかは関係ありません。フラットファイルデータベースをMySQLデータベースに転送

私の現在のフラットファイルデータベースは、通常のMySQL行が独自のファイルで、MySQLテーブルがディレクトリとなる場所に設定されています。たとえば、Jonという名前のユーザーがいる場合、/ members /という名前のディレクトリにユーザーのファイルがあります。そのファイル内には、ユーザーid、ランクなど、ユーザーがタブで区切って、すべて別々の行(userid \ t4)で表示するなど、さまざまな情報が表示されます。

そこでここでは例のユーザファイルです:それでは、どのように私は上記のは自分の行とMySQLでのフィールドに変換することができます

userid  4 
notes  staff notes: bla bla staff2 notes: bla bla bla 
username Example 

?可能であれば、一度に何千ものファイルを作成できますか?

ありがとうございました。

+0

これはperlに関する些細なスクリプティング攻撃のように思える、PHP、 Pythonなど。 – gahooa

+0

これは私が元々やっていたものですが、MySQLで速く実行する方法があるかどうか疑問に思っていました。 – Jon

答えて

1

これはかなり些細なスクリプト問題のようです。

userディレクトリの読み取り方法については、userテーブルの例(疑似コード)を参照してください。

明らかに、あなたはそれがエラーチェックで、少しより堅牢になりたい/データの検証が、ちょうど視点のために、以下を参照してください:

for file in list_dir('/path/to/users/'): 
    line_data = dict() 
    for line in open(file, 'r'): 
    key, value = line.split("\t", 1) 
    line_data[key] = value 

    mysql_query(''' 
    INSERT INTO 
     users 
    SET 
     user_id = $1, 
     foo = $2, 
     bar = $3 
    ''', 
    (
     line_data['user_id'], 
     line_data['foo'], 
     line_data['bar'] 
    ) 
) 
0

は、LOAD DATA INFILEはそう、CSVファイルに使用され、あなたはそうではありませんされています

  • は、列(ユーザーID、ユーザー名の名前を削除し、1つのCSVファイルにディレクトリ内のすべてのファイルをマージ.. 。)、区切り記号([TAB]、 ";"、...)で区切って区切って、CVSとしてインポートします。
  • あなたが持っているすべてのディレクトリのループ。

このジョブをすべて行う "愚かな"プログラム(phpはうまくいきます)を書いてください。

+0

LOAD DATA INFILE以外の方法はありますか? – Jon

関連する問題