2010-02-12 49 views
17

我有網頁需要10 - 20個數據庫查詢才能獲取所有需要的數據。是否有可能在Django應用程序中執行異步/並行數據庫查詢?

正常情況下,查詢被送出後,Django的線程/進程被阻塞等待結果回來,然後它會直到它到達下一個查詢恢復執行。

是否有任何方式發出的所有查詢異步,使他們能夠通過並行數據庫服務器(一個或多個)進行處理?

我正在使用MySQL,但也想聽聽其他數據庫的解決方案。例如,我聽說Postgresql有一個異步客戶端庫 - 在這種情況下,我將如何使用它?

回答

5

這非常最近博客文章似乎在暗示,它不是建立在要麼Django的或軌道框架。我認爲它涵蓋了這個問題,非常值得一讀與評論。

http://www.eflorenzano.com/blog/post/how-do-we-kick-our-synchronous-addiction/

我想我還記得卡爾·亨德森某處提這方面的不足在他的精彩演講http://www.youtube.com/watch?v=i6Fr65PFqfk

我天真的猜測是,你也許可以破解,獨立Python庫的東西,但你會失去很多ORM /模板懶惰評估的東西django給你的觀點,你可能會使用另一個堆棧。然後,如果你只是在一個大的django項目中優化幾個視圖,它可能會很好。

0

嘗試Celery,需要運行ampq服務器,但它可能會做你想做的事。不確定數據庫併發性。另外,如果你想爲你的數據庫速度,我建議MongoDB(但你需要django-nonrel)。

+0

運行ampq服務器是不是強制性的。簡單的memcache或redis隊列工作正常。我會*不*親自推薦MongoDB。除了django-norel在很大程度上放棄了它(它仍然在1.4.1.4是2013年的EOLed,並延長了suppoort(安全等)在2015年EOLed),MongoDB真的只會更快,如果你放棄某種程度的ACID遵守將其作爲內存中的商店運行。在我看來,這對客戶數據來說是一件可怕的事情。 – Shayne 2017-06-22 02:36:55

+0

redis後端正在辯論中被棄用。僅供參考。 – DylanYoung 2017-10-05 13:44:07

4

我也有類似的問題,我用JavaScript/AJAX

解決它只是基本的標記加載模板,然後做severl阿賈克斯requsts來執行查詢並加載數據。你甚至可以顯示加載動畫。用戶將有一個Web 2.0的感覺,而不是隻是鬱悶的頁面加載。當然,這意味着每頁有多個HTTP請求,但是由您決定。

這裏是我的例子中的樣子:http://artiox.lv/en/search?query=test&where_to_search=all(斷鏈)

相關問題