2016-12-01 81 views
0

我必須執行2個查詢:查詢A很長(20秒),查詢B很快(1秒)。 如果查詢A正在運行,我希望保證查詢B的執行速度也很快。 我如何實現這種行爲?Nodejs和Sqlite。執行長查詢

回答

0

由於SQLite的鎖定方式,這可能並不容易。

來自官方的Appropriate Uses For SQLite文檔:

SQLite支持同時讀者的數量不受限制,但只允許在任何時刻一個作家的時間。對於很多情況,這不是問題。作家排隊。每個應用程序都快速完成其數據庫工作並繼續前進,並且不會有超過幾十毫秒的鎖定。但是有一些應用程序需要更多的併發性,而這些應用程序可能需要尋求不同的解決方案。 [...] SQLite每個數據庫文件一次只支持一個寫入器。但在大多數情況下,寫入事務只需要幾毫秒,因此多個寫入者可以輪流進行。 SQLite將處理許多人懷疑的更多寫入併發性。儘管如此,客戶端/服務器數據庫系統,因爲他們有一個長期運行的服務器進程來協調訪問,通常可以處理比SQLite更多的寫入併發性。

如SQLite文檔所述,當您擁有如此多的數據以至於單個查詢需要這麼長時間時,它可能不是使用SQLite的最佳方式。

除了使用像PostgreSQL這樣的真正的RDBMS之外,沒有簡單的解決方案可以解決這個問題。

而且由於您沒有包含那些需要這麼長時間的查詢,所以除此之外,還無法告訴您任何事情。當然,也許你的查詢可以優化,但我們不知道。

+0

查詢是一個簡單的select * from表,並且該表具有10000000條記錄(例如)。 – user2957271