我有一個龐大的數據庫,我希望我的應用程序儘快與它一起工作。我使用的是Android,所以資源更受限制。我知道在sqlite數據庫中存儲大量數據並不是一個好主意,但我需要這個。快速只讀sqlite數據庫
每個數據庫只包含一個表格,我只使用它。
您可以給我什麼建議來儘可能優化數據庫。我已經閱讀this後,除了PRAGMA命令我還能使用什麼?
也許有一些特殊的類型限制只讀查詢的表,但主要比普通表類型更快?
我有一個龐大的數據庫,我希望我的應用程序儘快與它一起工作。我使用的是Android,所以資源更受限制。我知道在sqlite數據庫中存儲大量數據並不是一個好主意,但我需要這個。快速只讀sqlite數據庫
每個數據庫只包含一個表格,我只使用它。
您可以給我什麼建議來儘可能優化數據庫。我已經閱讀this後,除了PRAGMA命令我還能使用什麼?
也許有一些特殊的類型限制只讀查詢的表,但主要比普通表類型更快?
巨大是相對的。但最終設備受限於存儲和內存。因此,假設巨大的設備超出了設備的典型限制,您有幾個選擇。
第一個選項是將您的大型數據集存儲在雲中,並且連接的設備可以通過提供雲服務,例如來自coud的RESTful API將數據提供給設備,從而爲這些數據提供視圖。如果設備和應用依賴於始終連接,則除非要緩存數據,否則不需要太多的本地存儲。
另一種方法是偶爾連接的設備(有時是離線的),您可以在其中下拉一部分與設備相關的最相關數據。在這種模式下,你可以離線工作並推送/回拉到雲端。在這個模型中,sqlite是保存相關數據片的存儲機制。
編輯基於評論:
關於優化你的設備是什麼,請參閱優化常見問題在這裏:
http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html
(根據有效的粗糙順序)
只要更換內存分配庫作爲數據庫擬合在設備上,沒有問題;你將只有更少的空間用於其他應用程序。
沒有特殊的表格類型。但是,如果您的查詢僅使用表格列的子集,並且您有足夠的空間,請考慮添加一個或多個covering indexes。
被讀取,只允許數據庫在桌面上進行優化,在部署之前:
在您的應用程序,你可能會增加page cache size實驗,但如果你的工作集比可用內存越大,無論如何也不會幫助。無論如何,從閃存中隨機讀取的速度都很快,所以這不成問題。
ANALYZE&VACUUM命令似乎很容易使用.. – pleerock
也許我是說明顯的,但你可能應該打開它SQLITE_OPEN_READONLY
標誌sqlite3_open
:我認爲SQLite將利用這一事實並優化引擎的行爲。
注意,一切正常SQL(ITE)優化技巧仍然適用(比如吸塵敲定數據庫,在創建數據庫,適當的索引等...設置正確的頁面大小)
此外,如果你有多個線程在應用程序訪問數據庫,您可能還希望嘗試一下SQLITE_OPEN_NOMUTEX
和SQLITE_OPEN_SHAREDCACHE
標誌(他們需要sqlite3_open_v2,雖然)
你也需要軸頸關掉,因爲數據不會改變http://www.sqlite.org/pragma.html#pragma_journal_mode PRAGMA journal_mode = OFF
雲是不可接受的。第一個原因是應用程序應該在有或沒有互聯網連接的情況下工作。第二個原因 - 應用程序在實時模式下處理大量數據,所以它會減慢進度。我其實不擔心數據庫的存儲,我擔心查詢 – pleerock
的快速感謝您的答覆。我不擔心設備上數據庫的大小。大小不是問題。我擔心查詢時間。我想盡快將結果提供給用戶,所以我正在尋找一些技巧,可以幫助查詢時間 – pleerock
OK - 我添加了一些優化點。 – bryanmac