首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在将数据导入MySQL时提高性能?

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

Stack Overflow用户
提问于 2011-10-15 02:13:31
回答 2查看 260关注 0票数 1

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

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

无论如何,JSON文件大约有10Mb,最终大约有21000行SQL (预计不会有很大的增长)。有7个表,它们看起来都像这样:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-20 00:27:29

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

票数 0
EN

Stack Overflow用户

发布于 2011-10-16 05:39:27

有几个解决方案,与其他解决方案相同,但这里有一个变通方法,可以将系统的“停机时间”保持在最低限度,而不需要编写数据库同步机制(这在大多数情况下可能是更好的解决方案):

  • 创建一个自定义的settings_build.py文件,from settings import *为新的数据库选择一个随机的名称(可能包含数据库名称中的日期),通过调用mysqladmin创建它,并通过克隆或调用该命令将名称更新到DATABASES.
  • Create a custom django management command (让我们称之为builddb),在成功的结果中,它应该将数据库名称写到一个dbname文本文件中,并执行一个重新加载django的外壳命令(apache/<custom django management command>C12builddb>/?)server.
  • Modify您的settings.py以从文本文件加载数据库名称。

现在像这样运行你的构建过程:

代码语言:javascript
复制
./manage.py builddb --settings=settings_build
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7771790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档