SnappyDB—Android上的NoSQL資料庫,snappydbnosql

來源:互聯網
上載者:User

SnappyDB—Android上的NoSQL資料庫,snappydbnosql

還是從需求出發。在開發App的時候,經常需要緩衝一些資料,不至於每次開啟App都是空的,需要從網路下載資料。例如新聞用戶端,需要緩衝上次開啟的新聞。

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

  • 使用SQLite資料庫儲存: 對於儲存快取資料來說,這樣做未免太重量級了,存取資料都比較麻煩。當然,你還要知道SQL文法。小心設計資料庫結構。對於相對複雜的資料,你還要設計多張表。還需要小心維護資料庫的升級。
  • 使用檔案快取: 寫檔案儲存,需要你儲存的資料都實現Serializable介面,當然,這不是什麼大問題。你要維護你的檔案內容結構。如果資料比較多,你可能要維護多個檔案的讀寫。效能也是比較堪憂。

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

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

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

12345678910111213 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"newString[]{"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介面。這就意味著你以前的代碼完全不要做任何改動。

?
123 Number[] array = {newAtomicInteger (42), newBigDecimal("10E8"), Double.valueOf(Math.PI)}; snappyDB.put("array", array);

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

再來看看效能,如:  可以看到,效能上甩SQLite幾條街。

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

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

http://shop116234616.taobao.com/?spm=a1z10.1-c.0.0.SngWMc

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.