gpt4 book ai didi

mysql - 大数据文件、操作和搜索

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:06 25 4
gpt4 key购买 nike

我有两个数据文件。第一个是转储文件,它非常大(超过 6Gb)并且包含来自数据库的记录。第二个是字符串列表(每行一个字符串)我必须在另一个文件的行(大约 50k 行)中找到部分匹配项。到目前为止,我在 bash 中对第一个文件做了一些操作。我已经将第一个字段(包含对我有用的信息)打印到一个新文件中,而不是删除前 25 行,其中只包含评论和生成的字符串,然后我做了一个唯一的排序(需要唯一,因为在第一个字段值,我认为按字母排序可能会加快搜索速度)。在我的笔记本电脑上生成它大约需要半个小时。最后,文件每行包含一个字符串,大约有 10^8 行。

awk '{print $1}' dump > first
sed '1,25d' first > temp_data
sort -u temp_data > data

现在我必须从较大的文件中找到较小文件中所有字符串的部分匹配(或至少它们的计数)。首先我想我会用 bash 来完成并运行以下代码:

awk 'FNR==NR{a[$1]; next} {s=$1; for (i in a) if (index(i, $1)) s=s FS i; if (s!=$1) print s}' serach_strings data > result

但看起来它会永远运行所以我决定尝试将文件加载到 mysql(加载更大的文件大约需要半小时)并尝试使用几个测试字符串运行:

SELECT COUNT(*) FROM data WHERE name LIKE '%teststring%';

这大约需要 30 秒,所以如果我算上 50k 的搜索,这将需要大约 17 天,这是 Not Acceptable ,因为我必须每隔几天运行一次整个过程。

所以问题是,我怎样才能在几个小时内更有效地实现该结果。目前我正在我的笔记本电脑上测试这个,但我有一台台式电脑,我可以在上面安装一个服务器版本的 Linux,它可以用来运行这个任务。该任务最重要的特征是什么(处理器速度、核心数、内存)?

欢迎提出任何建议。

最佳答案

您可以尝试以下方法:

Step1:如果你使用的是 mysql 5.6 版本,那么你可以保留你的数据表 innodb 或 myisam,但如果你使用的是较低版本,则保留你的表 myisam。

第 2 步:在要搜索字符串的列上创建全文索引。

第 3 步:创建一个存储过程,它将把第二个表中的所有字符串保存在游标中,并从数据表中逐个搜索并将计数存储在任何表中,您可以在第二个表中针对各种字符串进行更新,或者您可以插入任何新表。


在答案中添加:

如果您分享表大小、表架构、服务器配置,那么我可以帮助您。此外,您可以尝试以下 -

创建全文索引的命令:

ALTER TABLE mytable ADD FULLTEXT(mycoloumn);

如果您在更改表格时遇到问题,则可以更改以下变量:

tmp_table_size                = 1G
max_heap_table_size = 1G
max_allowed_packet = 64M
key_buffer_size = 50M
innodb_buffer_pool_size = half of your RAM

注意:您的机器中有足够的 RAM。

更改后重新启动 mysql 并尝试更改,更改后您可以根据需要更改这些变量。

关于mysql - 大数据文件、操作和搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22091205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com