Lealone 是一个高性能的面向 OLTP 场景的关系数据库。Lealone是一个兼具RDBMS、NoSQL优点的面向OLTP/OLAP场景的异步化NewSQL单机与分布式关系数据库产品。它可以作为一个独立的数据库来使用,也可以当成一个微服务框架来用,或者两者同时用。支持高性能分布式事务、支持强一致性复制、支持全局快照隔离,并发写性能极其炸裂,号称比 MySQL 快10倍的 OLTP 数据库。目前 Lealone 5.2 已经发布,长期支持(LTS)且具有里程碑意义的大版本。
并发写性能极其炸裂
全链路异步化,使用少量线程就能处理大量并发
可暂停的、渐进式的 SQL 引擎
基于 SQL 优先级的抢占式调度,慢查询不会长期霸占 CPU
创建 JDBC 连接非常快速,占用资源少,不再需要 JDBC 连接池
插件化存储引擎架构,内置 AOSE 引擎,采用新颖的异步化 B-Tree
插件化事务引擎架构,事务处理逻辑与存储分离,内置 AOTE 引擎
支持 Page 级别的行列混合存储,对于有很多字段的表,只读少量字段时能大量节约内存
支持通过 CREATE SERVICE 语句创建可托管的后端服务
只需要一个不到 2M 的 jar 包就能运行,不需要安装
支持索引、视图、Join、子查询、触发器、自定义函数、Order By、Group By、聚合
支持高性能分布式事务、支持强一致性复制、支持全局快照隔离
支持自动化分片 (Sharding),用户不需要关心任何分片的规则,没有热点,能够进行范围查询
支持混合运行模式,包括4种模式: 嵌入式、Client/Server 模式、复制模式、Sharding 模式
支持不停机快速手动或自动转换运行模式: Client/Server 模式 -> 复制模式 -> Sharding 模式
使用Lealone的分布式SQL引擎,可使用类似MySQL的SQL语法和标准JDBC API读写HBase中的数据, 支持各种DDL,支持触发器、自定义函数、视图、Join、子查询、Order By、Group By、聚合。
对于Client/Server架构的传统单机RDBMS的场景,也可使用Lealone。
如果应用想不经过网络直接读写数据库,可使用嵌入式Lealone。
https://github.com/lealone
https://github.com/lealone/Lealone-Docs
在pom.xml文件中添加Lealone驱动的依赖
org.lealone
lealone-client
5.2.0
在application.yml或application.properties文件中配置数据源
spring:
datasource:
driver-class-name: com.lealone.jdbc.Driver
url: jdbc:lealone://localhost:3306/test
username: root
password: 123456
创建一个实体类,用于映射数据库表
@Data
public class SysUser {
private Integer id;
private String name;
private Integer age;
}
创建一个继承自BaseMapper的接口,用于操作数据库
@Mapper
public interface SysUserMapper extends BaseMapper {
}
在ServiceImpl中使用@Resource注解注入Mapper,然后就可以调用它的方法来操作数据库
@Slf4j
@Service
public class SysUserServiceImpl extends ServiceImpl implements SysUserService {
@Resource
private SysUserMapper sysUserMapper;
@Override
public List findAll() {
return sysUserMapper.findAll();
}
}
public class CRUDLealone {
public static void main(String[] args) throws Exception {
String url = "jdbc:lealone:tcp://localhost:3306/lealone";
Connection conn = DriverManager.getConnection(url, "root", "123456");
Statement stmt = conn.createStatement();
stmt.executeUpdate("CREATE TABLE IF NOT EXISTS sys_user (id int primary key,name varchar, age int)");
stmt.executeUpdate("INSERT INTO sys_user(id, name, age) VALUES(1, 'ahope', 30)");
stmt.executeUpdate("UPDATE sys_user SET age = 31 WHERE id = 1");
ResultSet rs = stmt.executeQuery("SELECT * FROM sys_user");
while (rs.next()) {
System.out.println("id=" + rs.getInt(1) + "name=" + rs.getString(2) + " age=" + rs.getInt(3));
}
rs.close();
stmt.executeUpdate("DELETE FROM sys_user WHERE id = 1");
stmt.executeUpdate("DROP TABLE IF EXISTS sys_user");
stmt.close();
conn.close();
}
}