RocksDB基于Google的LevelDB,但提高了扩展性可以运行在多核处理器上,可以有效使用快速存储,支持IO绑定、内存和一次写负荷。
其架构如下:
1. 编译RocksJava
首先,需要安装好Java环境。。
其次,去Github下载rocksdb源代码。地址:
https://github.com/facebook/rocksdb.git
然后,用以下命令编译RocksDBJava:
make rocksdbjava
编译完成后,会在rocksdb源代码目录下的java/target/目录下生成2个jar包:rocksdbjni-4.9.0-osx.jar 和 librocksdbjni-osx.jnilib
所有API文档都生成在:target/apidocs/目录下
2. 搭建开发环境
将rocksdbjni-4.9.0-osx.jar放在工程classpath中,librocksdbjni-osx.jnilib需要和rocksdbjni-4.9.0-osx.jar放在同一目录中。
3. 代码示例
package com.test; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.rocksdb.ColumnFamilyDescriptor; import org.rocksdb.ColumnFamilyHandle; import org.rocksdb.ColumnFamilyOptions; import org.rocksdb.DBOptions; import org.rocksdb.Options; import org.rocksdb.RocksDB; import org.rocksdb.RocksDBException; import org.rocksdb.RocksIterator; public class RocksJavaTest { private static final String dbPath = "/Users/xiaolongli/Documents/workspace/rocksdb/rocksdb/java/data/"; static { RocksDB.loadLibrary(); } RocksDB rocksDB; public RocksJavaTest() throws RocksDBException { } // RocksDB.DEFAULT_COLUMN_FAMILY public void testDefaultColumnFamily() throws RocksDBException { Options options = new Options(); options.setCreateIfMissing(true); rocksDB = RocksDB.open(options, dbPath); byte[] key = "Hello".getBytes(); byte[] value = "World".getBytes(); rocksDB.put(key, value); List<byte[]> cfs = RocksDB.listColumnFamilies(options, dbPath); for(byte[] cf : cfs) { System.out.println(new String(cf)); } byte[] getValue = rocksDB.get(key); System.out.println(new String(getValue)); rocksDB.put("SecondKey".getBytes(), "SecondValue".getBytes()); List<byte[]> keys = new ArrayList<>(); keys.add(key); keys.add("SecondKey".getBytes()); Map<byte[], byte[]> valueMap = rocksDB.multiGet(keys); for(Map.Entry<byte[], byte[]> entry : valueMap.entrySet()) { System.out.println(new String(entry.getKey()) + ":" + new String(entry.getValue())); } RocksIterator iter = rocksDB.newIterator(); for(iter.seekToFirst(); iter.isValid(); iter.next()) { System.out.println("iter key:" + new String(iter.key()) + ", iter value:" + new String(iter.value())); } rocksDB.remove(key); System.out.println("after remove key:" + new String(key)); iter = rocksDB.newIterator(); for(iter.seekToFirst(); iter.isValid(); iter.next()) { System.out.println("iter key:" + new String(iter.key()) + ", iter value:" + new String(iter.value())); } } public void testCertainColumnFamily() throws RocksDBException { String table = "CertainColumnFamilyTest"; String key = "certainKey"; String value = "certainValue"; List<ColumnFamilyDescriptor> columnFamilyDescriptors = new ArrayList<>(); Options options = new Options(); options.setCreateIfMissing(true); List<byte[]> cfs = RocksDB.listColumnFamilies(options, dbPath); if(cfs.size() > 0) { for(byte[] cf : cfs) { columnFamilyDescriptors.add(new ColumnFamilyDescriptor(cf, new ColumnFamilyOptions())); } } else { columnFamilyDescriptors.add(new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY, new ColumnFamilyOptions())); } List<ColumnFamilyHandle> columnFamilyHandles = new ArrayList<>(); DBOptions dbOptions = new DBOptions(); dbOptions.setCreateIfMissing(true); rocksDB = RocksDB.open(dbOptions, dbPath, columnFamilyDescriptors, columnFamilyHandles); for(int i = 0; i < columnFamilyDescriptors.size(); i++) { if(new String(columnFamilyDescriptors.get(i).columnFamilyName()).equals(table)) { rocksDB.dropColumnFamily(columnFamilyHandles.get(i)); } } ColumnFamilyHandle columnFamilyHandle = rocksDB.createColumnFamily(new ColumnFamilyDescriptor(table.getBytes(), new ColumnFamilyOptions())); rocksDB.put(columnFamilyHandle, key.getBytes(), value.getBytes()); byte[] getValue = rocksDB.get(columnFamilyHandle, key.getBytes()); System.out.println("get Value : " + new String(getValue)); rocksDB.put(columnFamilyHandle, "SecondKey".getBytes(), "SecondValue".getBytes()); List<byte[]> keys = new ArrayList<byte[]>(); keys.add(key.getBytes()); keys.add("SecondKey".getBytes()); List<ColumnFamilyHandle> handleList = new ArrayList<>(); handleList.add(columnFamilyHandle); handleList.add(columnFamilyHandle); Map<byte[], byte[]> multiGet = rocksDB.multiGet(handleList, keys); for(Map.Entry<byte[], byte[]> entry : multiGet.entrySet()) { System.out.println(new String(entry.getKey()) + "--" + new String(entry.getValue())); } rocksDB.remove(columnFamilyHandle, key.getBytes()); RocksIterator iter = rocksDB.newIterator(columnFamilyHandle); for(iter.seekToFirst(); iter.isValid(); iter.next()) { System.out.println(new String(iter.key()) + ":" + new String(iter.value())); } } public static void main(String[] args) throws RocksDBException { RocksJavaTest test = new RocksJavaTest(); // test.testDefaultColumnFamily(); test.testCertainColumnFamily(); } }
相关推荐
自己用jetty写的java小例子,在mac 环境下,具体的解说在:https://www.cnblogs.com/aspirant/p/9445542.html
MAC--java环境安装包:里面包含:Mac版本的JDK11.0.2版本,和Tomcat7.0.92版本,和官网的一致
java mac查询 java mac查询 java mac查询 java mac查询 java mac查询 java mac查询 java mac查询 java mac查询
Mac下 整套java环境软件 。包括jdk,1.8 tomcat8.5. eclipse, maven,mysql8.0
使用Java实现的通过DES、3DES进行MAC计算的工具
mac 版本 java反编译工具jd-gui 解决安装后无法使用问题 :jd-gui-1.6.6-min.jar 双击后直接使用 如果双击不行 则右击打开
mac下java反编译工具jd-gui 1.4.0mac下java反编译工具jd-gui 1.4.0mac下java反编译工具jd-gui 1.4.0mac下java反编译工具jd-gui 1.4.0mac下java反编译工具jd-gui 1.4.0mac下java反编译工具jd-gui 1.4.0mac下java反...
JAVA获取客户端MAC,web获取客户端MAC,Applet获取客户端MAC;JAVAweb开发;服务器端很难获取到客户端的MAC受路由器等....获取的到不正确或者被过滤掉;小弟,无奈写了一个客户端的Applet来获取客户端MAC然后再在传...
java 版的随机生成 MAC地址,笔者原创。 可根据自己需求定制。 /** * 根据虚拟机类型生成随机Mac地址 * * @param hypervType 虚拟机类型 * KVM: QEMU虚拟机 * vmware: Vmware虚拟机 * 其他: 生成随机的Mac...
JD_GUI反编译工具 mac系统下的java反编译工具 jd-gui 1.4.0版本
JAVA_MAC地址校验和转换,MAC地址递增,MAC地址加密
mac版本的java 6,方便大家使用。比如说安装某一版本的MyEclipse mac版本的java 6,方便大家使用。比如说安装某一版本的MyEclipse mac版本的java 6,方便大家使用。比如说安装某一版本的MyEclipse
在MacBookPro上设置Java开发环境Java开发Java经验技巧共5页.pdf.zip
该软件用于java的class文件反编译,实测好用,欢迎大家下载,有问题可以留言。。。。。
在Mac OS下实现第一个Java程序 HelloWorld~
Mac M1 系统 Java11 JDK安装包: jdk-11.0.18_macos-aarch64_bin.dmg
此版本是基于java的ide,mac系统使用,下载后解压,直接安装就可以了!!!!!!
MAC 配置 java 环境变量 1.列出所有Java版本信息 /usr/libexec/java_home -V 2.修改.bash_profile文件 cd ~ touch .bash_profile vi .bash_profile 3.配置JDK环境变量内容,并输入wq保存 export JAVA_HOME=/...
Mac 在创建虚拟串口上没有 Windows 方便,windows 有 VSPD 用起来非常方便,但是 Mac 就没有那么方便了,本 java 程序基于 socat 和 jdk8,可以自动创建一对虚拟串口,以供 RXTX comm 调试使用
MAC下java调用opencv-java的独立静态库文件 包含 opencv_454.jar libopencv_java454.dylib