2012-09-18 49 views
0

Django allows auto database routing。測試和生產可能有不同的數據庫。測試的默認值是sqlite3。將從sqlite3遷移到couchdb將花費超過10分鐘的單元測試任何顯着的時間改進。跑步?用django測試優化代替默認的sqlite與couchdb數據庫

還有什麼其他的測試數據庫優化可以做?

+0

這裏似乎沒有足夠的信息。你是否僅僅爲了提高你的測試性能而切換?您的測試需要10分鐘才能運行:您是否考慮優化測試的性能?我認爲從SQL切換到NoSQL db需要很多返工:這裏是這種情況嗎? – Chris

回答

0

不確定您是否可以成功將SQLite替換爲CouchDB並保存所有功能,除非您的SQLite使用非常基本。知道sqlite可以做多少事情,這並不容易。

如果只使用相當簡單的SQL查詢或者對查詢結果進行復雜計算,CouchDB可以加速測試。由於CouchDB通過按需更新請求語義存儲隨時可用的結果,因此可以爲您節省一些CPU時間。

但是,您是否嘗試過使用:memory:存儲?或者在tmpfs上使用test db?還要注意,使用CouchDB測試可能會受到網絡延遲的影響 - HTTP請求並不像通過驅動程序調用函數那麼便宜(sqlite只是數據庫驅動程序,而不是完整的RDBMS)。

P.S.請注意,我不是從Django ORM或其他人的角度談論的,因爲他們通常不能提供像本地庫一樣的有效性。例如,SQLite允許自定義SELECT查詢,而views很少使用,而CouchDB更適合預定義views而不是自定義查詢(temporary views)。

+0

如果您在測試中使用sqlite3,則測試數據庫是在Django中的開箱即用內存中創建的。 – jasisz

+0

@jasiz真的嗎?我一直認爲配置依賴於行爲,因爲可能你想在所有測試運行之後查看db狀態,或者如果其中一些失敗,則可以概覽db狀態或使用預生成的db作爲測試目標等。除非測試似乎真的很痛苦。 – Kxepal

+0

是的,真的;)甚至其他數據庫經過測試後銷燬https://docs.djangoproject.com/en/dev/topics/testing/#the-test-database – jasisz

0

我建議使用完全不同的設置來開發/測試而不是路由器。

如果數據庫是測試運行這麼久的主要原因,那麼通常是因爲在每次測試之前使用裝載測試的裝置 - 使用https://github.com/dnerdy/factory_boy或類似的解決方案可能會非常有幫助。