Database_Persistence.md 1.3 KB

数据库和持久层

数据库连接配置

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/iot_db?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=ENC(WbEfoi/DMZVrFCV1UG3uJA==)

Mybaits Mapper

基本的增删改查 Mapper 只需继承 tk.mybatis.mapper.common.Mapper(具体参考 https://git.oschina.net/free/Mapper)

其它数据库操作按照原生 Mybaits 的开发方式将 SQL 语句配置在 Mapper XML 文件中。

主键

主键约定:

  • BigInt
  • 非自增
  • 分布式环境下保持唯一
  • 时间上有序

本框架提供了 Snowflake 算法来生成主键,使用 @Key 注解即可在保存到数据库之前由 MyBatis 拦截器生成ID , 例如:

public class Entity {
    @Id
    @Key(type = KeyType.SNOWFLAKE)
    private Long id;
}

关于 Twitter Snowflake 主键生成算法

  • 分布式 64位 ID 算法
  • 使用 41 bit来存放时间,精确到毫秒,可以使用到 2082 年
  • 使用 10 bit来存放逻辑分片ID,分片ID 范围为 [0, 1023]
  • 使用 12 bit来存放自增长ID,每个分片每毫秒最多可以生成 4096 个ID [0, 4095]
  • 剩余最左侧 1 bit 未使用
timestamp datanode sequence
41bit 10bit 12bit