Python Django数据库优化?这是慢的还是正常的?
我有几个关于数据库性能的问题。我的应用程序中有以下Django模型及其相应的管理类。数据库是MySQL,托管在Amazon RDS上Python Django数据库优化?这是慢的还是正常的?,python,mysql,django,amazon-web-services,rds,Python,Mysql,Django,Amazon Web Services,Rds,我有几个关于数据库性能的问题。我的应用程序中有以下Django模型及其相应的管理类。数据库是MySQL,托管在Amazon RDS上 通过for循环,在Notifications表中添加大约45000条记录花费了20多分钟。这个时间慢还是正常 此表的django管理界面太慢。在无dB负载下加载大约需要30秒。当数据库执行任何作业时,加载通常需要2分钟以上。这个表通常每一两周增加一百万条记录。是否有办法提高数据库和/或系统的性能,或者当前的加载时间是否正常 型号 class Notificatio
class Notification(models.Model):
id = models.AutoField(primary_key=True)
token = models.ForeignKey(Token, blank=False, null=False)
alert = models.ForeignKey(Alert, blank=False, null=False)
created_at = models.DateTimeField(auto_now=True)
is_sent = models.BooleanField(default=False)
is_processed = models.BooleanField(default=False)
error_sending = models.BooleanField(default=False)
# ...
def __unicode__(self):
return u'%s' % (self.alert )
管理
class AppNotification(admin.ModelAdmin):
fields = ['token','alert','is_sent','is_processed','error_sending']
#
list_display = ('token','alert','created_at','is_sent','is_processed','error_sending')
#
search_fields = ('app__app_name','token__token')
#
list_select_related = True
#
list_per_page = 25
admin.site.register(Notification,AppNotification)
关于你的第二个问题: 此表的django管理界面太慢。它需要大约 在无dB负载的情况下加载30秒。通常需要2个以上的时间 数据库执行任何作业时要加载的分钟数 这似乎是一个缓慢的问题?一个很好的起点是查看正在运行的查询(django debug工具栏),并使用db提供的工具对其进行调试并添加适当的索引
在django 1.4中,添加了一种方法,它至少可以减少通过网络传输插入数据所花费的时间 花了20多分钟的时间在数据库中添加了大约45000条记录 通知表,通过for循环。这个时间慢还是正常 这在这种设置中并不罕见。Django ORM速度不快,如果速度很重要的话,它不是添加数千个条目的好方法。RDS的速度取决于实例类型,但通常低端的也不快 另一种选择是使用低级SQL或using,但是您必须记住,这两种方法都不会调用对象
.save()
,也不会发送pre\u save
和post\u save
信号。在这些包含大量业务逻辑的情况下,这可能是一个问题
此表的django管理界面太慢。它需要大约
在无dB负载的情况下加载30秒。通常需要2个以上的时间
数据库执行任何作业时要加载的分钟数。这张桌子
通常每一两周增加一百万条记录。有办法去吗
提高数据库和/或系统的性能,或者
当前加载时间正常吗
你的模型管理员中有
list\u select\u related=True
,这似乎是唯一能让它变慢的东西。它确实加入了令牌
和警报
我最近遇到了完全相同的问题,不得不深入挖掘,找到解决办法,让我的Django管理员为记录超过100万条的表而忙碌。我的问题最终导致页面加载上的查询代价高昂,而且每当我使用ModelAdmin
中的search\u字段时,搜索查询的结构也很糟糕
经过大量的研究和思考,我提出了一些不错的解决方案,并将其记录在这里: