Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在将数据导入MySQL时提高性能?_Python_Mysql_Xml_Django_Json - Fatal编程技术网

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

Python 在将数据导入MySQL时提高性能?,python,mysql,xml,django,json,Python,Mysql,Xml,Django,Json,我正在使用Django构建一个带有MySQL(MyISAM)后端的网站 数据库数据从外部脚本处理并输出为JSON文件的大量XML文件导入。每当一个新的JSON文件与旧的不同时,我都需要擦除旧的MySQL数据库并使用manage.py loaddata重新创建它(至少这是一种简单的方法,我想我可以检查JSON文件之间的差异并将其应用于数据库,但我还没有找到一个好的解决方案(我既不是一个很好的程序员,也不是一个网络开发人员) 无论如何,JSON文件大约有10MB,最终大约有21000行SQL(预计不

我正在使用Django构建一个带有MySQL(MyISAM)后端的网站

数据库数据从外部脚本处理并输出为JSON文件的大量XML文件导入。每当一个新的JSON文件与旧的不同时,我都需要擦除旧的MySQL数据库并使用manage.py loaddata重新创建它(至少这是一种简单的方法,我想我可以检查JSON文件之间的差异并将其应用于数据库,但我还没有找到一个好的解决方案(我既不是一个很好的程序员,也不是一个网络开发人员)

无论如何,JSON文件大约有10MB,最终大约有21000行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秒)的时间。我不知道这样大小的文件是否会出现这种情况?我可以做些什么(如果有的话)来提高性能


值得一提的是,这里有一些探查器输出,有两种解决方案,与其他解决方案相同,但这里有一个解决方案,可以将系统的“停机时间”降至最低,而无需编写db同步机制(在大多数情况下,这可能是一个更好的解决方案):

  • 创建一个自定义的
    settings\u build.py
    文件,使用
    from settings import*
    为新数据库选择一个随机名称(可能是数据库名称中的日期),通过调用mysqladmin创建它,并将名称更新为
  • 通过克隆
    loaddata
    命令或调用它来创建一个数据库(我们称之为
    builddb
    ),成功后,它应该用一行将数据库名写入
    dbname
    文本文件,并执行一个shell命令,重新加载django(/?)服务器
  • 修改
    设置.py
    以从文本文件加载数据库名称
现在按如下方式运行构建过程:

./manage.py builddb --settings=settings_build

我通过将处理过的XML文件导出到csv而不是json来解决这个问题,然后使用一个名为mysqlimport的单独脚本来进行导入。

确保settings.py中的DEBUG=False。我有一个300mb的文件要导入,通常会运行一个小时左右,然后失败。我更改了DEBUG,它在30分钟后开始运行并完成。Somet当DEBUG=True时,ORM会使用更多内存来缓存查询……这缩短了几秒钟的加载时间。我想这是一个好的开始,谢谢。这是我考虑过的一个选项(即为每次导入创建一个新数据库),但不幸的是,我没有对MySQL服务器的完全访问权限,只能使用分配给我的数据库。如果你可以访问更多的数据库,你仍然可以通过交替使用两个数据库来使用这种方法。如果我不想办法实际减少时间,我可能会使用这种方法作为最后手段。