SnappyDB is a key-value database for Android it's an alternative for SQLite if you want to use a NoSQL approach.
It allows you to store and get primitive types, but also a Serializable object or array in a type-safe way.
SnappyDB can outperform SQLite in read/write operations.
SnappyDB is based on leveldb and use snappy compression algorithm, on redundant content you could achieve a good compression ratio
try {
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();
} catch (SnappydbException e) {
}
For more recipes please take a look at the Cookbook.
With SnappyDB you could seamlessly store and retrieve your object/array, it use Kryo serialization which it faster than regular Java serialization.
SnappyDB uses native code for performance, it's available for the three main architecture of Android: ARM, x86 and mips.
To download & install correctly the native lib (.so) you have to use the android-native-dependencies Gradle plugin.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.10.+'
classpath 'com.nabilhachicha:android-native-dependencies:0.1+'
}
}
apply plugin: 'android'
apply plugin: 'android-native-dependencies'
native_dependencies {
artifact 'com.snappydb:snappydb-native:0.2.+'
}
dependencies {
//regular Jar dependencies ...
compile 'com.snappydb:snappydb-api:0.2.+'
}
<dependency>
<groupId>com.snappydb</groupId>
<artifactId>snappydb-api</artifactId>
<version>0.2.0</version>
</dependency>
<!-- ARM libraries -->
<dependency>
<groupId>com.snappydb</groupId>
<artifactId>snappydb-native</artifactId>
<version>0.2.0</version>
<classifier>armeabi</classifier>
<type>so</type>
</dependency>
<dependency>
<groupId>com.snappydb</groupId>
<artifactId>snappydb-native</artifactId>
<version>0.2.0</version>
<classifier>armeabi-v7a</classifier>
<type>so</type>
</dependency>
<!-- x86 library -->
<dependency>
<groupId>com.snappydb</groupId>
<artifactId>snappydb-native</artifactId>
<version>0.2.0</version>
<classifier>x86</classifier>
<type>so</type>
</dependency>
<!-- MIPS library -->
<dependency>
<groupId>com.snappydb</groupId>
<artifactId>snappydb-native</artifactId>
<version>0.2.0</version>
<classifier>mips</classifier>
<type>so</type>
</dependency>
You need to download the zip containing the native libraries (.so) and the api.
- Eclipse ADT
- Copy them under
libs
directory.
- Copy them under
- Android Studio
- Copy the native (.so) under
jniLibs
directory &snappydb-api-0.2.0.jar
underlibs
.
- Copy the native (.so) under
Common tasks snippets
- Create database
- Open database
- Close database
- Destroy database
- Insert primitive types
- Read primitive types
- Insert Serializable
- Read Serializable
- Insert Array
- Read Array
- Check key
- Delete key
DB snappydb = DBFactory.open(context);
DB snappydb = DBFactory.open(context, "books");
SnappyDB use the internal storage to create your database. It creates a directory containing all the necessary files Ex:
/data/data/com.snappydb/files/mydatabse
DB snappydb = DBFactory.open(context);
DB snappydb = DBFactory.open(context, "books");
snappydb.close();
snappydb.destroy();
snappyDB.put("quote", "bazinga!");
snappyDB.putShort("myshort", (short)32768);
snappyDB.putInt("max_int", Integer.MAX_VALUE);
snappyDB.putLong("max_long", Long.MAX_VALUE);
snappyDB.putDouble("max_double", Double.MAX_VALUE);
snappyDB.putFloat("myfloat", 10.30f);
snappyDB.putBoolean("myboolean", true);
String quote = snappyDB.get("quote");
short myshort = snappyDB.getShort("myshort");
int maxInt = snappyDB.getInt("max_int");
long maxLong = snappyDB.getLong("max_long");
double maxDouble = snappyDB.getDouble("max_double");
float myFloat = snappyDB.getFloat("myfloat");
boolean myBoolean = snappyDB.getBoolean("myboolean");
AtomicInteger objAtomicInt = new AtomicInteger (42);
snappyDB.put("atomic integer", objAtomicInt);
AtomicInteger myObject = snappyDB.get("atomic integer", AtomicInteger.class);
Number[] array = {new AtomicInteger (42), new BigDecimal("10E8"), Double.valueOf(Math.PI)};
snappyDB.put("array", array);
Number [] numbers = snappyDB.getArray("array", Number.class);
boolean isKeyExists = snappyDB.exists("key");
snappyDB.del("key");
SnappyDB is opensource, contribution and feedback are welcomed
Copyright 2013 Nabil HACHICHA.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.