2012-10-12 88 views
3

PostgreSQL支持異步提交 - 也就是說,即使數據庫尚未完成預寫日誌同步,數據庫引擎也可以配置爲報告成功。Django PostgreSQL異步提交

http://www.postgresql.org/docs/8.3/static/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT

這提供運行在它保證在數據庫崩潰的情況下,它會保持在一致的狀態的方式,某些查詢之間的有效折衷,然而,一些涉嫌犯交易將會出現,如果他們已被徹底放棄。

很顯然,對於一些事務來說,提交保持最終狀態至關重要 - 這就是爲什麼可以爲每個事務配置標誌的原因。

如何在django中利用此功能?

+1

看起來像開始你的事務後,[你可以調用'.raw('SET LOCAL synchronous_commit TO OFF;');'](https://docs.djangoproject.com/en/dev/topics/db/ sql /) –

+0

這非常有用 - 它可以配置爲在保存某些模型時自動運行嗎? – qdot

回答

3

首先我第二個弗蘭克的筆記。這是做到這一點的方法。

但是,如果你這樣做,你可能希望有一個函數在每個可能提交的API上設置它。這似乎對我來說很容易出錯,所以我可能不會惹惱它,而是會努力將事務分批處理到相同的事務處理中,以達到合理的程度。我建議在模型中進一步提供一種方法來顯示設置(SHOW synchronous_commit),以便您可以正確進行單元測試。

再一次因爲這是一個會話設置,這讓我覺得這樣玩會有點危險,但是如果你採取了必要的預防措施就可以做到這一點。

+0

以這種方式批量處理實際上很困難 - 基本上,系統是一個又一個日誌分析器解決方案,旨在從部署的程序中捕獲大量日誌數據。因此,配置表和分析表需要嚴格的ACID保證,但實際的日誌表只需要乾淨的重新啓動 - 在出現故障時一些條目會丟失,讓我們讓更多條目丟失並獲得巨大的性能提升。也許我只是使用兩個數據庫連接,一個用於安全模型,一個用於快速流模型? – qdot