我的看法是,他們的今天沒有理由denormalize database以這種方式來提高性能。索引或分區+索引應該足夠了。
此外,如果是,語義的原因,你更喜歡有兩個表(型號),如:聊天和ChatHistory(或ChatCurrent和ChatActive)如你說的和Django的管理它,我的事情,正確的方法保持一致性爲在ChatCurrent中創建ToArchive()方法。此方法會將聊天條目移至歷史聊天模式。您可以在後臺模式下執行此操作,然後您可以在celery進程中線程交換,這樣在線用戶可以避免等待請求。進入芹菜過程最快的方法是複製數據是raw sql。請記住,您可以將sql封裝到存儲過程中。
編輯,包括回覆您的評論
您可以執行ChatCurrent.ToArchive()在ChatCurrent.save()方法:
class ChatCurrent(model.Model):
closed=models.BooleanField()
def save(self, *args, **kwargs):
super(Model, self).save(*args, **kwargs)
if self.closed:
self.ToArchive()
def ToArchive(self):
from django.db import connection, transaction
cursor = connection.cursor()
cursor.execute("insert into blah blah")
transaction.commit_unless_managed()
#self.delete() #if needed (perhaps deleted on raw sql)
但我想在聊天結束時複製數據。這是其中一種觀點引發的。 – Sussagittikasusa
@Sussagittikasusa,在帖子中回覆。這是你說的嗎? – danihp
是的,謝謝,我得到了這個解決方案。那麼你說的是什麼分區,我不完全明白如何在不把它們分成兩張表的情況下做到這一點。 – Sussagittikasusa