我正在使用以下方法将 wiktionary 中的机器可读数据解析到 SQL 数据库中维科基特,但后来意识到,根据 wikokit 提供的时间估算,它将需要一个月的时间才能完成(53499 分钟)。这是在遵循提高 MySQL 性能的一般建议之后得出的,包括使用 mysqltuner 并遵循其指示。
我目前正在使用我的个人电脑来解析维基词典,它的规格是 4.2 Ghz CPU 和 8G 内存,使用 1TB 硬盘。我非常天真地计算了一下,我想象一个 256G 内存的服务器可以在大约一天的时间内解析维基词典。我思考我需要以每秒的价格租用一台具有高 RAM、平均 CPU 和最小 HDD 空间的服务器,租用时间为一两天。然而,我不确定这是否可行(将内存扩大 30 倍真的有帮助吗?),或者在哪里可以找到这样的东西,或者甚至用谷歌搜索以开始。
更多细节:Wikokit 的工作原理是获取 Wiktionary 的原始、未解析的 SQL 数据库,然后使用 Java 代码对其进行解析连接器/J,然后将其加载到格式化的 SQL 数据库中,该数据库最初为空。本质上是 raw_enwikt -> wikt_parser.java -> parsed_enwikt。指南可以在以下位置找到这里。
我对服务器使用经验不多,所以我也不确定您是否能够在任意服务器上设置 MySQL 并在其上运行 Java 代码。我需要在相对较短的时间内(未来 3-4 天内)解析数据库。
答案1
我快速浏览了一下解析器页面。我不确定你是否需要一份完全最新的副本,但看起来大部分艰苦的工作已经为你完成了。他们的页面位于 http://whinger.krc.karelia.ru/soft/wikokit/index.html 有一个可下载的 sql 文件,您可以直接将其转储到数据库中。它已经通过了他们的解析器。最大的缺点是它是 2015/16 年的。
如果您必须拥有最新版本,那么 256GB 的系统对我来说似乎过于夸张,而且可能解决不了问题。您会发现,超过某个限度,它就没有什么区别了。我很想尝试较小的 16GB 或 32GB 系统,但从 ramdrive 运行解析器、其输入文件和 mysql(请注意,如果机器崩溃或重新启动或内存不足,则所有当前进度都将丢失),看看速度是否更快。这主要可以消除任何文件系统瓶颈。
我要尝试的另一件事是删除解析器的数据库部分。这假设 mysql 写入是较慢的部分。让解析器 java 将其所有 SQL 命令写入文本文件。然后借鉴 mysqldump 的做法,关闭所有 mysql 的键处理,加载数据,然后重新打开键和约束。这将比逐行处理每一行快得多。但是,如果数据库在关系中使用了自动编号键,则此方法不起作用。
写完这些之后,我还阅读了 Main.java 的代码,发现它正在从实时数据库中提取数据。一个简单的优化方法是下载最新的数据库快照(https://dumps.wikimedia.org/enwiktionary/latest/) 并从本地数据库运行所有内容。即使只是将其转储到本地网络上的另一台机器上,仅凭这一点就应该可以大大提高速度,因为您不必与使用 wiktionary 的每个人争夺带宽和服务器时间。