科学健康资讯 · 内容仅供参考,不替代专业诊疗 联系我们|疾病百科
操作系统

settimestamp

2023-05-01 操作系统 本文链接

clickhouse的jdbc驱动对于datetime64这种类型的时间存在精度丢失。一开始测试人员发现数据是毫秒数都是0直接提bug,然后让公司同事先搜下mybatis的时间精度问题,大体都是说指定jdbcType为TIMESTAMP,试了返回的date类型数据毫秒数还是丢失。无奈之下只能断点调试跟踪源码了,发现mybatis的DateTypeHandler处理时间戳转换有问题,进一步跟踪发现jbbc的resultset返回的时间数据是有毫秒的,于是进一步定位到clickhouse resultset里发现对应数据库返回的时间类型简单粗暴的用Yyyy-mm-dd hh:mm:ss进行格式化,导致毫秒数丢失,至此精度丢失的本质问题已经找到。于是覆盖这个类,将时间处理函数重写,问题得以解决。后续看看clickhouse的jdbc驱动,这块是否更新,没有更新我可以去提一下[耶]

Mysql表设计推荐

1. INT等整型不要采用无符号的,计算增加会减少时候如果是负数会报错。

2. 自增用8个字节的BIG INT,而不要用四个字节INT,自增在MySQL 8.0前都会有回溯问题。

3. 字符集用UTF8MB4字符编码。

4. 日期类型用DATETIME,精确到毫秒用DATETIME(6),不建议使用INT或TIMESTAMP。

5. 用JSON存储非频繁更新的结构化数据,比如用户标签等。

6. 每张表一定要有一个主键,核心表要有全局唯一字段(比如雪花算法生成id或有序UUID)作为主键。

7. 对日志,监控类的表,可以使用压缩设计,提升存储效率。推荐使用透明页压缩。

8. 敏感字段要加密,动态盐+非固定加密算法( AES256等)+多轮加密。

9. Mysql中通过KV方式访问表中数据,若只是简单的SET和GET,可以转成Memcached的KV方式,减少开销,提升50%左右性

#数据库#

本文内容仅供健康科普参考,不能替代专业医疗诊断和治疗建议。如有身体不适,请及时就医并遵从医师指导。

相关阅读