【问题标题】:Django data creation and commitsDjango 数据创建和提交
【发布时间】:2009-09-15 19:37:59
【问题描述】:

我不确定我是否 100% 了解数据库的功能。如果我只是有一些误解,请指出。

假设我有一个函数想要在数据库中创建 100 个新条目,其中包含 100,000 个条目。

当这 100 个条目被创建并且在最后一个条目被创建之后进行提交时,似乎要快得多。

现在,如果这 100 个条目是由不同的用户创建的,是否有一种简单的方法仅在创建 100 个条目后才提交?

编辑: 我应该写一些缓冲区吗?

【问题讨论】:

    标签: database django django-models


    【解决方案1】:

    数据库针对基于集合的操作进行了优化,所以是的,在集合中插入 100 条记录比一次插入一条记录要快。但是,当您谈论用户一次输入一个记录时,在我能想到的任何情况下,您都不想将它们组合在一起。为什么?

    首先,如果有一个不良记录,其他记录就会失败。这将使 100 个用户中有 99 个脾气暴躁(实际上是 100 个,但一个人并没有真正的理由脾气暴躁,因为他一开始就输入了错误的数据)。 其次,用户在输入后不会立即看到记录。确实,在输入这​​些记录之前,他们无法对这些记录进行进一步的处理,例如将数据输入到相关表中。有这样的延迟会让用户胡思乱想。如果用户通过电话从客户那里输入数据,他们在等待时会特别暴躁(我在呼叫中心工作过一个非常慢的商业产品,相信我,我知道用户过去常常感到多么沮丧!) 第三,用户会继续做其他事情,并且不会意识到他们的数据因错误信息而被拒绝,这根本不是一件好事。 您要等待多长时间才能获得设定的记录数? 5 秒,10 分钟? 如果在那段时间由于某种原因网络连接丢失,用户不会丢失他们输入的数据。

    【讨论】:

      【解决方案2】:

      可能能够一起破解类似的东西,但您真的不应该,因为它破坏了您的数据完整性,这是使用事务的全部意义.

      在您提出的解决方案中,批处理中的任何插入出现问题都会导致来自完全不同用户的所有其他(可能完全有效)插入失败。此外,用户将无法看到他们刚刚尝试插入的数据,因为系统一直在等待插入,直到批次已满。

      附:这是quick intro to transaction processing

      【讨论】:

        【解决方案3】:

        我认为你确实有一个误解。听起来您将数据库视为仅用于某种​​“长期”记忆的东西。这是一个糟糕的概念;数据库是您的应用程序拥有的唯一内存。即使这不是真的,最好假装它是。

        再深入一点,您的应用程序具有:

        • 作用域内存:例如,您在视图函数中定义的变量。当流离开函数时,这些都会被销毁。
        • globals:在代码最外层定义的变量。除了配置常量之外,不要将它们用于任何类型的状态,这一点非常重要。重要的是您应该依赖任何动态行为。否则,您将不得不与彼此不知道的并发分叉进程(取决于服务器网关)作斗争。只是不要这样做。
        • 一种缓存方案,如果您选择实现一个。这在 django 中完全是可选的,有很多方法可以做到。但是,通常会使用某种方案来确保即使缓存崩溃,数据库也能准确地反映数据的当前状态。
        • 您的本地文件系统。从设计的角度来看,大多数利用这一点的方法要么类似于缓存系统(上图),要么笨拙且脆弱。从性能的角度来看,它可能与数据库一样慢。
        • 您的数据库。

        因此,您会发现除了数据库之外没有太多地方可以放置您的数据。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-12-14
          • 2013-12-27
          • 1970-01-01
          • 1970-01-01
          • 2016-07-11
          • 1970-01-01
          • 1970-01-01
          • 2014-12-13
          相关资源
          最近更新 更多