项目中有需求要同时使用MySQL和Starrocks,正好整理一下,文末有完整代码包
顺便整理了一个视频
MyBatis-Plus实现MySQL和Starrocks多数据源整合
先了解一下Starrocks
对于Starrocks的一些文档,看官网来的更直接一些
官方文档:https://docs.starrocks.io/zh/docs/introduction/StarRocks_intro/
阿里的文档:https://help.aliyun.com/zh/emr/emr-serverless-starrocks/?spm=a2c4g.11174283.0.0.59d4482desVcFP (有些实际操作能借鉴)
实际使用及链接Starrocks库
实际使用可以当作mysql来使用,能使用https://baomidou.com/ MyBatis-Plus,只要支持mysql的orm框架都可以接入使用。
数据库连接可以直接使用DBeaver https://dbeaver.io/download/
建表语句也是可以参照通用的sql标准,就是表的属性上有所不同,需要注意,(表属性这里需要学习一下),下面是一个建表的示例。
表属性部分
- ENGINE = OLAP DUPLICATE KEY (conn_id) COMMENT “OLAP”:
- 表明该表使用 OLAP 引擎。设置了重复键为conn_id,这意味着conn_id列的值在表中可以重复出现,并且可能用于某些特定的查询和操作。注释为 “OLAP” 用于对表的用途进行说明。
- DISTRIBUTED BY HASH (user) BUCKETS 10:
- 表数据按照user列的值进行哈希分区,将数据分布到 10 个桶(buckets)中。这样可以提高数据的并行处理能力和查询性能。
- PROPERTIES (部分:
- “replication_num” = “2”:指定表的副本数为 2,这意味着数据会在集群中存储两份,以提高数据的可用性和容错性。
- “in_memory” = “false”:表示表数据不是全部存储在内存中。
- “storage_format” = “DEFAULT”:使用默认的存储格式。
- “enable_persistent_index” = “false”:不启用持久化索引。
- “compression” = “LZ4”:使用 LZ4 压缩算法对数据进行压缩,以减少存储空间占用和提高数据读写性能。
starrocks建表语句
/* 创建表。*/
CREATE TABLE
`test_emr_query_logs` (
`conn_id` varchar(10) NULL COMMENT "链接id",
`database` varchar(100) NULL COMMENT "数据库",
`start_time` bigint (20) NULL COMMENT "开始时间",
`end_time` bigint (20) NULL COMMENT "结束时间",
`event_time` bigint (20) NULL COMMENT "事件事件",
`is_query` boolean NULL COMMENT "是否查询",
`latency` int (11) NULL COMMENT "延迟",
`query_id` varchar(40) NULL COMMENT "查询id",
`remote_ip` varchar(15) NULL COMMENT "远程ip",
`state` varchar(20) NULL COMMENT "状态",
`user` varchar(20) NULL COMMENT "用户"
) ENGINE = OLAP DUPLICATE KEY (`conn_id`) COMMENT "OLAP" DISTRIBUTED BY HASH (`user`) BUCKETS 10 PROPERTIES (
"replication_num" = "2",
"in_memory" = "false",
"storage_format" = "DEFAULT",
"enable_persistent_index" = "false",
"compression" = "LZ4"
);
/* 插入数据。*/
insert into
test_emr_query_logs (
`conn_id`,
`database`,
`start_time`,
`end_time`,
`event_time`,
`is_query`,
`latency`,
`query_id`,
`remote_ip`,
`state`,
`user`
)
values
(
'54656',
'tpc_h_sf1',
1691635106990,
1691635107405,
1691635107405000000,
1,
415,
'fbec0dd7-3726-11ee-a3ef-720338511ec3',
'10.0.**.**',
'FINISHED',
'admin'
),
(
'54658',
'tpc_h_sf1',
1691635107632,
1691635107860,
1691635107860000000,
1,
228,
'fc4e0301-3726-11ee-a3ef-720338511ec3',
'10.0.**.**',
'FINISHED',
'admin'
),
(
'54659',
'tpc_h_sf1',
1691635108757,
1691635108930,
1691635108930000000,
1,
173,
'fcf9ac5s8-3726-11ee-a3ef-720338511ec3',
'10.0.**.**',
'FINISHED',
'admin'
),
(
'54661',
'tpc_h_sf1',
1691635108994,
1691635109137,
1691635109137000000,
1,
143,
'fd1dd62e-3726-11ee-a3ef-720338511ec3',
'10.0.**.**',
'FINISHED',
'admin'
),
(
'54663',
'tpc_h_sf1',
1691635109445,
1691635109533,
1691635109533000000,
1,
88,
'fd62a765-3726-11ee-a3ef-720338511ec3',
'10.0.**.**',
'FINISHED',
'admin'
),
(
'54664',
'tpc_h_sf1',
1691635109724,
1691635109907,
1691635109907000000,
1,
183,
'fd8d39d9-3726-11ee-a3ef-720338511ec3',
'10.0.**.**',
'FINISHED',
'admin'
);
/* 查看表信息。*/
select * from test_emr_query_logs;
MySQL建表语句
-- test.`user` definition 创建一个test库
CREATE TABLE `user` (
`id` bigint DEFAULT NULL COMMENT 'id',
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称',
`age` int DEFAULT NULL COMMENT '年龄',
`email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮件'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
INSERT INTO `user` (id,name,age,email) VALUES
(1,'yuanmomo',18,'u8475845@qq.com'),
(2,'eefsfsdf',23,'dfjsdshj@qq.com');
代码中直接使用
对应的实体、mapper