配置参数
通过配置文件的方式启动 UrnaDB 数据库,可以灵活调整各个组件的运行参数,并按需启用或关闭核心功能模块。UrnaDB 提供丰富的组件配置选项,方便用户根据实际需求进行精细化控制,以下是一个示例 config.yaml
配置文件内容:
port: 2668 # 服务 HTTP 协议端口
mode: "std" # 默认为 std 标准库,另外可以设置 mmap 模式(本功能待完善)
path: "/tmp/urnadb" # 数据库文件存储目录
auth: "Are we wide open to the world?" # 访问 HTTP 协议的密钥
logpath: "/tmp/urnadb/out.log" # urnadb 在运行时程序产生的日志存储文件
debug: false # 是否开启 debug 模式
region: # 数据区
enable: true # 是否开启数据压缩功能
cron: "0 0 3 * *" # 垃圾回收器执行周期改为 cron 的格式
threshold: 2 # 默认个数据文件大小,单位 GB
encryptor: # 是否开启静态数据加密功能
enable: false
secret: "your-static-data-secret!"
compressor: # 是否开启静态数据压缩功能
enable: false
checkpoint: # 是否开启索引定时快照功能
enable: false
interval: 1800 # 每 30 分钟生成一次索引数据快照
allowip: # 白名单 IP 列表,可以去掉这个字段,去掉之后白名单就不会开启
- 192.168.31.221
- 192.168.101.225
- 192.168.101.226
- 127.0.0.1
Important
UrnaDB 的存储引擎将数据写入指定文件,存储位置由配置文件中的 path
节点指定。存储引擎依赖操作系统的文件系统,推荐使用 Linux 的 XFS 文件系统,并建议将一块单独格式化的硬盘挂载到该路径,以确保 UrnaDB 数据库进程独占访问该磁盘的数据。
数据区
Region 是 UrnaDB 中最核心的功能模块之一,其相关的配置参数用于控制数据区运行时的行为,例如可以通过配置启用或禁用 Region 的垃圾回收机制,并设置单个 Region 区域的最大容量限制;相关的配置选项节点是 region
:
region: # 数据区
enable: true # 是否开启数据压缩功能
cron: "0 0 3 * *" # 垃圾回收器执行周期改为 cron 的格式
threshold: 2 # 默认个数据文件大小,单位 GB
Warning
在配置 Region 区域时,需要重点考虑是否启用存储引擎的垃圾回收功能。若不启用,长时间运行可能导致磁盘空间持续增长,占用过高。若启用垃圾回收功能,则需合理设置其执行周期:周期过长可能导致空间回收不及时,占用上升,并在压缩 Region 时耗时较长;周期过短则可能导致垃圾回收过于频繁,占用系统资源,影响存储引擎的整体性能。
数据加密
Region 区域对应的是磁盘上的数据文件,这些文件直接存储在运行 UrnaDB 数据库的服务器本地磁盘中,由于这些文件以普通文件形式存在,理论上任何拥有访问该服务器权限的用户都有可能读取它们的内容。这就引出了一个关键问题:如何有效防止这些敏感数据文件被未授权人员访问和泄露。
encryptor:
enable: false # 是否开启静态数据加密功能
secret: "your-static-data-secret!" # 静态加密的密钥
Warning
UrnaDB 内置的加密算法采用 AES(Advanced Encryption Standard),使用 CBC(Cipher Block Chaining)模式进行数据加密。支持三种标准密钥长度:128 位、192 位和 256 位,其中 256 位密钥提供最高的安全等级。需要注意的是,密钥强度越高,相应的 CPU 资源消耗也会增加,可能影响运行时性能表现。
数据压缩
Region 区域对应的是磁盘上的数据文件,文件所存储的每条数据记录默认是未经过压缩的,这就意味随着数据增多,磁盘空间占用也会持续上升。针对这个问题 UrnaDB 存储引擎内置了数据压缩算法,开启 UrnaDB 存储引擎内置的数据压缩器功能,就会有效降低磁盘数据文件存储空间成本。
compressor:
enable: false # 是否开启静态数据压缩功能
Warning
同样如果开启了 UrnaDB 存储引擎内置的数据压缩器功能,相应的 CPU 资源消耗也会增加,可能影响运行时性能表现。
访问控制
UrnaDB 通常部署在独立的 Linux 服务器上,并通过网络对外提供数据访问服务。将数据库服务直接暴露在公共网络中是一种高风险行为,这意味着任何人都可能尝试通过客户端连接访问 UrnaDB 数据库。除了基本的访问密钥认证机制外,UrnaDB 还提供了 IP 白名单安全策略,以增强整体系统的防护能力。
通过 IP 白名单功能,将访问权限限制在可信任的 IP 名单内,就可以有效控制能访问 UrnaDB 数据库的人员范围,受信任的 IP 列表通过 allowip
配置选项进行设置:
allowip: # 白名单 IP 列表,可以去掉这个字段,去掉之后白名单就不会开启
- 192.168.31.221
- 192.168.101.225
- 192.168.101.226
- 127.0.0.1
Warning
如果不添加 allowip
配置节点,去掉这个字段白名单就不会开启,意味着任何人都可以访问到这台运行 UrnaDB 数据库主机。
检查点恢复
由于 UrnaDB 数据库存储引擎采用将所有索引数据存储在内存中的设计,一旦数据库进程意外崩溃,内存中的索引信息将会丢失,未能持久化到磁盘。这样在下一次启动时,系统需要重新扫描所有数据文件,以重建内存中的索引结构,如果数据文件体量较大,将导致启动过程变得缓慢,启动耗时较长。
为了解决这个问题,UrnaDB 数据库引入了 checkpoint 功能机制,通过定期将内存中的索引状态保存到磁盘,在发生异常重启时即可快速加载 checkpoint 文件,从而大幅缩短数据库的启动时间,相关的配置选项节点是 checkpoint
:
checkpoint: # 是否开启索引定时快照功能
enable: false
interval: 1800 # 每 30 分钟生成一次索引数据快照
Warning
开启 checkpoint 功能可以在数据库崩溃后显著加快启动恢复的速度。然而 checkpoint 文件的生成时间间隔设置同样需要谨慎权衡。如果生成间隔过短,将导致 checkpoint 文件过于频繁地写入磁盘,占用大量 I/O 资源,可能影响数据库的整体性能;而如果间隔设置过长,崩溃恢复时仍需扫描大量 Region 数据记录,反而无法发挥 checkpoint 的优势,导致启动时间较长。因此合理配置 checkpoint 的生成频率,需在性能开销与数据恢复效率之间做出平衡,建议根据实际业务的数据写入频率和系统负载,动态调整该参数以获得最佳效果。