草庐IT

mysql - 维基百科转储表页面链接的问题

coder 2023-10-15 原文

我从 dumps.wikimedia.org/enwiki/latest/ 下载了 enwiki-latest-pagelinks.sql.gz 转储。

我把文件打包了,解压后大小为37G。

表结构是这样的:

SHOW CREATE TABLE wp_dump.pagelinks;

CREATE TABLE `pagelinks` (
  `pl_from` int(8) unsigned NOT NULL DEFAULT '0',
  `pl_namespace` int(11) NOT NULL DEFAULT '0',
  `pl_title` varbinary(255) NOT NULL DEFAULT '',
  `pl_from_namespace` int(11) NOT NULL DEFAULT '0',
  UNIQUE KEY `pl_from` (`pl_from`,`pl_namespace`,`pl_title`),
  KEY `pl_namespace` (`pl_namespace`,`pl_title`,`pl_from`),
  KEY `pl_backlinks_namespace` (`pl_from_namespace`,`pl_namespace`,`pl_title`,`pl_from`)
) ENGINE=InnoDB DEFAULT CHARSET=binary

我将表导入到一个新的空数据库中:

mysql -D wp_dump -u root -p < enwiki-latest-pagelinks.sql

我运行任务的计算机有 16G RAM,mysql 数据库位于 SSD 上,所以我假设尽管表很大,导入也不会花费太长时间。

但是,该任务已经运行了一天多,并且仍在运行。没有其他进程访问mysql,计算机上没有工作量。

数据库文件本身现在有 79G 大。

ls -lh

-rw-r----- 1 mysql mysql   65 May 11 17:40 db.opt
-rw-r----- 1 mysql mysql 8,6K May 12 07:06 pagelinks.frm
-rw-r----- 1 mysql mysql  79G May 13 16:59 pagelinks.ibd

该表现在有超过 5 亿行。

SELECT table_name, table_rows FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'wp_dump';

+------------+------------+
| table_name | table_rows |
+------------+------------+
| pagelinks  |  520919860 |
+------------+------------+

我在想:

enwiki-latest-pagelinks.sql真的超过79G了吗?

pagelinks 真的包含超过 5 亿行吗?

导入pagelinks表真的需要那么长时间吗?

请问您能否提供一些指标,例如预期的表格大小和行数?

更新:2017 年 5 月 14 日:

insert 仍在运行; pagelinks.ibd文件现在130G;行数现在接近 7 亿

更新:2017 年 5 月 16 日:

insert 仍在运行; pagelinks.ibd文件现在204G;行数现在超过 12 亿

我计算了过去两天每秒插入的行数:

行数/秒 = 3236

并且:在 sql 脚本中每个插入语句有数千次插入 (head -41 enwiki-latest-pagelinks.sql | tail -1 | grep -o "("| wc -l是 30471)

所以,我的后续/修改的问题:

给定 37G 的 sql 文件大小和表结构(如上所列),行数和 idb 文件大小是否符合预期?

rows/sek = 3236 是否是一个好的值(意味着插入表格需要几天时间)?

限制速度因素可能是什么/我怎样才能加快导入速度?

  • 禁用索引(并在插入后计算它们)?
  • 优化事务(提交(脚本中未设置任何内容)/autocommit(现在启用))?
  • 优化变量设置(例如 innodb_buffer_pool_size,现在为 134217728)?

最佳答案

@Sim Betren:我目前正在导入同一张表,我可以获得大约 7700 行/秒。这意味着每天大约有 600.000.000 行。可能最重要的是在 InnoDB 上进行正确的设置:

https://dba.stackexchange.com/questions/83125/mysql-any-way-to-import-a-huge-32-gb-sql-dump-faster

innodb_buffer_pool_size = 4G
innodb_log_buffer_size = 256M
innodb_log_file_size = 1G
innodb_write_io_threads = 16
innodb_flush_log_at_trx_commit = 0

这些设置效果很好。根据我的阅读和尝试,InnoDB 喜欢高内存设置。理想情况下,可以使用 16Gb 甚至 32Gb 的机器,然后进一步增加这些设置。但是我在一个适度的设置下得到了 7700 行/秒,这已经有将近 10 年的历史了:

  • 英特尔 Q6700 四核
  • 8 Gb DDR2 内存

我将那个 10 年前的硬件与 2017 年型号的 500Gb SSD 组合在一起,它专用于这项工作并处理读取和写入。使用旧硬件的原因是 SSD 是设置中最重要的部分(因为 IOPS)。另外,通过使用旧硬件,我节省了一些钱。但是,硬件仅限于 8Gb 的 DDR2。我认为具有 32Gb 或 64Gb 内部存储器的较新的专用机器真的可以飞起来。

软件设置:

  • Linux Mint 64 位
  • 适用于 Ubuntu 的 MySQL 服务器 5.7.18
  • 用于导入的 MySQL Workbench

我也在 Windows 10 上尝试过,两者的速度几乎相同。所以你也可以试试Windows。

注意:我确实尝试将引擎更改为 MyISAM。 MyISAM 可以非常快,也大约 8000 行/秒或更多。但是由于某种原因,导入总是被损坏。所以我会坚持使用 InnoDB

2017 年 6 月 17 日更新:

完成导入。 “pagelinks”表大约有 214Gb,有 12 亿行。大约 112Gb 是原始数据,102Gb 是索引。原始未压缩文件大约为 37Gb。

导入大约需要 2 天 6 小时。平均速度 = 5350 行/秒。使用高端设备(大内存,最好是 64Gb 或更多)和最佳设置,它可能会更快地完成。但我让它在专用机器上 24/7 全天候运行,而且我并不着急,所以 2 天似乎没问题。

2017 年 6 月 18 日更新:

还导入了“page.sql”,因为它包含与 ID 相关的名称。解压文件约5Gb,导入耗时1小时。这看起来很快:页面链接文件大约 37Gb,比“page.sql”大 7 倍。但导入时间要长 50 倍。因此,“pagelinks”花费这么长时间的原因有几个:(A)可能是因为它不适合内存(B)表结构,每次插入很多数据(C)设置。但最有可能的是内存。

结论:尝试使用 32Gb 或 64Gb 内存的 PC。也许更多。并使用能够跟上该内存(500Gb 或更多)的 SSD。 SSD 比内存更重要,因此请先尝试。

关于mysql - 维基百科转储表页面链接的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43954631/

有关mysql - 维基百科转储表页面链接的问题的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  3. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  4. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  5. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  6. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  7. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  8. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  9. ruby-on-rails - Prawn - 表格单元格内的链接 - 2

    我正在尝试用Prawn生成PDF。在我的PDF模板中,我有带单元格的表格。在其中一个单元格中,我有一个电子邮件地址:cell_email=pdf.make_cell(:content=>booking.user_email,:border_width=>0)我想让电子邮件链接到“mailto”链接。我知道我可以这样链接:pdf.formatted_text([{:text=>booking.user_email,:link=>"mailto:#{booking.user_email}"}])但是将这两行组合起来(将格式化文本作为内容)不起作用:cell_email=pdf.make_c

  10. 【高数】用拉格朗日中值定理解决极限问题 - 2

    首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有,  也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加

随机推荐