gpt4 book ai didi

sql - 在 Django 中将数据从一个表复制到另一个表的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-01 15:08:26 26 4
gpt4 key购买 nike

我有两个模型 -

ChatCurrent -(存储当前事件聊天的消息)
ChatArchive -(存档已结束聊天的消息)

我这样做的原因是 ChatCurrent 表始终具有最少的条目数,从而可以快速查询表(我不知道这是否有效,如果我弄错了,请告诉我)

所以我基本上想从 ChatCurrent 复制(剪切)数据到 ChatArchive 模型。什么是最快的方法来做到这一点。从我在线阅读的内容来看,似乎我可能必须执行原始 SQL 查询,如果您愿意甚至说明查询,我将不胜感激。

额外细节 -
这两个模型具有相同的模式。

最佳答案

我的意见是,今天他们是没有理由denormalize database 以这种方式来提高性能。索引或 分区 + 索引应该足够了 .

另外,如果出于语义原因,您更喜欢使用 两 table (型号)如:Chat 和 ChatHistory(或 ChatCurrent 和 ChatActive),正如您所说并使用 django 管理它,我认为保持一致性的正确方法是 在 ChatCurrent 中创建 ToArchive() 方法 .此方法将聊天条目移动到历史聊天模型。您可以在 中执行此操作后台模式 ,然后您可以在 celery 中线程交换过程,这样在线用户就避免了等待请求。进入celery进程复制数据最快的方法是 raw sql .记住可以将sql封装成存储过程 .

编辑包括回复您的评论

您可以在 ChatCurrent.save() 方法中执行 ChatCurrent.ToArchive():

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)

关于sql - 在 Django 中将数据从一个表复制到另一个表的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8485569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com