繁体   English   中英

将数据导入MySQL时提高性能?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM