[英]Improve performance when importing data to MySQL?
我正在使用Django构建带有MySQL(MyISAM)后端的网站。
数据库数据是从许多XML文件导入的,这些XML文件由外部脚本处理并作为JSON文件输出。 每当新的JSON文件与旧的JSON文件不同时,我都需要擦除旧的MySQL-db并使用manage.py loaddata重新创建它(至少这是最简单的方法,我想我可以检查一下JSON之间的区别文件并将其应用于数据库,但是我还没有找到一个好的解决方案(我既不是很好的编码人员,也不是Web开发人员)。
无论如何,JSON文件约为10 Mb,最终大约是21,000行SQL(预计不会显着增长)。 有7个表,它们都看起来像这样:
class Subnetwork(models.Model):
SubNetwork = models.CharField(max_length=50)
NetworkElement = models.CharField(max_length=50)
subNetworkId = models.IntegerField()
longName = models.CharField(max_length=50)
shortName = models.CharField(max_length=50)
suffix = models.CharField(max_length=50)
最多需要一分钟(有时只有30秒)将其导入MySQL。 我不知道这种大小的文件是否可以提供这种功能? 我该怎么做(如果有的话)以提高性能?
对于它的价值,这是一些探查器输出https://gist.github.com/1287847
有几种解决方案,它们比其他解决方案都一样好,但是这里有一种解决方法,可以使系统的“停机时间”最小化,而无需编写数据库同步机制(在大多数情况下,这可能是一个更好的解决方案)。
settings_build.py
文件,并使用from settings import *
为新数据库选择一个随机名称(可能在数据库名称中带有日期),然后通过调用mysqladmin进行创建,并将名称更新为DATABASES
。 loaddata
命令或调用它来创建定制的django管理命令 (我们称其为builddb
),并在成功结果后,将一行名称写到dbname
文本文件中,并执行一个shell命令以重新加载django ( apache / gunicorn /?)服务器。 settings.py
以从文本文件中加载数据库名称。 现在像这样运行您的构建过程:
./manage.py builddb --settings=settings_build
我通过将处理后的XML文件而不是json导出到csv来解决它,然后使用了一个名为mysqlimport的单独脚本来进行导入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.