Django数据创建和提交

时间:2009-09-15 19:38:00

标签: database django django-models

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

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

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

现在,如果这100个条目是由不同的用户创建的,那么只有在创建了100个条目后才能提交一个简单的方法吗?

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

3 个答案:

答案 0 :(得分:2)

可能能够一起破解这样的东西,但你真的不应该,因为它破坏了你的数据完整性,这是使用事务的全部要点

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

P.S。这是一个quick intro to transaction processing

答案 1 :(得分:2)

数据库针对基于集合的操作进行了优化,因此,一次在一个集合中插入100条记录的速度会更快。但是,当您谈到用户每次输入一个记录时,您不希望在我能想到的任何情况下将它们组合在一起。为什么?

首先,如果有一个不良记录,其他人将失败。这将使99个胡思乱想的用户中的100个(实际上是100个,但是由于他在开始时输入了错误的数据,因此没有理由感到胡思乱想)。 其次,用户在输入后不会立即看到记录。同样,在输入这​​些记录之前,他们将无法对这些记录做进一步的操作,例如将数据输入到相关表中。像这样的延迟会让用户胡思乱想。如果用户通过电话从客户输入数据,他们在等待时会特别胡思乱想(我在一个呼叫中心工作的商业产品非常慢,相信我知道用户过去有多难过!) 第三,用户将继续使用其他东西,并且不会意识到他们的数据因不良信息而被拒绝,而不是一件好事。 你有多长时间等待获得你设定的记录数量? 5秒,十分钟? 如果由于某种原因在这段时间内网络连接丢失,用户将丢失他们输入的数据,会发生什么。

答案 2 :(得分:1)

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

为了更深入,您的应用程序具有:

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

所以你看到除了数据库之外你没有多少地方放置数据。