关于对leveldb的详细介绍可参考此文 一文了解levedb
1 leveldb库java版
最开始听人介绍时使用这个库,也一直使用这个库;后发现这个库删除数据后,不能从硬盘上删除,查资料也说是
会在某种情况下会删除掉数据,但是使用过程中,就没见释放硬盘资源。
<dependency>
<groupId>org.iq80.leveldb</groupId>
<artifactId>leveldb</artifactId>
<version>0.12</version>
</dependency>
之前只是用来存一些配置,数据量不大就没太在意;现在想做一些数据缓存,对比了下sqlite等,还是levedb比较好。数据删除问题必须要解决了。于是看levedb源码介绍,发现已经实现了删除释放资源的接口,只是org.iq80.leveldb这个java版本没实现而已。
2 leveldb jni
网上冲啊冲,找到了org.fusesource.leveldbjni;调用c动态库;提供了 db.compactRange(null, null) 方法;可以解决数据删除释放硬盘资源问题;此外缓存数据数据压缩之前java版本库效果更好。
此包提供了linux32、linux64、osx、window32、window64版本的动态库。
<dependency>
<groupId>org.fusesource.leveldbjni</groupId>
<artifactId>leveldbjni-all</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.openlabtesting.leveldbjni</groupId>
<artifactId>leveldbjni-linux64-aarch64</artifactId>
<version>1.8</version>
</dependency>
3 其他系统问题处理
由于程序是运行在树莓派arvm7上的,leveldbjni-all中被没有提供,需要下载源码编译,放在系统文件夹中即可;
下载源码
snappy下载失败的可以到此下载
wget http://snappy.googlecode.com/files/snappy-1.0.5.tar.gz
tar -zxvf snappy-1.0.5.tar.gz
git clone git://github.com/chirino/leveldb.git
git clone git://github.com/fusesource/leveldbjni.git
export SNAPPY_HOME=`cd snappy-1.0.5; pwd`
export LEVELDB_HOME=`cd leveldb; pwd`
export LEVELDBJNI_HOME=`cd leveldbjni; pwd`
编译snappy
cd ${SNAPPY_HOME}
./configure --disable-shared --with-pic
make
编译leveldb
cd ${LEVELDB_HOME}
export LIBRARY_PATH=${SNAPPY_HOME}
export C_INCLUDE_PATH=${LIBRARY_PATH}
export CPLUS_INCLUDE_PATH=${LIBRARY_PATH}
git apply ../leveldbjni/leveldb.patch
make libleveldb.a
mvn leveldbjni
cd ${LEVELDBJNI_HOME}
mvn clean install -P download -P armv7
打包完成后,把leveldbjni-arvm7-99-master-SNAPSHOT 解压获取liblevedbjni.so 库,放到/usr/lib 下即可。
4 硬盘资源占用
delete删除数据、添加数据(即使添加相同数据)会增加占用硬盘资源。