我正在使用Django构建一个带有MySQL(MyISAM)后端的网站。
数据库数据从许多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)
将它导入MySQL需要一分钟(有时只需30秒)。我不知道这个大小的文件是否可以预料到这一点?我能做些什么(如果有的话)来提高性能?
对于它的价值,这里有一些分析器输出https://gist.github.com/1287847
答案 0 :(得分:0)
有几种解决方案,与其他解决方案相同,但这里有一种解决方法可以使系统的“停机时间”保持最小,而无需编写数据库同步机制(这在大多数情况下可能是更好的解决方案)。 :
settings_build.py
文件,from settings import *
为新数据库选择一个随机名称(可能包含数据库名称中的日期),通过调用mysqladmin创建它,并将名称更新为DATABASES
。builddb
命令或调用它来创建custom django management command(让我们称之为loaddata
),并且在成功的结果上,它应该将db名称写入{{1带有一行的文本文件并执行一个shell命令来重新加载你的django(apache / gunicorn /?)服务器。dbname
以从文本文件加载数据库名称。现在运行你的构建过程:
settings.py
答案 1 :(得分:0)
我通过将处理过的XML文件导出到csv而不是json来解决它,然后使用一个名为mysqlimport的单独脚本来进行导入。