作为 HTTP Archive 项目的一部分,我为每次爬网创建 MySQL 转储(每月 1 日和 15 日)。您可以从下载页面访问转储列表。有几个人使用这些转储,最著名的是 Ilya Grigorik,他将数据导入 Google BigQuery。
去年,我对许多功能请求犹豫不决,因为它们需要架构更改。我不确定更改架构会如何影响更改之前的转储文件的使用。这篇博文总结了我的发现。
格式
当我启动 HTTP Archive 时,所有转储都使用如下命令以 MySQL 格式导出:
mysqldump --opt --skip-add-drop-table -u USERNAME -p -h SERVER DBNAME TABLENAME | gzip > TABLENAME.gz
这些 MySQL 格式的转储文件是这样导入的:
gunzip -c TABLENAME.gz | mysql -u USERNAME -p -h SERVER DBNAME
使用 MySQL 以外的数据库的人要求我也以 CSV 格式导出。此导出命令的输出是两个文件:TABLENAME.txt 和 TABLENAME.sql。 .txt 文件为 CSV 格式,可以使用单独的命令进行 gzip 压缩。
mysqldump --opt --complete-insert --skip-add-drop-table -u USERNAME -p -h SERVER -T DIR DBNAME TABLENAMEgzip -c DIR/TABLENAME.txt > DIR/TABLENAME.csv.gz
此 CSV 转储的导入方式如下:
gunzip DIR/TABLENAME.csv.gzmysqlimport --local --fields-optionally-enclosed-by="/"" --fields-terminated-by=, --user=USERNAME -p DBNAME DIR/TABLENAME.csv
最大的 HTTP 存档转储文件是 ~解压后 25G,gzip 后约 3G。这凸显了使用 CSV 格式转储的一个缺点:无法在内存中进行 gzip 和 ungzip。这是因为 mysqlimport 命令使用文件名来确定要使用哪个表 - 如果您通过管道输入行,那么它不会知道表名。如果磁盘空间有限,解压缩 25G 文件可能是一个挑战。
另一方面,CSV 导入比使用 MySQL 格式文件快约 30%。导入 3000 万行时,这可以节省一个多小时。 HTTP Archive 目前提供 MySQL 和 CVS 格式的转储,以便人们可以在更少的磁盘空间或更快的导入之间进行选择。
前向兼容性
我主要关心的是先前生成的转储的灵活性根据以后的架构更改创建文件 - 即添加和删除列。
MySQL 格式的转储文件可以很好地处理添加的列。转储中的 INSERT 命令与特定的列名称相关联,因此新列将被忽略。 CSV 格式的转储不太灵活。行中的值按顺序填充到表的列中。如果最后添加一个新列,一切都会正常。但是,如果在现有列的中间添加一列,则行值都会向左移动一列。
这两种格式都不适用于删除的列。 MySQL 格式的文件将失败并出现“未知列”错误。 CSV 格式的文件可以工作,但所有列都会移动,这次是向右移动。
要点
现在,如果我遵循这些准则,我可以放心地进行架构更改,而无需使现有转储文件失效:
- 不要删除列– 如果不再需要某个列,我会将其保留在原处并将列定义修改为较小的尺寸。
- 在末尾添加列 – 我更喜欢按语义组织我的列,但从此时开始的所有新列都将添加在末尾。
我'将继续以 MySQL 和 CSV 格式创建转储。这些准则确保所有过去和未来的转储文件都将根据最新架构工作。

本文探讨了Docker中的优化MySQL内存使用量。 它讨论了监视技术(Docker统计,性能架构,外部工具)和配置策略。 其中包括Docker内存限制,交换和cgroups

本文介绍了MySQL的“无法打开共享库”错误。 该问题源于MySQL无法找到必要的共享库(.SO/.DLL文件)。解决方案涉及通过系统软件包M验证库安装

本文讨论了使用MySQL的Alter Table语句修改表,包括添加/删除列,重命名表/列以及更改列数据类型。

本文比较使用/不使用PhpMyAdmin的Podman容器直接在Linux上安装MySQL。 它详细介绍了每种方法的安装步骤,强调了Podman在孤立,可移植性和可重复性方面的优势,还

本文提供了SQLite的全面概述,SQLite是一个独立的,无服务器的关系数据库。 它详细介绍了SQLite的优势(简单,可移植性,易用性)和缺点(并发限制,可伸缩性挑战)。 c

本指南展示了使用自制在MacOS上安装和管理多个MySQL版本。 它强调使用自制装置隔离安装,以防止冲突。 本文详细详细介绍了安装,起始/停止服务和最佳PRA

文章讨论了为MySQL配置SSL/TLS加密,包括证书生成和验证。主要问题是使用自签名证书的安全含义。[角色计数:159]

文章讨论了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比较了它们对初学者和高级用户的功能和适合性。[159个字符]


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

记事本++7.3.1
好用且免费的代码编辑器

Atom编辑器mac版下载
最流行的的开源编辑器

WebStorm Mac版
好用的JavaScript开发工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境