当前位置: 首页 > news >正文

Databend 九月月报:自增列 AUTOINCREMENT 与行级安全

Hi,Databend 的朋友们!🚀

九月我们把重点放在了生产环境真正需要的功能上。这个月上线了行级访问控制、Check 约束、AUTOINCREMENT 自增列、基于事务的表名交换(SWAP),还有智能的 SQL 错误提示。这些都是企业用户一直在等的功能。

九月数据

15+ 个新功能30+ 个 bug 修复15+ 项性能优化,还有 10+ 项其他改进。最值得说的:安全管控更严了、数据校验更方便了、大结果集也不怕了。

本月亮点

🔥 核心功能

  • 行级访问策略 - 多租户数据隔离,统计信息自动加密
  • AUTOINCREMENT - 自增 ID,不用手动管 Sequence 了
  • Check 约束 - 在表结构里直接定义数据规则
  • SQL 智能纠错 - 打错命令给你提示

🛠 好用的功能

  • 表交换(SWAP) - 单事务原子交换表名,大表改结构零停机
  • Pivot 增强 - Pivot 可以用任意表达式排序了
  • 存储过程权限 - 可以单独给存储过程授权了
  • Sequence 增强 - 可以自定义起始值和步长

⚡ 性能优化

  • 虚拟列写入加速 - JSON 数据导入更快
  • Meta 快照优化 - 集群同步效率提升
  • Join 内存优化 - 大表 Join 不那么吃内存了
  • 分布式 Recluster - 表维护速度更快

🐛 修复的问题

  • 30+ 个 bug - 查询、事务、meta 服务都有涉及
  • 结果集溢出 - 修了 nullable 数据丢失的问题
  • Vacuum 改进 - 删表后清理更彻底
  • 事务可靠性 - 存储过程里的 DDL 现在会正确提交了

核心功能详解

🔐 行级访问策略

做多租户 SaaS 最头疼的就是数据隔离。现在有了行级策略,一次定义,到处生效。

-- 定义策略:每个租户只能看自己的数据
CREATE ROW ACCESS POLICY tenant_isolation AS (tenant_id INT)
RETURNS BOOLEAN -> tenant_id = CURRENT_TENANT();-- 加到表上
ALTER TABLE customer_dataADD ROW ACCESS POLICY tenant_isolation(tenant_id);-- 以后所有查询都自动过滤
SELECT * FROM customer_data;
-- 用户只能看到自己租户的数据,想越权都不行

有啥好处:

  • 应用层不用管过滤逻辑,数据库层面自动拦截
  • 统计信息也会自动加密,防止通过 EXPLAIN 看到别人的数据
  • GDPR、HIPAA 这些合规要求,轻松搞定

🎯 AUTOINCREMENT

以前要自增 ID,得先建 Sequence,再在表里 NEXTVAL,删表还得记得删 Sequence。现在不用了。

以前的写法:

CREATE SEQUENCE user_id_seq START 1 INCREMENT 1;
CREATE TABLE users (id INT DEFAULT NEXTVAL('user_id_seq'), name VARCHAR);
-- 删表时还得记得删 Sequence,容易忘

现在这样写:

CREATE TABLE users (id INT AUTOINCREMENT,name VARCHAR,email VARCHAR
);INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
-- ID 自动从 0 开始:0, 1, 2...

各种灵活的用法:

-- 最简单的
id INT AUTOINCREMENT-- 从 1000 开始,每次加 10
order_id INT AUTOINCREMENT (1000, 10)  -- 1000, 1010, 1020...-- MySQL 风格的写法也支持
invoice_id INT IDENTITY START 1000 INCREMENT 10-- 一张表可以有多个自增列
CREATE TABLE events (event_id INT AUTOINCREMENT,sequence_num INT AUTOINCREMENT,data VARCHAR
);

好处显而易见:

  • Sequence 跟着表走,建表自动建,删表自动删
  • MySQL、PostgreSQL、Snowflake 的写法都兼容
  • 不会留下孤儿 Sequence,省心

✅ Check 约束

数据校验以前都写在应用里,容易漏。现在可以直接写到表结构上。

CREATE TABLE products (id INT AUTOINCREMENT,name VARCHAR NOT NULL,price DECIMAL(10,2),discount_percent INT,stock INT,CONSTRAINT price_valid CHECK (price > 0),CONSTRAINT discount_range CHECK (discount_percent BETWEEN 0 AND 100),CONSTRAINT stock_non_negative CHECK (stock >= 0)
);-- 正常数据,没问题
INSERT INTO products (name, price, discount_percent, stock)
VALUES ('Widget', 59.99, 10, 100);-- 不符合规则的数据,直接拒绝
INSERT INTO products (name, price, discount_percent, stock)
VALUES ('Gadget', -10.00, 150, -5);
-- Error: CHECK constraint failed

有啥用:

  • 数据验证在数据库层面搞定,应用层不用操心
  • 后续可以用 ALTER TABLE ADD/DROP CONSTRAINT 调整规则
  • 想看有哪些约束,查 system.constraints 就行

🔄 表交换 SWAP

单事务原子交换两个表名,解决大表结构变更的对业务的影响的问题。

痛点:

-- 传统方法:两步RENAME中间有间隙
ALTER TABLE orders RENAME TO orders_backup;  -- 第1步
ALTER TABLE orders_v2 RENAME TO orders;      -- 第2步
-- ⚠️ 这两步之间orders不存在,应用查询会失败

解决方案:

-- 1. 创建新结构的表
CREATE TABLE orders_v2 (order_id INT,user_id INT,amount DECIMAL(10,2),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  -- 新增列status VARCHAR DEFAULT 'pending'                  -- 新增列
);-- 2. 离线迁移数据
INSERT INTO orders_v2 SELECT *, CURRENT_TIMESTAMP, 'completed' FROM orders;-- 3. 单事务内原子交换
ALTER TABLE orders SWAP WITH orders_v2;
-- ✓ orders和orders_v2在同一事务内互换名字
-- ✓ 应用全程可以访问orders,零停机

适用场景:

  • 大表添加/删除列
  • 表结构重构
  • 数据类型变更
  • 分区策略调整

📝 SQL 智能纠错

打错命令的时候,现在会给你提示了。

SHOW TABLE;
-- 以前: "unexpected TABLE, expecting STATUS, TABLES..."
-- 现在: "Did you mean SHOW TABLES or SHOW TABLE FUNCTIONS?"VACUUM TEMPARE FILES;
-- 提示: "Did you mean VACUUM TEMPORARY FILES?"

实用:

  • 打错了会告诉你可能想输入什么
  • 错误信息更友好,调试更快
  • 支持拼写错误和不完整的命令

其他改进

📊 查询优化

  • Pivot 排序 - Pivot 现在可以用任意表达式排序了
  • CTE 优化 - 公共表表达式的物化逻辑更智能
  • 运行时过滤 - Join 的时候谓词下推更激进,速度更快

🔧 运维

  • 分布式 Recluster - 表维护的并行度更高
  • Vacuum 改进 - 清理删除表和历史快照更彻底

🛠 Meta 服务

  • 快照协议升级 - V004 版本,集群状态同步更快
  • 可观测性 - 日志和监控指标更详细

九月的主题就是生产可用。 行级安全、数据校验、自增列、大结果集处理,这些都是企业用户天天要用的功能。Databend 在保持云原生架构的同时,功能完整度越来越接近企业级数据库。

多租户 SaaS 有了数据隔离。DBA 有了声明式约束。应用有了自增 ID。大查询也不怕 OOM 了。实实在在解决生产问题。

🔗 立即体验

  • 开源:https://github.com/databendlabs/databend
  • 云服务:https://databend.cn
  • 文档:https://docs.databend.cn
http://www.dtcms.com/a/469248.html

相关文章:

  • Zenlayer 推出分布式推理平台,加速 AI 创新全球落地
  • 01-iptables防火墙安全
  • Docker存储技术全解析:分层与持久化
  • 分布式专题——39 RocketMQ客户端编程模型
  • 物联网二级平台设计与实现:从Home Assistant到JetLinks的设备协同架构实践
  • 分布式文件存储 RPC 服务实现
  • 在哪些软件上建设网站市场营销方案怎么做
  • 《小小梦魇3》今日发售!用UU远程手机躺玩通关
  • Jenkins Pipeline post指令详解
  • 系列文章<一>(从LED显示问题到非LED领域影像画质优化:揭秘跨领域的核心技术):从LED冬奥会、奥运会及春晚等大屏,到手机小屏,快来挖一挖里面都有什么
  • 泊松分布解题步骤
  • Postman API 测试使用指南:从入门到精通
  • VisualSVN-Server-2.5.26 TortoiseSVN-1.7.21
  • SVN 检出操作
  • 深度相机初探:立体视觉(Stereo Vision)、结构光(Structured Light)、TOF(Time of Flight,飞行时间)
  • SVN 生命周期
  • 武昌做网站公司互联网营销顾问是做什么的
  • 辉视融合服务器:强劲驱动电视信息发布,直播点播流畅运行,赋能高效传播
  • MyBatis-Spring-Boot快速上手指南
  • Linux运维实战:系统及服务管理(视频教程)
  • 服务器运维(四)服务器漏洞扫描工具与审查——东方仙化神期
  • SolidWorks服务器多人使用方案
  • 安卓手机app开发软件下载网站关键词优化效果
  • Redis中的RPOP、BRPOP、LPOP 和 BLPOP
  • R语言学习
  • 【C++】C++11 新特性详解(下)
  • 成都市公园城市建设管理局网站济南百度推广开户
  • 网站的技术建设公司网站建设 wordpress
  • 联想小新平板Pro GT/Y700四代平板无需解锁BL获取root权限方法
  • Linux系统安装PGSQL实现向量存储