目录
StarRocks产品
擅长场景
关于Roaring Bitmap
用户留存sql示例
上一篇
下一篇
StarRocks产品
擅长场景
OLAP分析的典型场景大致可分为四类,自助分析,实时分析,数据服务与固定报表 四类场景的查询负载是不同的,所以传统的数仓方案基本只能满足一个到两个场景,通常需要组合不同的技术栈去解决。 比如自助分析使用impala的大规模数据分析能力,在数据服务的场景就会用redis或hbase增加并发能力,实时分析会使用flink+RDBMS的方案。 而StarRocks的先进设计可以同时覆盖上述四类场景,在不同的场景下均有优异的性能表现。
架构全景
StarRocks核心的模块包括FE、BE两种进程角色,其中:
- 团队花费近一年时间,开发的向量化执行引擎,给StarRocks产品装上了极速执行涡轮底座,使得在各种OLAP场景,得以展现性能优势。
- 倾力打造的CBO优化器,更是为复杂查询如多表关联、嵌套子查询等自助BI分析、自助指标平台等场景,提供最优执行规划,保证查询性能。
- 我们在既有的Duplicate明细模型、Aggregate聚合模型、Unique模型的基础上,全新打造的Primary Key模型,能够更好的满足实时更新业务的场景,查询效率可以是Unique模型的3倍左右。
- 结合Flink-CDC插件和PrimaryKey模型,可以实现直接从Mysql Binlog同步增量数据,实时导入任务,也支持Upsert、Delete等能力
- 高效的页面运维工具StarRocks Manager,为企业用户提供了极简的运维页面,可以轻松进行监控、节点维护、版本管理、数据库开发、日常巡检等工作。
- 未来,我们继续探索跨集群容灾、云原生存算分离、弹性计算、资源隔离等企业级数据库集群能力,也考虑将现在众多的导入形式整合,为客户提供更简便易用的使用体验。
数据生态
StarRocks兼容整个大数据生态:
1)数据导入层面: a)存储在kafka中的实时数据,可以通过StarRocks的routine load直接消费kafka的数据,不依赖Flink/Spark等流式处理系统 b)存储在Hadoop或S3中的离线数据,可以通过StarRocks的broker load等方式,大批量的将数据同步拉取到StarRocks中 c)对于本地数据文件,或者存储在内存中的数据,可以使用基于HTTP协议的Stream load方式,将数据导入到StarRocks中 d)对于DataX、FlinkX、WaterDrop等数据同步工具,StarRocks也开发了一些插件,可以通过这些同步工具,将其他数据源的数据,批量通过到StarRocks中
2)流式系统兼容 a)StarRocks开发了Flink-connector插件,支持Flink将数据sink到StarRocks中 b)StarRocks有spark-connector,Spark可以批量读取写入StarRocks的数据
3)StarRocks还支持Mysql、ElasticSearch、Hive等系统的联邦查询,StarRocks远程读取这些系统中的数据,在内部再进行join等内部处理操作
4)StarRocks的查询接口兼容Mysql协议,使用MySQL Connector就可以对接查询StarRocks,因此上层各类BI应用,只要能对接MySQL,基本就可以对接StarRocks,比如Tableau、FineBI、SmartBI、Apache Superset等开源或商业BI系统,都可以很方便的对接StarRocks
关于Roaring Bitmap
StarRocks的Bitmap数据结构,底层是基于Roaring Bitmap实现。
传统的去重类分析,执行“select distinct count…from…groupby join…”类似 SQL 的方式统计,
容易形成大量 SQL 任务调度和大表 join 给集群带来繁重压力。
而基于Roaring Bitmap可以轻松实现诸如UV、留存、漏斗等大量使用交集运算的分析,
从而非常方便地运用在用户行为、用户画像等领域中
用户留存sql示例
求今天和昨天不同 tag 下的用户留存:
select tag, bitmap_intersect(user_id)
from (
select tag, date, bitmap_union(user_id) user_id
from table
where date in ('2020-05-18', '2020-05-19')
group by tag, date) a
group by tag;
该函数和bitmap_to_string函数组合使用可以获取交集的具体数据。求今天和昨天不同 tag 下留存的具体用户:
select tag, bitmap_to_string(bitmap_intersect(user_id))
from (
select tag, date, bitmap_union(user_id) user_id
from table
where date in ('2020-05-18', '2020-05-19')
group by tag, date) a
group by tag;
NOTE: v1.18.0开始,可以结合Lateral join和Unnest函数配合使用,将用户清单展开