開發者如何為React Native選擇合適的資料庫
譯者 | 陳峻
策劃 | 雲昭
本文將和大家一起深入討論合適React Native的資料庫的各種特性和優缺點,並最終給出為React Native應用進行選擇時的建議。
如今,程式設計師們可以選用多種程式語言,來建立線上平臺、網站和應用程式。其中,在程式設計社群中,廣受不同開發背景的人員所推崇的一種流行語言,便是React Native。它是由Facebook的JavaScript工具包所構建,適合為移動平臺、而非Web,設計和建立獨特的使用者介面。目前,React Native已被廣泛地運用在採用JavaScript的框架,併為iOS和Android平臺構建移動應用的專案中。
可以說,該領域的開發者不但需要了解JavaScript和API服務、而且要能夠構建前端的UI,維護跨平臺的相容性、以及整合基礎架構與其他應用。下圖展示了歷年來,時下各種程式語言,在專案中被使用的佔比分佈。
目前,適合React Native應用的資料庫有:Async Storage、SQLite、Realm、以及PouchDB等。下面,我將和大家一起深入討論各種資料庫的特性和優缺點,並最終給出為React Native應用進行選擇時的建議。
PART 01
MMKV儲存
由C++開發的MMKV儲存具有快速高效的特點,可方便您在React Native應用中快速地儲存資料。同時,該資料庫非常輕巧。它在Android上僅佔50K空間,而在iOS上只有30K。如果被打包的話,其體積會更小。此外,MMKV不但支援redux-persist(持久化),而且允許使用者儲存任何形式(無論是否加密)的資料。
特徵如下:
-
支援加密(安全儲存)。
-
支援多例項(將使用者資料與全域性資料分開)。
-
自定義儲存位置。
-
由於一切都是用C++編寫的,因此具有高效能。
-
比Async Storage快大約30倍。
-
使用JSI框架,而不是舊的“橋”模式。
-
支援iOS、Android和Web。
-
易於使用React Hooks的API。
PART 02
Realm資料庫
由於可以使用動態對映到完整且專有的資料庫引擎,基於SQLite的Realm能夠處理各種原生的JavaScript物件,並在保持效能的同時,提供一套簡單的API。同時,Realm允許開發者建立各種高階搜尋、複雜的資料表示、以及在圖表中的事物連結。
Realm在Android中屬於輕量級資料庫。與下文將討論的SQLite相比,Realm不但使用的記憶體更少,而且在讀寫資料等常見操作上的速度更快。此外,它還具有極其豐富的功能集。
特徵如下:
-
由於Realm屬於物件儲存,因此物件之間的關係可以通過各種“連結”來實現。
-
每個“連結”都能夠建立一個與連結到當前物件的“反向連結”對映。
-
Realm可以更新其例項版本。
-
Realm帶有零拷貝(zero-copy)架構,以及延遲載入(lazy-loaded)式的資料訪問。
PART 03
SQLite
作為C語言資料儲存庫的SQLite,在移動應用程式中,特別適用於離線應用。許多平臺都以簡便的設定方式,提供了開箱即用的SQLite支援。而作為最著名的免費Android開發資料庫之一,它不但具有開源的顯著特點,而且可以滿足開發人員廣泛的專案需求。
特徵
-
能夠在iOS和Android上提供相同JavaScript API。
-
在各種Java和Native模式下,以及Android中都可以被使用。
-
其簡單的回撥(callback)和Promises可以被用於連線JavaScript裡的SQL事務。
-
可以從應用程式包和沙箱中,匯入預填充的SQLite資料庫。
-
Windows能夠像在iOS和Android上一樣,支援回撥API。
PART 04
Firebase
Firebase實時資料庫是一個由Google支援的應用開發平臺,可允許開發人員為iOS、Android和web建立各種應用。而作為一種基於雲端的NoSQL資料庫,Firebase可以通過提供分析跟蹤、報告、應用問題修復、以及市場和產品實驗功能(experimentation capabilities)等服務,在使用者之間實現實時儲存和資料同步。
特徵
-
即使應用處於離線狀態,資料也能在所有客戶端之間實時同步。
-
可以讓開發人員更專注於打造出色的使用者體驗,而無需管理伺服器。
-
Firebase為您準備好了通用的伺服器、API和資料儲存,您只需按照實際需求進行修改即可,而不需重新編寫。
-
按照雲託管資料庫的需求,Firebase可以將資料以JSON格式進行儲存,並進一步持續同步到每個關聯的客戶端上。
-
作為基於雲服務的資料庫,它可被用於管理應用程式的資料,並提供快速的資料結果。
PART 05
WatermelonDB
在React Native和React的線上專案中,WatermelonDB提供了一種管理使用者資料的新方法。它是專為建立複雜的React Native應用而設計的,且十分重視應用的實際效能。簡單而言,由於Watermelon的架構與資料庫無關,因此開發者可以橫跨多個平臺使用它,並能達到快速啟動軟體的效果。此外,作為一個高階資料管理層,Watermelon還可以根據平臺的要求,連線到任何React原生的資料庫層面上。
特徵
-
由於使用延遲載入,Watermelon DB可以只在被請求時才載入資料。據此,應用程式的可擴充套件性可以得到大幅增強。
-
由於所有的查詢都是在其不同的執行緒上完成的,因此大多數查詢只需不到1毫秒的時間。
-
無論後端的資料體量有多大,您都可以立即啟動應用程式。
-
它能夠與iOS、Android和web相相容。
-
它使用JavaScript的靜態型別檢查器,通過Flow的方式進行靜態型別轉化。
-
它具有快速、非同步、多執行緒和高度快取等特性,也可與同步引擎協同工作,以保持原生本地資料庫與遠端資料庫的同步。
PART 06
PouchDB
PouchDB是一個基於Apache CouchDB的開源JavaScript型別的資料庫。它針對在瀏覽器中的各種使用場景進行了優化。PouchDB在瀏覽器中會使用IndexedDB和WebSQL在本地儲存資料,並且持續實現本地和遠端資料庫的互動。據此,PouchDB可以幫助Web開發人員建立具有離線和線上等效功能的應用。也就是說,它允許應用在離線時,將資料儲存在本地,而在應用重新上線後,再與CouchDB和其他相容的伺服器相同步,以確保使用者的資料始終為最新。
特徵
-
由於PouchDB提供的API在所有瀏覽器中都是相同的,因此它可以在各種瀏覽器中被流暢地使用。
-
如果您對程式語言有所瞭解,那麼學習和理解PouchDB並非難事。
-
作為一種輕量級的API,我們可以方便地使用script標籤來包含它。
PART 07
Vasern
Vasern是一種基於連結一致性的鍵-值儲存式React Native資料儲存系統。其目標是提供一個開源、且對開發人員友好的端到端資料庫系統。而且,由於其資料引擎是從頭開始建立的,因此Vasern提供了原生的效能。
特徵
-
它通過UTF-8編碼來支援各種語言。
-
能夠支援字串、整數、雙精度、日期時間、以及引用等基本資料型別。
-
可以通過schema來建立、更新、查詢和刪除各種記錄。
PART 08
MySQL、MongoDB和DynamoDB
一些小型組織往往會使用MySQL、MongoDB和DynamoDB等伺服器端資料庫,進行React Native的應用開發。三者的比較如下:
開發人員在選擇資料庫之前需要考慮什麼?
眾所周知,在中小型軟體執行的過程時,資料往往是被儲存在變數之中的。不過,當程式重啟時,變數則會因為恢復初始值,而導致資料的丟失。對此,我們需要資料庫在能夠起到很好的資料儲存、保持、以及在程式重啟後的持續檢索等作用。通常,我們可以在為React Native應用選擇資料庫之前,考慮如下方面:
-
應確保資料庫具有足夠的記憶體,可供軟體的執行。
-
選擇可以處理複雜資料結構(如整篇文件或物件)的資料庫。
-
當用戶從離線恢復為線上狀態時,應能夠通過整合來實現資料庫中資料的同步。
-
容易實現應用與資料庫的整合。
PART 09
小結
上述介紹的各種資料庫分別有著自己的一組特性和優缺點。因此,在為React Native應用選擇合適的資料庫時,開發人員應當清楚地瞭解自己的專案目標和應用需求,通過試用、比較和深入研究,從中選擇最符合要求的資料庫。
原文連結:
http://dzone.com/articles/how-developers-need-to-choose-the-right-database-f
譯者介紹
陳峻 (Julian Chen),51CTO社群編輯,具有十多年的IT專案實施經驗,善於對內外部資源與風險實施管控,專注傳播網路與資訊保安知識與經驗;持續以博文、專題和譯文等形式,分享前沿技術與新知;經常以線上、線下等方式,開展資訊保安類培訓與授課。
粉絲福利
51CTO技術精選期刊
CTO悟道第四期
掃碼立即下載電子版
點選此處“ 閱讀全文 ”檢視更多精彩內容
- 再見SIM卡,eSIM的時代終於要來了
- 小心,陌生網友給你的賬號打上“標籤”
- 羊了個羊太難了,它是真的不想讓你成功…
- 少兒程式設計是智商稅嗎?看了最新研究我有點困惑
- 再見 Sidecars,eBPF 能否扛起新大旗?
- 一個案例告訴你K8s 區塊鏈有多強悍
- 60多款App慘遭下架,大廠日子也不好過
- 發現一個漏洞給22萬?谷歌這次賞金計劃可信嗎
- 終於,Web2平臺可以實現Web3功能了!
- 千萬別小看軟體架構風格,很多大廠架構師都在使用!
- 32位應用已經涼了!
- 薪資漲幅最高!竟然是這門快“入土”的程式語言
- PyPi儲存庫遭惡意利用,儘快刪除這12個病毒包!
- Swift 與 Go:蘋果與谷歌的較量
- 全網公開IP屬地,你的位置“露餡”了
- Rust難懂?一文解讀其“所有權”和“借用”概念
- GitLab禁止員工使用Windows、推特確認540萬賬戶資料洩露、淘寶宣佈上線方言語音搜功能 | T資訊
- JMS有必要和Kafka硬剛嗎?
- 再見!英特爾宣佈將徹底關停這項業務
- Go語言負責人離職後,一門國產語言誕生了