java levedb使用一路走过来的那些坑 数据不能彻底删除等问题

1 levedb库java版

 最开始听人介绍时使用这个库,也一直使用这个库;后发现这个库删除数据后,不能从硬盘上删除,查资料也说是
会在某种情况下会删除掉数据,但是使用过程中,就没见释放硬盘资源。

 
            org.iq80.leveldb
            leveldb
            0.12
       

  之前只是用来存一些配置,数据量不大就没太在意;现在想做一些数据缓存,对比了下sqlite等,还是levedb比较好。数据删除问题必须要解决了。于是看levedb源码介绍,发现已经实现了删除释放资源的接口,只是org.iq80.leveldb这个java版本没实现而已。

2 levedb jni

网上冲啊冲,找到了org.fusesource.leveldbjni;调用c动态库;提供了 db.compactRange(null, null) 方法;可以解决数据删除释放硬盘资源问题;此外缓存数据数据压缩达20倍,但是之前java版本库,压缩效果不到2倍。
  此包提供了linux32、linux64、osx、window32、window64版本的动态库。

      
          org.fusesource.leveldbjni
          leveldbjni-all
          1.8
      


  

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

 

编译levedb

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 下即可。

 

你可能感兴趣的:(数据库,java,levedb,删除)