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

关于对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) 方法;可以解决数据删除释放硬盘资源问题;此外缓存数据数据压缩达20倍,但是之前java版本库,压缩效果不到2倍。
  此包提供了linux32、linux64、osx、window32、window64版本的动态库。

      <dependency>
          <groupId>org.fusesource.leveldbjni</groupId>
          <artifactId>leveldbjni-all</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 下即可。

猜你喜欢

转载自blog.csdn.net/h4241778/article/details/108608203
今日推荐