本篇文章转载自天翼云官方网站开发者社区
一、引言
Nacos作为微服务注册配置中心,需要存储用户创建的配置和永久实例等信息,需要有持久化方案。目前Nacos支持使用内嵌的Derby数据库和外部的MySQL数据库作为存储。当我们使用单机模式或者集群模式下使用默认存储(即使用startup.sh -p embedded
启动)时,Nacos会使用内嵌的Derby数据库来存储数据。那么接下来简要介绍下Derby数据库。
二、Derby 数据库介绍
Apache Derby 是100% Java 编写的内存数据库,属于 Apache 的一个开源项目,并且是一个容易管理的关系数据库管理系统,Apache Derby 是一个与平台无关的数据库引擎,它以 Java 类库的形式对外提供服务。与其他难以部署的数据库不同, Derby 数据库体积小、安装非常简单,只需要将其 .jar 文件复制到系统中并为用户的项目添加该 .jar 文件即可。
三、运行模式
3.1 内嵌模式
Derby数据库与应用程序共享同一个JVM,通常由应用程序负责启动和停止,对除启动它的应用程序外的其它应用程序不可见,即其它应用程序不可访问它;Nacos主要使用此种模式来运行Derby数据库。
3.2 网络模式
Derby数据库独占一个JVM,做为服务器上的一个独立进程运行。在这种模式下,允许有多个应用程序来访问同一个Derby数据库。
四、 Derby 数据库的优缺点
Derby 定位是小型数据库 , 特别是嵌入式 . 支持的数据库小于 50GB, 对于小型网站 , 事务不复杂的应用, 使用它的还是很不错的 . 另外大型桌面应用也可以用它来保存配置和其他数据 , 可以做到与文件格式无关 ,因为都是访问数据库;
功能层面: Derby 支持标准 SQL92, SQL1999, SQL2003, 支持临时表 , 索引 , 触发器 , 视图 , 存储过程 ,外键 , 约束 , 并行 , 事务 , 加密与安全等。只要有 JDK(>=1.3), 就可以运行 Derby;
安全性: Derby 的安全性也做得很到位 , 包括用户鉴权和加密解密;
性能: Derby 的性能也是不错的 . 在插入 100 万条记录时 , CPU 的占用率一直低于 40%, 平均每插一条记录耗时小于 0.3 毫秒,这对于满足桌面应用程序是绰绰有余的 . 但是比 Oracle 、 MySql 等专业数据库性能要低。
五、使用方法
5.1 安装Derby数据库
只需要从Derby官方网站下载Derby的zip或者tar包,解压就可以了。这里以db-derby-10.4.1.3-bin版本为例,解压后得到以下目录:
- bin目录,包含了一些工具脚本和设备环境的脚本;
- demo目录,包含了一些实例程序;
- docs目录,包含了Derby的文档;
- javadoc目录,包含了Derby的API文档;
- lib目录,包含了Derby数据库的jar文件;
- test目录,Derby的一些测试jar包。
5.2 使用ij脚本
5.2.1 运行内嵌模式的Derby数据库
建立连接:在命令行中找到bin目录,使用输入ij使用ij工具(或单击ij.bat后启动ij工具)。然后通过如下命令创建数据库,并与数据库创建连接1
connect 'jdbc:derby:dedb;user=root;password=root;create=true';
SQL操作:与数据库连接上后,就可以开始执行SQL语句了,也可以通过run命令来执行sql文件:1
run '/derby/demo/nacos_schema.sql';
最后通过exit来退出ij工具,你可以在当前你命令行下所在的目录中找到一个derby.log的日志文件,derby在其中记录的数据库启动、关闭的信息。
六、Nacos中Derby的应用
当我们使用单机模式或者集群模式下使用默认存储(即使用startup.sh -p embedded
启动)时,Nacos会使用内嵌的Derby数据库来存储数据。服务启动后,在Nacos工作目录下data目录中生成derby-data目录
该目录即为derby的数据库工作目录,里面存储了derby数据库的所有信息
可以按照前文所述的方法,使用Derby自带的ij脚本连接内嵌模式运行的Derby数据库,可以看到NACOS逻辑库。
该库中包含了Nacos用户侧信息,包含账号密码,名称空间,配置等。对于需要持久化的数据,Nacos会将其写入Derby数据库中。
最后,由于Derby是一个单体嵌入式数据库,Nacos各节点组成集群的时候,各自的存储是分离的,因此,需要由上层CP协议来保证数据一致性,这里会涉及到集群节点间的日志重放和同步等细节操作,我们会在后续的系列中进行深入解析。