SnappyDB
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
Usage
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.
Installation
SnappyDB uses native code for performance, it's available for the three main architecture of Android: ARM, x86 and mips.
Gradle
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.+'
}
Maven
<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>
Manual
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
Cookbook
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
Create database
Create using the default name
DB snappydb = DBFactory.open(context);
Create with a given name
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
Open database
Open using the default name
DB snappydb = DBFactory.open(context);
Open using a given name
DB snappydb = DBFactory.open(context, "books");
Close database
snappydb.close();
Destroy database
snappydb.destroy();
Insert primitive types
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);
Read primitive types
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");
Insert Serializable
AtomicInteger objAtomicInt = new AtomicInteger (42);
snappyDB.put("atomic integer", objAtomicInt);
Read Serializable
AtomicInteger myObject = snappyDB.get("atomic integer", AtomicInteger.class);
Insert Array
Number[] array = {new AtomicInteger (42), new BigDecimal("10E8"), Double.valueOf(Math.PI)};
snappyDB.put("array", array);
Read Array
Number [] numbers = snappyDB.getArray("array", Number.class);
Check Key
boolean isKeyExists = snappyDB.exists("key");
Delete Key
snappyDB.del("key");
License
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.