我不知道我100%明白数据库的作用。如果我只是有一些误解,请指出。Django的数据创建和提交
比方说,我有一个函数,想要在数据库中创建100个具有100,000个条目的新条目。
当这100个条目获得创建并且在创建最后一个条目后进行提交时,似乎要快得多。
现在,如果这100个条目是由不同的用户创建的,那么只有在创建了100个条目后才有提交的简单方法吗?
编辑: 我应该写一些缓冲区?
我不知道我100%明白数据库的作用。如果我只是有一些误解,请指出。Django的数据创建和提交
比方说,我有一个函数,想要在数据库中创建100个具有100,000个条目的新条目。
当这100个条目获得创建并且在创建最后一个条目后进行提交时,似乎要快得多。
现在,如果这100个条目是由不同的用户创建的,那么只有在创建了100个条目后才有提交的简单方法吗?
编辑: 我应该写一些缓冲区?
数据库针对基于集合的操作进行了优化,因此是的,一次插入100个记录的速度会快于一次。但是,当您谈论用户每次输入记录时,您不希望在任何我能想到的情况下将它们组合在一起。为什么?
首先,如果有一个不良记录,其他人将失败。这将使99个用户中有100个(实际上是100个),但其中一个不会因为开始时输入错误数据而导致系统故障。 其次,用户输入后不会立即看到记录。在输入数据之前,他们将无法对这些记录做进一步处理,例如将数据输入相关表格。有这样的延迟会让用户胡思乱想。如果用户通过电话向客户输入数据,他们会特别胡思乱想(我在一个呼叫中心工作,商业产品速度非常慢,并且相信我知道用户曾经得到过多么不安)! 三,用户将会继续其他事情,并且不会意识到他们的数据因为不良信息而被拒绝,而不是一件好事。 您要等多久才能获得您设置的记录数? 5秒钟,十分钟? 如果由于某种原因,网络连接在此期间丢失,会发生什么情况,用户会丢失他们输入的数据。
您可能能够破解这样的事情一起,但你真的应该没有,因为它击毁你的数据的完整性,这是使用交易的全部意义。
在您提出的解决方案中,批次中任何插入的问题都会导致来自完全不同用户的所有其他(可能完全有效)插入失败。另外,用户将无法看到他们刚刚尝试插入的数据,因为系统在等待批量填满之前等待插入。
我想你确实有一种误解。这听起来像是你将数据库看作只是某种“长期”内存的东西。这是一个糟糕的概念;该数据库只有你的应用程序具有的内存。即使这不是真的,最好假装它是。
要更深入一点,你的应用有:
因此,您会发现除了数据库之外,没有太多的地方可以放置数据。