2012-12-19 65 views
2

我有幾個與數據庫性能有關的問題。我的應用程序中有以下Django模型及其相應的管理類。數據庫是MySQL,它位於Amazon RDS。Django數據庫優化?這是緩慢還是正常?

  1. 花了超過20分鐘添加在通知表周圍45000記錄,通過一個for循環。這次是緩慢還是正常?
  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) 

ADMIN

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

花了20多分鐘將圍繞45000記錄在 通知表,通過一個for循環。這次是緩慢還是正常?

這是不尋常在此設置。 Django的ORM速度不是很快,如果速度很重要,它不是一種很好的添加數千條記錄的方法。 RDS的速度取決於實例類型,但通常低端的速度也不快。

選擇是去低級別的SQL或使用bulk_create,但是你要記住,這些方法都將調用對象.save()也不會發送pre_savepost_save信號。在這些包含大量業務邏輯的情況下,這可能是一個問題。

此表的django管理界面太慢。大約需要 30秒才能在沒有dB負載的情況下加載。當數據庫執行任何作業時,通常需要花費超過2分鐘的時間才能加載。該表 通常每週或每兩週增加一百萬條記錄。有沒有一種方法可以提高數據庫和/或系統的性能,或者這種 當前加載時間是否正常?

您的模特管理員中有list_select_related = True,這似乎是唯一可以讓它變慢的東西。它確實加入了TokensAlerts

4

關於你提到的第二個問題:

此表的Django管理界面太慢。大約需要 30秒才能在沒有dB負載的情況下加載。當數據庫執行任何作業時,通常需要花費超過2分鐘的時間才能加載。

這似乎是一個緩慢的查詢?一個良好的開端將是看看哪些查詢正在運行(Django的調試工具欄),並使用你的數據庫提供explain工具進行調試,並添加適當的索引


Django中已經加入1.4 bulk_create方法,至少會減少通過網絡傳輸數據的插入時間?

0

我最近遇到了完全相同的問題,不得不深入尋找解決方法,讓我的Django管理員哼唱100M +記錄的表。我的問題最終導致在頁面加載時查詢價格昂貴,並且在我使用ModelAdmin中的search_fields中的一個時,查詢結果也很差。

經過大量的研究和思考,我想出了一些很好的解決方案,並在這裏記錄下來:http://craiglabenz.me/2013/06/12/how-i-made-django-admin-scale/