SnappyDB—Android上的NoSQL數據庫

jopen 9年前發布 | 46K 次閱讀 SnappyDB 數據庫服務器

還是從需求出發。在開發App的時候,經常需要緩存一些數據,不至于每次打開App都是空的,需要從網絡下載數據。例如新聞客戶端,需要緩存上次打開的新聞。

一般的做是使用SQLite數據庫來保存數據,或者把數據序列化寫到本地文件中。這兩中方法,我在之前的項目中都用過。我先來說一下這兩種方法的缺點:

  • 使用SQLite數據庫保存: 對于保存緩存數據來說,這樣做未免太重量級了,存取數據都比較麻煩。當然,你還要知道SQL語法。小心設計數據庫結構。對于相對復雜的數據,你還要設計多張表。還需要小心維護數據庫的升級。
  • 使用文件緩存: 寫文件保存,需要你保存的數據都實現Serializable接口,當然,這不是什么大問題。你要維護你的文件內容結構。如果數據比較多,你可能要維護多個文件的讀寫。性能也是比較堪憂。

說了上面那些方法的缺點,自然是為了請出本文的主角——SnappyDB

SnappyDB是一個鍵-值數據庫,是非常流行的NoSQL數據庫。可以保存任何基本類型和序列化(Serializable)安全的數據及其數組。

首先來看一下基本用法,如下:

DB snappydb = DBFactory.open(context); //create or open an existing databse using the default name

snappydb.put("name", "Jack Reacher");  
snappydb.putInt("age", 42);  
snappydb.putBoolean("single", true);  
snappydb.put("books", new String[]{"One Shot", "Tripwire", "61 Hours"}); 

String   name   =  snappydb.get("name");  
int      age    =  snappydb.getInt("age");  
boolean  single =  snappydb.getBoolean("single");  
String[] books  =  snappydb.getArray("books", String.class);// get array of string

snappydb.close();

可以看到使用非常方便,API簡單到不用去學習。

另外,SnappyDB在保存和讀取序列對象的時候,使用的是Kryo庫,也Java內置序列化更快。更大的優勢是,你并不要為數據去顯式的去實現Serializable接口。這就意味著你以前的代碼完全不要做任何改動。

Number[] array = {new AtomicInteger (42), new BigDecimal("10E8"), Double.valueOf(Math.PI)};

snappyDB.put("array", array);

更多API文檔,請看官方的Cookbook

再來看看性能,如下圖: SnappyDB—Android上的NoSQL數據庫 可以看到,性能上甩SQLite幾條街。

當然,SnappyDB在數據的穩定性上,還是有待驗證的,應該是不如成熟的SQLite。多線程訪問安全問題,作者也沒有提到。但是從我們的需求(用來緩存數據)來看,SnappyDB應該是非常好的選擇。

這里我并沒有橫向比較Android上的其他NoSQL數據庫。例如realm-java,是一個比較嚴謹NoSQL的實現,還有簡單輕量級的實現,如Couchbase-Lite-AndroidSimpleNoSQL。這些都沒有用過,也不好做判斷,以后如果用上了,再來補充。

來自:http://www.race604.com/snappydb-nosql/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!