2014-02-24 77 views
0

我正在開發一個android應用程序,它每隔30秒獲取用戶位置並存儲在應用程序自己的sqlite數據庫中。在我的計算中,我需要存儲大約1個Lac記錄。我只有一張表,其中包含以下詳細信息: ID(整數),緯度(實際),經度(實際),日期(文本),時間(文本)。Android Sqlite存儲限制

在sqlite中存儲細節安全嗎?

它會導致性能方面的問題嗎?

請幫幫我。

回答

0

SQLite中字符串或BLOB中的最大字節數由預處理器宏SQLITE_MAX_LENGTH定義。這個宏的默認值是10億(1億或1,000,000,000)。您可以提高或使用命令行選項像這樣降低在編譯時該值:

使用這個鏈接對你有所幫助

http://www.sqlite.org/limits.html

3

我還開展了類似的一種應用程序的我曾經每隔一秒就存儲一次用戶的位置。記錄計數用於超越Lacs的方式。 我也擔心數據庫錯誤或任何此類性能問題,但令人驚訝的是,直到目前爲止,還沒有出現這樣的問題。

我還實施了一種方法,在記錄數達到10億時備份我的數據庫,並以全新的方式刷新數據庫。

爲了做到這一點,我創建了另一個表,其中包含備份數據庫的唯一ID和時間戳,以及它在設備上的存儲位置。

我也一直保持每1000條記錄同步到網絡服務器作爲失敗證明和備份數據庫。

有趣的是,所有這些數據總是在一些KBs中。 :-)

3

SQLite的限制通常對移動設備不感興趣。該設備受到更多限制。

例如,如果每30秒添加1kB的數據,則每年會產生大約60GB的數據。這不適合任何設備,但對SQLite來說不會有問題。

如果查詢速度慢,性能會成爲問題。索引查詢在log(N)時間的一些變化中運行,這意味着使用數十億行數據的性能幾乎與幾千行相同。如果你的查詢比較複雜,你可能很容易進入N^2的複雜性,或者更糟糕的是,一旦你達到一千行,性能就會變得糟糕。多一點在這裏:http://www.sqlite.org/queryplanner.html

我會建議保持這個大小的限制,並添加一種方式來回收數據,如果沒有足夠的空間。內部存儲(沒有足夠的空間來安裝新的應用程序?)通常非常有限。

+0

所以,你可以告訴我我的一個記錄的大小。我已經指定了有關的實地細節。 –

+0

我不知道它有多大。但是,如果您創建示例數據庫並填充一些記錄,然後添加幾千個數據庫並查看文件大小如何更改,則可以找出自己。如果您生成符合實際生產中使用的僞隨機數據,您將得到最準確的結果。我懷疑1個記錄大約是150個字節,所以你可以在幾兆字節內存儲很多。 (比一個記錄是1kB多10倍,但是如果你的應用運行了一年,仍然會達到超過電話容量的6GB) – zapl

+0

該應用僅用於5-6個月使用的特殊用途。一天的應用程序將在4-5小時內激活(每30秒插入一次記錄)。所以在sqlite中保存數據確實有意義? –