package org.voovan.tools.collection;
import org.rocksdb.*;
import org.voovan.tools.TByte;
import org.voovan.tools.TFile;
import org.voovan.tools.TString;
import org.voovan.tools.Varint;
import org.voovan.tools.exception.ParseException;
import org.voovan.tools.exception.RocksMapException;
import org.voovan.tools.log.Logger;
import org.voovan.tools.serialize.Serialize;
import org.voovan.tools.serialize.TSerialize;
import java.io.Closeable;
import java.io.File;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.*;
import java.util.Comparator;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function;
/**
* RocksDB 的 Map 封装
*
* @author helyho
* ignite-test Framework.
* WebSite: https://github.com/helyho/ignite-test
* Licence: Apache v2 License
*/
public class RocksMap<K, V> implements SortedMap<K, V>, Closeable {
public enum Type {
READ_ONLY, SECONDARY, TRANSACTION;
}
//--------------------- 公共静态变量 --------------------
static {
RocksDB.loadLibrary();
}
public final static String DEFAULT_DB_NAME = "Default";
//缓存 db 和他对应的 TransactionDB
private static Map<String, RocksDB> ROCKSDB_MAP = new ConcurrentHashMap<String, RocksDB>();
//缓存 TransactionDB 和列族句柄的关系
private static Map<RocksDB, Map<String, ColumnFamilyHandle>> COLUMN_FAMILY_HANDLE_MAP = new ConcurrentHashMap<RocksDB, Map<String, ColumnFamilyHandle>>();
//数据文件的默认保存路径
private static String DEFAULT_DB_PATH = ".rocksdb" + File.separator;
private static String DEFAULT_WAL_PATH = DEFAULT_DB_PATH + ".wal" + File.separator;
private static String DEFAULT_BACKUP_PATH = DEFAULT_DB_PATH + ".backup" + File.separator;
private static String DEFAULT_LOG_PATH = DEFAULT_DB_PATH + "logs" + File.separator;
private static String DEFAULT_SECONDARY_DB_PATH = ".rocksdb.secondary" + File.separator;
public static void setRootPath(String rootPath) {
rootPath = rootPath.endsWith(File.separator) ? rootPath : rootPath + File.separator;
DEFAULT_DB_PATH = rootPath;
DEFAULT_WAL_PATH = rootPath + ".wal" + File.separator;
DEFAULT_BACKUP_PATH = rootPath + ".backup" + File.separator;
DEFAULT_LOG_PATH = rootPath + "logs" + File.separator;
DEFAULT_SECONDARY_DB_PATH = TString.removeSuffix(DEFAULT_DB_PATH) + ".sec";
}
/**
* 获取默认数据存储路径
* @return 默认数存储据路径
*/
public static String getDefaultDbPath() {
return DEFAULT_DB_PATH;
}
/**
* 设置默认数据存储据路径
* @param defaultDbPath 默认数存储据路径
*/
public static void setDefaultDbPath(String defaultDbPath) {
DEFAULT_DB_PATH = defaultDbPath.endsWith(File.separator) ? defaultDbPath : defaultDbPath + File.separator;
DEFAULT_SECONDARY_DB_PATH = TString.removeSuffix(DEFAULT_DB_PATH) + ".sec" + File.separator;;
}
/**
* 默认WAL数据存储据路径
* @return WAL数存储据路径
*/
public static String getDefaultWalPath() {
return DEFAULT_WAL_PATH;
}
/**
* 设置WAL数据存储据路径
* @param defaultWalPath WAL数存储据路径
*/
public static void setDefaultWalPath(String defaultWalPath) {
DEFAULT_WAL_PATH = defaultWalPath.endsWith(File.separator) ? defaultWalPath : defaultWalPath + File.separator;
}
/**
* 默认数据备份存储据路径
* @return WAL数存储据路径
*/
public static String getDefaultBackupPath() {
return DEFAULT_BACKUP_PATH;
}
/**
* 设置数据备份存储据路径
* @param defaultBackupPath WAL数存储据路径
*/
public static void setDefaultBackupPath(String defaultBackupPath) {
DEFAULT_BACKUP_PATH = defaultBackupPath.endsWith(File.separator) ? defaultBackupPath : defaultBackupPath + File.separator;;
}
/**
* 获取默认日志路径
* @return 默认数存储据路径
*/
public static String getDefaultLogPath() {
return DEFAULT_LOG_PATH;
}
/**
* 设置默认日志路径
* @param defaultLogPath 默认数存储据路径
*/
public static void setDefaultLogPath(String defaultLogPath) {
DEFAULT_LOG_PATH = defaultLogPath.endsWith(File.separator) ? defaultLogPath : defaultLogPath + File.separator;
}
/**
* 获取副本打开的路径
* @return 副本打开的路径
*/
public static String getDefaultSecondaryDbPath() {
return DEFAULT_SECONDARY_DB_PATH;
}
/**
* 设置副本打开的路径
* @param defaultSecondaryDbPath 副本打开的路径
*/
public static void setDefaultSecondaryDbPath(String defaultSecondaryDbPath) {
DEFAULT_SECONDARY_DB_PATH = defaultSecondaryDbPath.endsWith(File.separator) ? defaultSecondaryDbPath : defaultSecondaryDbPath + File.separator;
}
/**
* 根据名称获取列族
* @param rocksDB RocksDB 对象
* @param columnFamilyName 列族名称
* @return 列族句柄
*/
private static ColumnFamilyHandle getColumnFamilyHandler(RocksDB rocksDB, String columnFamilyName) {
return COLUMN_FAMILY_HANDLE_MAP.get(rocksDB).get(columnFamilyName);
}
/**
* 关闭 RocksDB 极其句柄
* @param rocksDB RocksDB 对象
*/
private static void closeRocksDB(RocksDB rocksDB) {
for (ColumnFamilyHandle columnFamilyHandle : COLUMN_FAMILY_HANDLE_MAP.get(rocksDB).values()) {
columnFamilyHandle.close();
}
try {
rocksDB.syncWal();
} catch (RocksDBException e) {
e.printStackTrace();
}
rocksDB.close();
COLUMN_FAMILY_HANDLE_MAP.remove(rocksDB);
}
//--------------------- 成员变量 --------------------
public transient DBOptions dbOptions;
public transient ReadOptions readOptions;
public transient WriteOptions writeOptions;
public transient ColumnFamilyOptions columnFamilyOptions;
public transient BackupEngineOptions backupEngineOptions;
private transient RocksDB rocksDB;
private transient ColumnFamilyHandle dataColumnFamilyHandle;
private transient ThreadLocal<Transaction> threadLocalTransaction = new ThreadLocal<Transaction>();
private transient ThreadLocal<Integer> threadLocalSavePointCount = ThreadLocal.withInitial(()->new Integer(0));
private transient String dbName;
private transient String dataPath;
private transient String walPath;
private transient String logPath;
private transient String secondaryPath;
private transient String backupPath;
private transient String columnFamilyName;
private transient Type type;
private transient Boolean isDuplicate = false;
private transient int transactionLockTimeout = 5000;
private transient Serialize serialize;
private boolean useSingleRemove = false;
/**
* 构造方法
*/
public RocksMap() {
this(null, null, null, null, null, null, null);
}
/**
* 构造方法
* @param columnFamilyName 列族名称
*/
public RocksMap(String columnFamilyName) {
this(null, columnFamilyName, null, null, null, null, null);
}
/**
* 构造方法
* @param dbName 数据库的名称, 基于数据保存目录的相对路径
* @param columnFamilyName 列族名称
*/
public RocksMap(String dbName, String columnFamilyName) {
this(dbName, columnFamilyName, null, null, null, null, null);
}
/**
* 构造方法
* @param type Rocksdb 开启的模式 参考: RocksMap.Type
*/
public RocksMap(Type type) {
t
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Voovan 是一个高性能异步网络框架和WEB服务器框架,同时支持HTTP客户端抓取、动态编译支持、数据库访问封装以及DateTime、String、Log、反射、对象工具、流操作、文件操作、异步双向通道等功能。旨在提供可靠、方便、可单元测试的代码。它是极少依赖的独立工具包,希望能够方便广大开发者快速的实现应用。
资源推荐
资源详情
资源评论
收起资源包目录
Voovan是高性能异步通信、HTTP服务器和客户端通信、动态编译支持、数据库操作帮助类等工具的框架 (460个子文件)
admin 104B
Voovan.copyright 197B
client.crt 1KB
server.crt 1KB
.gitignore 205B
index.htm 4KB
socketio.html 2KB
swagger.html 1KB
Error.html 1KB
favicon.ico 4KB
RocksMap.java 87KB
TReflect.java 76KB
HttpParser.java 36KB
JdbcOperate.java 35KB
TString.java 34KB
ByteBufferChannel.java 34KB
AnnotationRouter.java 33KB
Recorder.java 31KB
SwaggerApi.java 30KB
TSQL.java 28KB
WebServer.java 25KB
TEnv.java 24KB
HttpClient.java 24KB
JSONDecode.java 23KB
Dao.java 23KB
RedisMap.java 22KB
RocksMapUnit.java 21KB
TFile.java 20KB
WebContext.java 19KB
HttpDispatcher.java 19KB
SocketSelector.java 19KB
ObjectPool.java 19KB
HttpStatic.java 18KB
THash.java 18KB
RedisZSet.java 18KB
TByteBuffer.java 18KB
TPerformance.java 17KB
CacheMap.java 17KB
CollectionSearch.java 16KB
SocketContext.java 15KB
RedisList.java 15KB
Container.java 15KB
WebServerHandler.java 15KB
WebServerCli.java 14KB
JdbcOperatorUnit.java 14KB
AopWeave.java 14KB
JSON.java 14KB
Request.java 13KB
SSLEngineSimpleDemo.java 13KB
Formater.java 13KB
IoSession.java 13KB
EventProcess.java 13KB
TProperties.java 13KB
HttpRequest.java 13KB
BeanVisitor.java 12KB
AnnotationRouterTest.java 12KB
DynamicFunction.java 12KB
WebSocketDispatcher.java 11KB
TByte.java 11KB
TObject.java 11KB
SandboxSecurity.java 11KB
Response.java 11KB
Hotswaper.java 11KB
WebServerConfig.java 10KB
Body.java 10KB
SSLParser.java 10KB
Socks5Plugin.java 10KB
YAML2JSON.java 9KB
JSONEncode.java 9KB
Definitions.java 9KB
TReflectTest.java 9KB
Cipher.java 9KB
ByteBufferChannelUnit.java 9KB
Context.java 9KB
RateLimiterFilter.java 8KB
WebSocketFrame.java 8KB
ClassModel.java 8KB
TDateTime.java 8KB
HttpClientUnit.java 8KB
SSLManager.java 8KB
EventRunnerGroup.java 7KB
RocksMapBench.java 7KB
RedisLock.java 7KB
Global.java 7KB
SandboxControler.java 7KB
Logger.java 7KB
DynamicCompilerManager.java 7KB
WebServerDemo.java 7KB
NioUtil.java 7KB
TZip.java 7KB
HttpModule.java 6KB
AnnotationModule.java 6KB
RedisMapUnit.java 6KB
TSerialize.java 6KB
RocksDelayQueue.java 6KB
WeaveUtils.java 6KB
HttpClientWebSocketHandler.java 6KB
ObjectCachedPooledObjectUnit.java 6KB
UdpSocket.java 6KB
JdbcOperateDemo.java 6KB
共 460 条
- 1
- 2
- 3
- 4
- 5
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6713
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功