2011-01-21 543 views
14

我目前正在開發一個應用程序,它有可能創建一個非常大的數據庫。我曾計劃在SD卡上安裝應用程序,以便騰出一些額外的空間。最近的交易已經告誡我,這可能不是一個好主意。我可以採取哪些措施來緩解這一行動的危險?還是有更好的選擇?在Android中處理大型數據庫

回答

11

這是關於這個問題的一個comprehensive post(我不是作者)。

我認爲,總體而言,需要傳達的信息是,SQLite只是一種訪問文件的SQL機制。看起來,整個APK的當前市場限制爲50mb。安裝到內存時,您需要2x的APK大小。安裝到SD卡只需要規定的APK大小。

這裏是你將致力於反對什麼:1。 )由於SQLite是剛剛超過你的文件的抽象,當你做選擇,插入,更新等,你會招致SD卡的讀寫成本 2)我已經看到基於性能提及soft limit of 10000 records。這篇文章有點老了,所以它可能會變得更好。

除此之外,您可能需要設置一些測試來查看哪些可行。谷歌粗略搜索沒有顯示任何基準迄今。

+0

很好的答案。 +1。我有一個疑問,如果sqlite文件是Android的外部,那麼會有什麼限制?它是否與桌面一樣或仍然有任何限制..? – Vinay 2013-08-20 08:59:19

4

如前所述,SQLite具有您要查找的功能,打包在一個小型庫中。它旨在通過可靠的,可恢復的,通過SQL API的事務數據訪問來取代簡單的文件訪問。關於他們的main page有一個很好的總結。

有幾千個項目正在使用SQLite。如果您的數據集將會非常大(超過100-200MB),那麼您可能需要考慮使用Berkeley DB作爲選項。 Berkeley DB最近推出了支持SQL API,它完全兼容SQLite。除了SQLite SQL解析器,查詢規劃器和執行器提供的功能外,您還可以獲得Berkeley DB衆所周知的可靠性和可伸縮性。我們有幾個客戶開心地使用SQLite。當他們意識到他們需要SQLite中不具備的其他併發性,可伸縮性和可靠性時,他們用BDB庫取代了SQLite庫,重新編譯了他們的應用程序,並在幾天內在伯克利進行了測試和運行。

我是Berkeley DB的產品經理之一,所以我有點偏見。 :-)然而,我們實現了BDB SQL API,以便我們爲用戶提供兩全其美的優點:SQLite的普遍性和易用性以及Berkeley DB的併發性,可靠性和可伸縮性。特別是對於較大的數據集,Berkeley DB可以在應用程序性能方面發揮重要作用。

+0

Berkeley DB是否適用於所有Android手機?將Android應用從SQLite切換到BDB是否容易? – 2011-01-25 05:26:36

2

如上所述,您可以在Android上使用Berkeley DB(不是Java版本)。我描述了交叉編譯過程here的步驟,因爲它需要較小的調整。