将平面文件数据库传输到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自己的行和领域?如果可能的话,我可以同时做几千个这样的文件吗?
谢谢。
答
这看起来像一个相当琐碎的脚本问题。
请参阅下面的示例(伪代码),了解如何在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效果很好),为你做这一切工作。
这似乎是一个简单的脚本挑战为Perl,PHP,蟒蛇等... – gahooa 2011-01-09 23:44:54
是的,这就是我最初要做的事情,但是我只是想知道是否有任何方法可以在MySQL中快速完成。 – Jon 2011-01-09 23:47:29