我不知道我100%明白數據庫的作用。如果我只是有一些誤解,請指出。Django的數據創建和提交
比方說,我有一個函數,想要在數據庫中創建100個具有100,000個條目的新條目。
當這100個條目獲得創建並且在創建最後一個條目後進行提交時,似乎要快得多。
現在,如果這100個條目是由不同的用戶創建的,那麼只有在創建了100個條目後纔有提交的簡單方法嗎?
編輯: 我應該寫一些緩衝區?
我不知道我100%明白數據庫的作用。如果我只是有一些誤解,請指出。Django的數據創建和提交
比方說,我有一個函數,想要在數據庫中創建100個具有100,000個條目的新條目。
當這100個條目獲得創建並且在創建最後一個條目後進行提交時,似乎要快得多。
現在,如果這100個條目是由不同的用戶創建的,那麼只有在創建了100個條目後纔有提交的簡單方法嗎?
編輯: 我應該寫一些緩衝區?
數據庫針對基於集合的操作進行了優化,因此是的,一次插入100個記錄的速度會快於一次。但是,當您談論用戶每次輸入記錄時,您不希望在任何我能想到的情況下將它們組合在一起。爲什麼?
首先,如果有一個不良記錄,其他人將失敗。這將使99個用戶中有100個(實際上是100個),但其中一個不會因爲開始時輸入錯誤數據而導致系統故障。 其次,用戶輸入後不會立即看到記錄。在輸入數據之前,他們將無法對這些記錄做進一步處理,例如將數據輸入相關表格。有這樣的延遲會讓用戶胡思亂想。如果用戶通過電話向客戶輸入數據,他們會特別胡思亂想(我在一個呼叫中心工作,商業產品速度非常慢,並且相信我知道用戶曾經得到過多麼不安)! 三,用戶將會繼續其他事情,並且不會意識到他們的數據因爲不良信息而被拒絕,而不是一件好事。 您要等多久才能獲得您設置的記錄數? 5秒鐘,十分鐘? 如果由於某種原因,網絡連接在此期間丟失,會發生什麼情況,用戶會丟失他們輸入的數據。
您可能能夠破解這樣的事情一起,但你真的應該沒有,因爲它擊毀你的數據的完整性,這是使用交易的全部意義。
在您提出的解決方案中,批次中任何插入的問題都會導致來自完全不同用戶的所有其他(可能完全有效)插入失敗。另外,用戶將無法看到他們剛剛嘗試插入的數據,因爲系統在等待批量填滿之前等待插入。
我想你確實有一種誤解。這聽起來像是你將數據庫看作只是某種「長期」內存的東西。這是一個糟糕的概念;該數據庫只有你的應用程序具有的內存。即使這不是真的,最好假裝它是。
要更深入一點,你的應用有:
因此,您會發現除了數據庫之外,沒有太多的地方可以放置數據。