2

我有几个与数据库性能有关的问题。我的应用程序中有以下 Django 模型及其相应的管理类。数据库是 MySQL,它托管在 Amazon RDS 上。

  1. 通过 for 循环在 Notifications 表中添加大约45000 条记录需要20 多分钟。这个时间是慢还是正常?
  2. 这个表的 django 管理界面太慢了。在无 dB 负载下加载大约需要 30 秒。并且数据库在执行任何工作时通常需要 2 分钟以上的时间来加载。该表通常每周或每两周添加一百万条记录。有没有办法提高数据库和/或系统的性能,或者这个当前的加载时间是否正常?

模型

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)
4

3 回答 3

4

关于你的第二个问题:

这个表的 django 管理界面太慢了。在无 dB 负载下加载大约需要 30 秒。并且数据库在执行任何工作时通常需要 2 分钟以上的时间来加载。

这似乎是一个缓慢的查询?一个好的起点是查看正在运行哪些查询(django 调试工具栏)并使用您的数据库提供的工具explain来调试它们并添加适当的索引


在 django 1.4bulk_create中添加了方法,该方法至少可以减少通过网络传输数据以进行插入的时间?

于 2012-12-19T20:15:53.877 回答
4

通过 for 循环在 Notifications 表中添加大约 45000 条记录需要 20 多分钟。这个时间是慢还是正常?

在这种设置中并不罕见。如果速度很重要,Django ORM 并不快,也不是添加数千个条目的好方法。RDS 的速度取决于实例类型,但通常低端的也不快。

替代方法是使用低级 SQL 或使用bulk_create,但是您必须记住,这些方法都不会调用对象.save(),也不会发送pre_savepost_save发出信号。在这些包含大量业务逻辑的情况下,这可能是一个问题。

这个表的 django 管理界面太慢了。在无 dB 负载下加载大约需要 30 秒。并且数据库在执行任何工作时通常需要 2 分钟以上的时间来加载。该表通常每周或每两周添加一百万条记录。有没有办法提高数据库和/或系统的性能,或者这个当前的加载时间是否正常?

你有list_select_related = True你的模型管理员,这似乎是唯一可以让它变慢的东西。它确实加入了Tokensand Alerts

于 2012-12-19T20:22:47.673 回答
0

我最近遇到了完全相同的问题,不得不深入挖掘以找到解决方法,以让我的 Django 管理员为拥有 100M+ 记录的表而嗡嗡作响。我的问题最终是COUNT(*)页面加载时的昂贵查询,以及每当我使用search_fields来自ModelAdmin.

经过大量的研究和思考,我想出了一些不错的解决方案并在此处记录它们:http: //crailabenz.me/2013/06/12/how-i-made-django-admin-scale/

于 2013-06-14T21:36:50.237 回答