rocksdb是一款本地数据库,目前已经在企业应用中用于报表的流式计算的中间缓存,该数据库主要存储在本地硬盘文件中,读取和存储的速度极快,可节约服务器内存,本文提供的rocksdb工具类,可以创建表以及对于表的对象插入读取等操作,但是rocksdb无法同时创建两个连接,否则会报错,具体未知
```java
/**
* @author :hzz
* @description:TODO
* @date :2020/12/14 17:38
*/
@Slf4j
public class RocksdbTableUtil {
private RocksDB rocksDB = null;
//用于操作数据库加key的值
List<ColumnFamilyHandle> columnFamilyHandles = new ArrayList<>();
//用于创建数据库或者删除
List<ColumnFamilyDescriptor> columnFamilyDescriptors = new ArrayList<>();
//用于存放key对应的表操作使用的类
ConcurrentMap<String, ColumnFamilyHandle> columnFamilyHandleMap = new ConcurrentHashMap<>();
public RocksdbTableUtil() {
open();
}
/**
* 重整Map缓存表操作的类
*/
private void reconstitutionMap() {
ConcurrentMap<String, ColumnFamilyHandle> columnFamilyHandleMapTemp = new ConcurrentHashMap<>();
if (columnFamilyDescriptors != null && columnFamilyDescriptors.size() > 0) {
for (int i = 0; i < columnFamilyDescriptors.size(); i++) {
ColumnFamilyHandle columnFamilyHandle = columnFamilyHandles.get(i);
String tablename = new String(columnFamilyDescriptors.get(i).columnFamilyName());
if (!columnFamilyHandleMapTemp.containsKey(tablename)) {
columnFamilyHandleMapTemp.put(tablename, columnFamilyHandle);
}
}
columnFamilyHandleMap = columnFamilyHandleMapTemp;
}
}
public void open() {
try {
String property = System.getProperty("user.dir");
String dbPath = property + File.separator + "rocks";
//dbPath = "D:\\test\\rocksdb";
// String dbPath = "/ascs/rocks";
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