Mac环境下RocksDB Java版例子

本文介绍如何使用RocksDB Java接口进行数据库操作,包括编译RocksDB Java库、搭建开发环境及通过示例代码展示如何创建、读取、更新和删除数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RocksDB基于Google的LevelDB,但提高了扩展性可以运行在多核处理器上,可以有效使用快速存储,支持IO绑定、内存和一次写负荷。

其架构如下:



 

 

1. 编译RocksJava

首先,需要安装好Java环境。。

其次,去Github下载rocksdb源代码。地址:

Java代码 
  1. https://github.com/facebook/rocksdb.git  

然后,用以下命令编译RocksDBJava:

Java代码 
  1. 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. 代码示例

Java代码 
  1. package com.test;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6.   
  7. import org.rocksdb.ColumnFamilyDescriptor;  
  8. import org.rocksdb.ColumnFamilyHandle;  
  9. import org.rocksdb.ColumnFamilyOptions;  
  10. import org.rocksdb.DBOptions;  
  11. import org.rocksdb.Options;  
  12. import org.rocksdb.RocksDB;  
  13. import org.rocksdb.RocksDBException;  
  14. import org.rocksdb.RocksIterator;  
  15.   
  16. public class RocksJavaTest {  
  17.       
  18.     private static final String dbPath = "/Users/xiaolongli/Documents/workspace/rocksdb/rocksdb/java/data/";  
  19.     static {  
  20.         RocksDB.loadLibrary();  
  21.     }  
  22.       
  23.     RocksDB rocksDB;  
  24.       
  25.     public RocksJavaTest() throws RocksDBException {  
  26.           
  27.     }  
  28.       
  29. //  RocksDB.DEFAULT_COLUMN_FAMILY  
  30.     public void testDefaultColumnFamily() throws RocksDBException {  
  31.         Options options = new Options();  
  32.         options.setCreateIfMissing(true);  
  33.           
  34.         rocksDB = RocksDB.open(options, dbPath);  
  35.         byte[] key = "Hello".getBytes();  
  36.         byte[] value = "World".getBytes();  
  37.         rocksDB.put(key, value);  
  38.           
  39.         List<byte[]> cfs = RocksDB.listColumnFamilies(options, dbPath);  
  40.         for(byte[] cf : cfs) {  
  41.             System.out.println(new String(cf));  
  42.         }  
  43.           
  44.         byte[] getValue = rocksDB.get(key);  
  45.         System.out.println(new String(getValue));  
  46.           
  47.         rocksDB.put("SecondKey".getBytes(), "SecondValue".getBytes());  
  48.           
  49.         List<byte[]> keys = new ArrayList<>();  
  50.         keys.add(key);  
  51.         keys.add("SecondKey".getBytes());  
  52.           
  53.         Map<byte[], byte[]> valueMap = rocksDB.multiGet(keys);  
  54.         for(Map.Entry<byte[], byte[]> entry : valueMap.entrySet()) {  
  55.             System.out.println(new String(entry.getKey()) + ":" + new String(entry.getValue()));  
  56.         }  
  57.           
  58.         RocksIterator iter = rocksDB.newIterator();  
  59.         for(iter.seekToFirst(); iter.isValid(); iter.next()) {  
  60.             System.out.println("iter key:" + new String(iter.key()) + ", iter value:" + new String(iter.value()));  
  61.         }  
  62.           
  63.         rocksDB.remove(key);  
  64.         System.out.println("after remove key:" + new String(key));  
  65.           
  66.         iter = rocksDB.newIterator();  
  67.         for(iter.seekToFirst(); iter.isValid(); iter.next()) {  
  68.             System.out.println("iter key:" + new String(iter.key()) + ", iter value:" + new String(iter.value()));  
  69.         }  
  70.           
  71.     }  
  72.       
  73.     public void testCertainColumnFamily() throws RocksDBException {  
  74.         String table = "CertainColumnFamilyTest";  
  75.         String key = "certainKey";  
  76.         String value = "certainValue";  
  77.           
  78.         List<ColumnFamilyDescriptor> columnFamilyDescriptors = new ArrayList<>();  
  79.         Options options = new Options();  
  80.         options.setCreateIfMissing(true);  
  81.           
  82.         List<byte[]> cfs = RocksDB.listColumnFamilies(options, dbPath);  
  83.         if(cfs.size() > 0) {  
  84.             for(byte[] cf : cfs) {  
  85.                 columnFamilyDescriptors.add(new ColumnFamilyDescriptor(cf, new ColumnFamilyOptions()));  
  86.             }  
  87.         } else {  
  88.             columnFamilyDescriptors.add(new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY, new ColumnFamilyOptions()));  
  89.         }  
  90.           
  91.         List<ColumnFamilyHandle> columnFamilyHandles = new ArrayList<>();  
  92.         DBOptions dbOptions = new DBOptions();  
  93.         dbOptions.setCreateIfMissing(true);  
  94.           
  95.         rocksDB = RocksDB.open(dbOptions, dbPath, columnFamilyDescriptors, columnFamilyHandles);  
  96.         for(int i = 0; i < columnFamilyDescriptors.size(); i++) {  
  97.             if(new String(columnFamilyDescriptors.get(i).columnFamilyName()).equals(table)) {  
  98.                 rocksDB.dropColumnFamily(columnFamilyHandles.get(i));  
  99.             }  
  100.         }  
  101.           
  102.         ColumnFamilyHandle columnFamilyHandle = rocksDB.createColumnFamily(new ColumnFamilyDescriptor(table.getBytes(), new ColumnFamilyOptions()));  
  103.         rocksDB.put(columnFamilyHandle, key.getBytes(), value.getBytes());  
  104.           
  105.         byte[] getValue = rocksDB.get(columnFamilyHandle, key.getBytes());  
  106.         System.out.println("get Value : " + new String(getValue));  
  107.           
  108.         rocksDB.put(columnFamilyHandle, "SecondKey".getBytes(), "SecondValue".getBytes());  
  109.           
  110.         List<byte[]> keys = new ArrayList<byte[]>();  
  111.         keys.add(key.getBytes());  
  112.         keys.add("SecondKey".getBytes());  
  113.           
  114.         List<ColumnFamilyHandle> handleList = new ArrayList<>();  
  115.         handleList.add(columnFamilyHandle);  
  116.         handleList.add(columnFamilyHandle);  
  117.           
  118.         Map<byte[], byte[]> multiGet = rocksDB.multiGet(handleList, keys);  
  119.         for(Map.Entry<byte[], byte[]> entry : multiGet.entrySet()) {  
  120.             System.out.println(new String(entry.getKey()) + "--" + new String(entry.getValue()));  
  121.         }  
  122.           
  123.         rocksDB.remove(columnFamilyHandle, key.getBytes());  
  124.           
  125.         RocksIterator iter = rocksDB.newIterator(columnFamilyHandle);  
  126.         for(iter.seekToFirst(); iter.isValid(); iter.next()) {  
  127.             System.out.println(new String(iter.key()) + ":" + new String(iter.value()));   
  128.         }  
  129.     }  
  130.   
  131.     public static void main(String[] args) throws RocksDBException {  
  132.         RocksJavaTest test = new RocksJavaTest();  
  133. //      test.testDefaultColumnFamily();  
  134.         test.testCertainColumnFamily();  
  135.     }  
  136.   
  137. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值