包含大量文本和 .SQL 文件的本地“数据库”的解决方案

包含大量文本和 .SQL 文件的本地“数据库”的解决方案

我的单个目录树中包含了几百 GB 的文本数据。这些数据由非常大的文本文件和一些 MySQL 数据库转储组成(当然,当它们脱离了 DBMS 时,大部分都用作文本文件)。文本文件中的数据结构千差万别,有些是每行一条记录,有些有列和各种列分隔符,还有一些甚至看起来像 JSON。

我通常搜索这个庞大但原始的数据库的方法是在父文件夹中执行grep,但现在数据库已经足够大,单个grep命令可能需要长达 30 分钟。

出于这个原因,我早就应该转向合适的数据库解决方案。

所有数据都存储在我的本地机器上,并且我是唯一的用户,因此我对解决方案的要求如下:

  • 我可以将其指向父目录来索引其中所有文本文件的内容,让我能够尽快搜索它们

  • 我不需要学习 SQL 或其他语言来搜索数据库:GUI 和/或 CLI 就可以了

  • 我不需要设置和运行整个服务器来访问它(除非没有无服务器 DBMS,这是绝对不可避免的)

  • 一个不错的但并非绝对必要的好处:我可以使用文件的列来搜索文件,即使它们之间的分隔符不一致

是否存在可以满足这些需求的数据库管理解决方案,或者我在这里要求太多了?

对于这个问题中的任何天真或错误的假设,我深表歉意;数据库只是我的需求迫使我去研究的东西,而不是我一定了解的东西。

答案1

要建立一个数据库来处理您拥有的各种数据,其复杂性可能会大大增加。

尽管查询结果数据库所需的 SQL 语句相当简单,但将现有文件转换为适当的格式以便使用合理/有用的列加载到数据库中却相当复杂。

因此,假设你现在最想做的是加快速度:

如果您的数据文件具有合理准确的文件扩展名,例如*.txt或MySQL 转储文件名,则您可以让脚本从父目录开始并行*.sql执行几个命令,每个文件扩展名一个命令,然后根据扩展名运行适当的命令。findfind

类似于这个未经测试的 shell 脚本:

&最后是在后台运行两个 find/grep 命令的魔法)

STRING_TO_FIND=$1
DIR_BASE=/home/brian/docdump
cd $DIR_BASE

# Assuming there is a subdirectory in above directory named work
TXT_GREP_OUT=${DIR_BASE}/work/grep_txt.log
SQL_GREP_OUT=${DIR_BASE}/work/grep_sql.log

find $DIR_BASE -type f -name '*.txt' -exec grep "$STRING_TO_FIND" /dev/null {} \; > $TXT_GREP_OUT &
find $DIR_BASE -type f -name '*.sql' -exec grep "$STRING_TO_FIND" /dev/null {} \; > $SQL_GREP_OUT &

相关内容