Skip to content

BaikalDB v3.0.0

Latest
Compare
Choose a tag to compare
@lgqss lgqss released this 19 Feb 06:34
c04e446

Notice:

  • 滚动升级顺序:BaikalMeta=>BaikalStore=>BaikalDB(本次升级需要严格按照这个顺序,由于修改较大,建议线下验证兼容性)
  • 回滚步骤反过来:BaikalDB=>BaikalStore=>BaikalMeta
  • 如没特殊说明,后续升级步骤都应该按上述顺序进行
  • 由于大部分代码库都不支持bazel,后续编译将只支持cmake

New Features:

  • 增加了arrow acero执行引擎,能够大幅提升大数据聚合/join的性能,db需要打开开关-use_arrow_vector=true
  • 支持向量索引vector_index,采用faiss+OpenBLAS做相似度检索,有能力同学可以把OpenBLAS可以换成MKL获得更好性能
  • 支持冷数据使用分布式文件系统(目前适配内部文件系统,外部需要实现include/engine/external_filesystem.h内的接口)
  • 重构range分区,支持动态时间分区
  • float point支持保留几位小数,例如double(10,2)保留2位小数
  • 支持单表可以发给多个binlog表,可以支持不同业务binlog保序
  • 支持注释不发binlog:/{"no_binlog":true}/
  • ddl支持store粒度的限制并发
  • 支持merge into语法(类似replace into语法,只是相同主键会合并而不是覆盖),类似于olap系统的sum聚合模型
  • merge into的表支持rollup索引,可以按照维度进一步聚合
  • 向量索引支持带前缀索引(必须和之间前缀一致),可以保存私域向量,向量搜索只在固定前缀里搜索(类似自动的不限制个数的partition功能)例如:primary(prefix, id), vector index(prefix, vec);使用的时候where prefix = xx and match(vector_field) against ('0.1,0.2,0.3...' in vector mode)
  • alter table modify column 无default时会清理默认值
  • 拒绝修改Schema Conf不为空的表的resource tag,除非指定force强制执行
  • 支持视图,支持with语句
  • 支持dblink功能(link后不同meta的表可以互相访问),db需要打开开关enable_dblink=true。例子:CREATE TABLE tbl1 (
    ) ENGINE=DBLink COMMENT='{"dblink_info": {"type":"LT_BAIKALDB","meta_name":"meta_addr","namespace_name":"ns","database_name":"db1","table_name":"tbl1"}}'
  • 支持multi distinct;例如 select count(distinct a), count(distinct b) from tb group by xx
  • 建表列名检查,不支持空格等特殊字符
  • 定期同步user权限
  • 日期支持CURDATE() - INTERVAL 7 DAY
  • mysql兼容性,建表不指定not null,默认是null
  • 当select字段只包括min或max函数时,转换为order by xx limit 1。
  • sort算子存在limit时,使用topn
  • agg/distinct没有聚合函数时,支持limit
  • db支持动态修改user quota。
  • 无结果时,agg返回0值
  • json类型和bit类型支持
  • like前缀匹配转range
  • 支持distinct count(*)
  • sort index使用primary字段
  • 多表join支持reorder
  • 子查询支持force index
  • update语句支持保持ttl
  • 兼容性:support datetime(n),支持配置精度,默认0
  • 兼容性:新增函数find_in_set
  • 兼容性:兼容mysql索引语法
  • 兼容性:补齐时间类函数
  • 兼容性:补齐字符类函数
  • 兼容性:兼容mysql建表语法
  • 功能性: 新增FLAGS_max_select_region_count,用于控制手写慢sql抢占线上sql资源
  • 兼容性:支持change column语法
  • 功能性:默认字符集设为utf8
  • 兼容性:alter table时允许添加多列
  • 兼容性:index.short_name展示时保留大小写
  • 兼容性:支持drop index name on table语法
  • 兼容性:新增SQL show tables, show columns
  • 兼容性:set sql_mode="compatible"开启兼容模式,show create table会去掉特殊语法,完全兼容mysql
  • 兼容性:show tables命令information_schema库转小写
  • 功能性:slow query log 新增 sign, server_addr and conn_id字段
  • 功能性:当meta复制组更新时,store自动更新meta list,用于集群迁移时,可避免store重启
  • 功能性:delete/update语句支持 OrderBy和Limit 用法
  • case when语句agg_sql固定长度
  • 增加bvar region_error_count
  • print_query_time and agg sql时增加指标disk read size
  • drop index忽略索引名称大小写
  • 允许单副本分裂
  • query cache功能,/*{"query_cache":10000}*/ 开启,单位ms
  • replica_num=1时也允许分裂
  • 加权限后10s后会自动拉取,这样之前的连接有都有最新权限
  • cmake修改依赖 c++17, rocksdb7.10.2, lz4, zstd, liburing,arrow16.1.0(内部修改了支持binary_view和全功能swissjoin)
  • 支持和mysql一样的权限校验,详见pr #234
  • 支持''与"",字符串转义
  • select * 时,忽略新增字段导致的记录反解析错误
  • 支持select ... for update语义
  • 支持_UTF8MB4 STRING_LIT语法
  • 支持子查询多个括号的解析,((subselect))
  • split add flags min slow down cost and max slow down cost

Bug Fixes:

  • 修复binlog table加列core
  • 修复information_schema join 出core
  • 修复Prepare模式不下发binlog
  • fix update set null
  • 向量索引内存泄露fix
  • 倒排报错修复
  • fix row expr in (null)
  • fix check_and_update_incremental
  • union子查询不支持fullexport
  • fix drop region 导致 meta ddl core
  • join reorder fix
  • range分区预分裂问题fix
  • group_concat core fix
  • 修复like prefix
  • 表达式分区赋值fix
  • 修复union问题
  • 修复子查询类型推导
  • derived_table独立ctx,和外层名称不冲突
  • 子查询类型推导bugfix && 子查询全局索引下推bugfix
  • fix heart beat core
  • 限制ttl表不支持add fulltext
  • 全局索引partition_regions fix
  • 修复prepare默认值问题
  • 修复bugs:(a,b)>(0,0) and b in (1,2,3)
  • fix insert select core
  • prepare模式QueryContext及RuntimeStatus对象部分变量需重置,比如 is_canel, 统计信息。debug_region_id, execute_global_flow等。
  • update_manager_node全局索引更新时,不返回last_insert_id修复。
  • union类型统计到select_time_cost
  • prepare模式设置dml txt。只有非select且prepared_table_id != -1才需要设置
  • index_selector中计算分区时,只有等值类型才能计算。(前缀like计算会出错)
  • index_selector中生产field_range_map时,每次需要清空FieldRange对象。SQL where a like 'xx_%' and a = '111;
  • SQL: 修复建表语句 commet = '1'出core的bug
  • SQL:show full columns与输出MySQL保持一致
  • binlog: 更新checkpoint的bug
  • sort_limit_by_range bug
  • cstore + ttl表,update字段默认值时不生效的bug
  • show命令result包返回失败会卡主状态机的bug
  • 内存安全:exec node delete after parent clear children
  • enable profilers
  • string type return field length 255
  • not in (null)
  • 开启binglog时,update cstore需要返回全部字段
  • fix: kill 不存在的id时报错
  • select use peer index 不生效问题
  • proto文件变更时,cmake workflow check失败的问题
  • 修复leader为空时,init channel failed的bug
  • 修复(a,b) in (结果为空的子查询)时,导致扫全表的bug
  • 修复了Where (a,b) in (1,2) and (b, c) in (3,4)时,字段b计算field_range_map时的bug
  • Innodb to InnoDB,与mysql兼容

Performance Improvements:

  • 增加了arrow acero执行引擎,能够大幅提升大数据聚合/join的性能,db需要打开开关-use_arrow_vector=true
  • 采用双buf优化meta心跳性能,单meta可以支持更多db和store
  • add_partition时init regions异步执行
  • 支持union和子查询的谓词下推
  • 调整不同range type的索引选择权重,EQ > IN > RANGE
  • db侧新增FLAGS_sql_exec_timeout,控制db请求store最大用时
  • 优化sql 注释解析性能,仅存在注释时定义re2
  • UserPrivilege获取优化
  • 支持执行计划缓存,普通select可以类似prepare
  • 满足parition的in条件支持按照partition拆分,降低seek量
  • 增加--rocks_enable_blob_files=true,启用blobdb,以支持kv分离,对大Value(--rocks_min_blob_size配置),性能有提升