問題:發展爲iOS/Android上HTML5離線存儲在溶液2011
我需要用於在電話或平板型存儲和查詢250,000+行的數據脫機的不可知的設備(例如HTML5)溶液設備(例如iOS/Android)。我的想法是,有人在沒有任何蜂窩數據連接的偏遠地區工作,他們需要對這些數據運行查詢並在離線時進行編輯。部分將基於地理位置,所以如果他們所在區域有資產(使用GPS),那麼它將顯示這些資產並讓它們進行編輯。當他們返回辦公室時,他們可以將數據同步回辦公室服務器。
我從網絡標準的角度來看待這個問題的原因基本上是通過在HTML5中編寫一次,然後在多個平臺上工作而不是在Objective C和Java中編寫兩次,從而節省資金和時間。另外,如果你寫的東西是平臺不可知的,那麼你就沒有被鎖定,當每個人轉向更新的時候,不要隨着船停下來。我們爲Windows Mobile 5編寫了一個類似的應用程序,現在它無用,因爲該平臺已經死亡。
設備上的脫機數據庫需要:
- 快(在2秒的響應)
- 潛在執行連接,並具有與其它表能夠查詢數據庫內
- 選擇數據關係一定的範圍或標準,例如由x & y座標基於GPS讀數。
選項:
HTML5本地存儲:
精細的少量數據< 5000鍵/值的,你甚至可以儲存陣列/它的對象如果轉換它到JSON。
缺點:
- 在超過10,000行甚至高端機上的瀏覽器將 慢如蝸牛。
- 無法對數據執行復雜查詢以提取所需的數據,因爲您必須遍歷整個存儲並手動搜索它。
- 限制與可存儲
的Web SQL數據庫的存儲量:
- 符合要求。
- 快速對250000行(1-2secs)
- 可以創建複雜的查詢,聯接等
- 支持Safari瀏覽器,Android和歌劇院等都將在iOS和Android設備
工作運行查詢缺點:
- 棄用2010年11月
- 安全漏洞跨目錄攻擊。不是真的,因爲我們不會對一個問題共同主辦
IndexedDB的:
鍵/值對象存儲類似於本地存儲除非索引。
缺點:
- 慢到200,000行(15-18secs)運行一個查詢
- 無法運行復雜的查詢
- 不能做與其他表聯接
- 不受主要手機或平板電腦設備的支持,例如的iPad/Android的
- 標準不完全
這使得實現棄用的網絡SQL方法,其可以僅一年左右工作的唯一選擇。 IndexedDB和本地存儲目前無法使用。
我不確定Mozilla和微軟如何取消Web SQL數據庫標準,以及W3C爲什麼讓它發生。據說他們之間有77%的桌面瀏覽器市場。在高級移動設備上,Mozilla和Microsoft幾乎沒有影響,因爲Safari, Opera and Android have over 90% of the market share。微軟可以決定哪種標準應該在移動市場中使用,這是最有可能使用離線存儲的地方,這沒有任何意義。
在comments from Mozilla關於他們爲什麼想要使用IndexedDB的原因主要是關於'開發人員美學',他們不喜歡在JavaScript中運行SQL的想法。我不買它。
目前提出的標準比較低級,而且非常基本的NoSQL實現很慢,甚至不支持人們在數據庫中需要的高級功能。有許多樣板代碼可以建立數據庫並獲取數據,但他們聲稱人們會在其頂部編寫一些很好的抽象庫來提供更高級的功能。截至2011年10月,他們無處可見。
他們已經棄用了現有的Web SQL標準,它實際上在主要的移動/平板電腦瀏覽器中運行並實現。而他們的「新」和「更好」標準在主流移動瀏覽器中不可用。
作爲開發人員,我們應該在未來3 - 5年內使用什麼樣的應用程序?IndexedDB規範可能會被標準化,具有更多功能,在主流移動/平板電腦瀏覽器中實現,並且有一些不錯的庫讓事情變得更容易?
W3C應該保持Web SQL數據庫標準並行運行,並解決問題。它已經支持主要的移動平臺,並且工作得很好。 Mozilla和微軟作爲擁有最多桌面瀏覽器份額的兩家玩家能夠獲得此標準的事實相當可疑,可以被視爲阻礙移動網絡平臺進展的一種嘗試,直到他們能夠趕上和提供針對iOS/Safari和Android的競爭解決方案。
總之有沒有人有我的問題的解決方案,適用於iOS/Android的手機/平板電腦設備。也許一個很好的包裝API,可以在後臺使用多個數據庫實現查詢功能,它可以讓你選擇哪個數據庫具有優先權。我已經看到了諸如lawnchair之類的東西,但我確定它只允許您默認使用本地存儲並回退到其他位置。我想我寧願使用Web SQL(默認情況下),然後選擇較慢的選項。
任何解決方案的幫助非常感謝,謝謝!
寫得很好的文章!這是本地應用程序贏得原生應用程序和網絡應用程序參數的那些情況之一 - 但我知道你不想聽到這種情況。在這種情況下,根據我的知識,Web SQL是最好的選擇 - 我還會強制用戶下載與他們將要訪問的位置相關的行,而不是整個數據庫 - 如果您認爲他們可能需要更新某處連接,更不用說通過數據庫1/5大小(不確定數據庫的規模)搜索速度的增加 – amcc
他們不能用WebSQL「解決問題」,因爲標準的一個要求推進到W3C推薦狀態是「獨立的和可互操作的實現」。由於規範基本上是「做SQLite做的事情」,這是永遠不會發生的。 – robertc
@Vanthel謝謝是的,最好的地區已經分開,所以它的加載在所有數據的一個子集,但最大的地區仍然約250,000行。我想他們甚至可能會被打破。 – zuallauz