____是一个国家、一个民族的灵魂(____的那一刻500字)

lxf2023-05-07 19:50:01

作为HTTP Archiveproject的一部分,我为每次抓取创建MySQL转储(在每月的1号和15号)。您可以从下载页面访问转储列表。有几个人使用这些转储,最著名的是格里戈利克,他将数据导入到Google BigQuery。

去年,我对许多功能请求犹豫不决,因为它们需要更改模式。我不确定更改模式会如何影响更改前的转储文件的使用。这篇博文总结了我的发现。

格式

当我启动HTTP归档时,所有的转储都是使用如下命令以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和T ABLENAME.sql。txt文件是CSV格式的,可以用单独的命令压缩。

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的解压缩文件和大约3G的gzip文件。这凸显了使用CSV格式转储的一个缺点:无法在内存中gzi p和ungzip。这是因为mysqlimport命令使用文件名来确定使用哪个表——如果您输入行,它就不知道表名。如果磁盘空间有限,解压缩一个25G的文件可能是一个挑战。

另一方面,CSV导入比使用MySQL格式文件快30%。当导入3000万行时,这可以节省一个多小时。HTTP Archive目前提供MySQL和CVS格式的转储,因此人们可以在更少的磁盘空间和更快的导入之间进行选择。

向前兼容性

我主要关心的是先前生成的转储文件在以后的模式更改中的灵活性——即添加和删除列。

MySQL格式的转储文件可以很好地处理添加的列。转储中的INSERT命令与特定的列名相关联,因此新列会被忽略。CSV格式的转储不太灵活。行中的值按顺序填充到表的列中。如果在末尾添加了一个新的列,一切都很好。但是,如果在现有列的中间添加一列,行值将全部向左移动一列。

这两种格式都不适用于删除的列。MySQL格式的文件将失败,并出现“未知列”错误。CSV格式的文件可以工作,但是所有的列都将被移动,这次是向右移动。

外卖食品

现在,我可以在不使现有转储文件失效的情况下进行模式更改,只要我遵循以下原则:

  • 不要删除列——如果不再需要某个列,我会将它留在原处,并将列定义修改为较小的尺寸。
  • 在末尾添加列——我更喜欢按语义组织我的列,但是从现在开始所有新的列都将被添加到末尾。
  • 我将继续创建MySQL和CSV格式的转储。这些准则确保所有过去和将来的转储文件都将针对最新的模式工作。

    adminjs.cn是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 Adminjs.cn还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 在Adminjs.cn中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!