4.8.0
版本发布时间: 2021-10-25 22:58:56
Tencent/APIJSON最新发布版本:6.2.0(2023-08-09 09:57:11)
新增支持 ClickHouse,感谢 @chenyanlann、@qiujunlin 的贡献 #307 #309; 新增支持 PostgreSQL, Oracle 等数据库的窗口函数 OVER(PARTITION BY .. ORDER BY ..),感谢 @qiujunlin 的贡献 #305; 重构 enum RequestRole 为 String 方便用户自定义扩展; 新增对 PUT 默认支持条件,不传 @combine 也行,感谢 @chenyanlann 的贡献 #307; 修改 @column 中的解析代码,使之支持带 SQL 关键词、单引号 'value' 等字符串,感谢 @qiujunlin 的贡献 #305; 新增支持 @column:"`key`" 反引号指定字段名以及 @column:"cast(`date` AS TIME)" 这种在函数内 `key` 与关键词等组合的格式; 新增支持 CASE WHEN,例如 (CASE sex WHEN 0 THEN '男' WHEN 1 THEN '女' ELSE '其它' END);
解决表对象中的子表对象数据总是一样以及在 Table[]:{ Table:{ ChildTable:{} } } 情况下只有首个 Table 里返回了 ChildTable; 解决聚合与分组等统计语句不支持 HAVING 等,感谢 @LiXinnnnnn 的贡献 #311; 解决 PUT "balance+": 1 未加到 update set 导致报错; 解决 PUT "key<>":[] 等被错误地转成了 SQL 条件 key = '[]' 等,感谢 @chenyanlann 的贡献 #307; 解决 PUT Table[] 请求中在某些情况下传远程函数无效的 bug,感谢 @WaizLee 的贡献 #324; 解决对 Oracle 的子查询 SELECT 语法错误的问题,感谢 @qiujunlin 的贡献 #309; 解决对 PostgreSQL 重复设置事务等级的 bug,感谢 @bullhe4d 的贡献 #316;
优化 Table[]:{ Table:{} } 这种单表数组的查询性能,实测提升 19%-27% #315; 将隐藏字段功能单独抽取方法 isHideColumn,方便重写来自定义; 抽取根据 tag 自动包装请求结构的方法为 wrapRequest,方便实现 简单形式的接口; AbstractSQLConfig 中 getValue 和 preparedValueList 修饰符改为 protected 方便子类重写来实现兼容 Oracle DATETIME,TIMESTAMP 等日期时间类型,例如对应 POST/PUT 的 to_date(?,'yyyy-mm-dd hh24:mi:ss'); Parser 移除未用上且没必要的方法 parseCorrectResponse; 删除部分已废弃的方法;
通用文档 新增本身说明、3.2 功能符 全局关键词和"@datasource":"DRUID" 跨数据源、3.1 操作方法 简单接口相关文档; Pull Request 新增小改文档或代码 的简要步骤; 更新 详细的说明文档.md,修复一些错误或过时的内容; 完善 保持与 APIJSON 仓库的同步 的可视化操作步骤; 解决中英文首页文档部分用户 Logo 不显示,感谢 @sy-records 的贡献 #325;
生态周边项目新增 apijson-practice,感谢 BAT 技术专家 vcoolwind 的贡献; 增加一个示例项目和一篇文章,感谢 @jerrylususu 的贡献 #291; 新增 apijson-go 的链接,感谢作者 @j2go 的贡献 #apijson-go; 新增包括 1 个腾讯工程师在内的 8 个贡献者,感谢大家的贡献; 主项目贡献者新增 1 人,生态项目贡献者新增 7 人,感谢大家的贡献; 使用登记新增圆通公司(场景:大数据应用APP内部接口);
兼容性:
重构 enum RequestRole 为 String 方便用户自定义扩展, 移除了原有的 apijson.RequestRole.java, 改为了现在的 apijson.orm.AbstractVerifier 中的 String 常量
/**未登录,不明身份的用户
*/
public static final String UNKNOWN = "UNKNOWN";
/**已登录的用户
*/
public static final String LOGIN = "LOGIN";
/**联系人,必须已登录
*/
public static final String CONTACT = "CONTACT";
/**圈子成员(CONTACT + OWNER),必须已登录
*/
public static final String CIRCLE = "CIRCLE";
/**拥有者,必须已登录
*/
public static final String OWNER = "OWNER";
/**管理员,必须已登录
*/
public static final String ADMIN = "ADMIN";
如果你的业务项目中用到了 RequestRole 相关代码,则:
1.所有 apijson.RequestRole.角色名 全局替换为 apijson.orm.AbstractVerifier.角色名; 2.所有类型为 RequestRole 的地方全局替换为 String; 3.所有 role == RequestRole.角色名 全局替换为 AbstractVerifier.角色名.equals(role);
腾讯 CSIG 某项目性能测试结果
MySQL 5.7 共 1.9KW 记录的大表,统计 CRUL 10-20M/s 网速从发起请求到接收完回包的总时长,具体见 https://github.com/Tencent/APIJSON/issues/315#issuecomment-975603059
数量级 | 4.7.0(5次取平均值) | 4.8.0(5次取平均值) | 是否正常回包 | where条件 | 性能提升 |
---|---|---|---|---|---|
10W | 1.739s | 1.159s | 是 | 无 | 50%。即((1/1.159-1/1.739)/(1/1.739))*100% |
20W | 3.518s | 2.676s | 是 | 无 | 31.5% |
50W | 9.257s | 6.952s | 是 | 无 | 33.2% |
80W | 16.236s | 10.697s | -Xmx=3192M时无法正常回包,OOM错误,调大-Xmx参数后ok。 | 无 | 51.8% |
100W | 19.748s | 14.466s | -Xmx=3192M时无法正常回包,OOM错误,调大-Xmx参数后ok | 无 | 36.5% |
10W | 1.928s | 1.392s | 是 | "x_xid{}":[xxxx36,xxxx38],覆盖数据超过100W数据。 | 38.5% |
20W | 4.149s | 2.852s | 是 | "x_xid{}":[xxxx36,xxxx38] | 45.5% |
50W | 10.652s | 7.231s | 是 | "x_xid{}":[xxxx36,xxxx38] | 47.3% |
80W | 16.975s | 12.465s | 调整了-Xmx后正常回包 | "x_xid{}":[xxxx36,xxxx38] | 36.2% |
100W | 20.632s | 16.481s | 调整了-Xmx后正常回包 | "x_xid{}":[xxxx36,xxxx38] | 25.2% |
1、 apijson-orm-4.8.0.jar 311.89KB