将平面文件数据库传输到MySQL数据库

问题描述:

我有一个平面文件数据库(是的,我知道 - 最糟糕的部分是1.4GB),而且我正在将它移动到MySQL数据库。问题是,我不知道如何去做这件事 - 我已经检查了这里的所有相关问题,但没有涉及我想要做什么,也没有涉及我的数据库目前如何设置。将平面文件数据库传输到MySQL数据库

我目前的平面文件数据库设置为正常的MySQL行是它自己的文件,并且MySQL表将是目录。例如,如果您有一个名为Jon的用户,那么在名为/ members /的目录中将为用户提供一个文件。在这个文件中,会为用户提供各种信息,包括用户标识,排名等等 - 所有这些信息都由标签分隔,全部在单独的行(userid \ t4)中。

所以这里是一个例子用户文件:

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

所以,我怎么能转换到上述情况在MySQL自己的行和领域?如果可能的话,我可以同时做几千个这样的文件吗?

谢谢。

+0

这似乎是一个简单的脚本挑战为Perl,PHP,蟒蛇等... – gahooa 2011-01-09 23:44:54

+0

是的,这就是我最初要做的事情,但是我只是想知道是否有任何方法可以在MySQL中快速完成。 – Jon 2011-01-09 23:47:29

这看起来像一个相当琐碎的脚本问题。

请参阅下面的示例(伪代码),了解如何在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'] 
    ) 
) 

LOAD DATA INFILE用于CSV文件,你都没有,所以:在一个CSV文件的目录

  • 合并的所有文件,删除列(用户ID,用户名的名字.. 。)并用分隔符([TAB],“;”,...)分隔cols,而不是导入为CVS。
  • 为你所得到的每一个骰子循环。

或写一个“愚蠢”的程序(PHP效果很好),为你做这一切工作。