2014-12-19 39 views
0

假設我有1000條記錄,可變大小,範圍從大約256字節到幾K.我不知道是否有將它們放入一個SQLite數據庫而不只是讀/寫1000頁鬆散的文件在iOS上的任何優勢?我不需要做任何操作,只能通過一個單獨的密鑰訪問,我可以使用它作爲文件名。似乎文件系統將成爲贏家,除非記錄數量增長非常大。iOS SQLite或1000個鬆散文件?

+2

這取決於您使用它們的時尚了一點,但使用SQLite「斑點」或字符字段時,這些文件的數量超過一百元左右可能會是一個更好的選擇。 –

回答

3

如果你的系統是隻讀的,我要說的是,文件系統是明顯的贏家:一個簡單的二進制文件,也許一個小的指數知道每條記錄開始將所有你所需要的。您可以將整個索引讀入內存,然後根據需要從文件系統中獲取記錄,以獲得與任何RDBMS相匹配的性能。

但是,因爲你是在寫數據計劃後,我會建議使用SQLite會因爲潛在的數據完整性問題。

性能的關注不應該被低估,也:因爲你的記錄是大小可變的,寫回的數據可能被證明是困難的情況下,當記錄需要擴大。此外,由於您正在使用移動平臺,因此在寫入過程中意外終止程序時,您需要構建某些內容以避免數據損壞。 SQLite負責這個;你的代碼將不得不構建與之相媲美的東西,否則將面臨數據損壞問題。

+1

另一個支持SQLite的投票是1000個文件需要更多的磁盤空間,並且需要比包含相同數據量的單個數據庫文件多得多的時間進行復制。 – rmaddy

+0

您的第一段可能[錯](http://www.sqlite.org/intern-v-extern-blob.html)。 –

+0

@CL。測試不適用於我描述的場景。鏈接頁面討論了無論如何還存在SQLite表的情況以及blob中的數據。在這種情況下,您已經「花時間」通過加載適當的頁面訪問數據庫中的文件名,所以當您的BLOB較小時,您可以用相對較少的開銷獲得它們。我正在描述一種情況,即整個索引結構(無論可能如此)如此之小以至於它適合主內存。然後從文件讀取幾乎沒有開銷。 – dasblinkenlight