HotDB 如何解决非确定性函数在使用中带来的问题
非确定性函数代理
非确定性函数在使用中,会带来一些列问题,尤其是全局表的数据一致性问题,为此HotDB Server提供非确定性函数代理的功能。
非确定性函数大致分为两类:
一类是已知值的时间类函数,如CURDATE()、CURRENT_TIMESTAMP()等,一类是未知值的随机值函数、值函数,如RAND()、UUID()等。
- 对于时间类函数,计算节点进行统一代理。
- 当表的字段类型有datetime(或者timestamp)且无默认值时,由参数timestampProxy控制计算节点的代理范围(默认为自动模式,可选全局处理/自动检测),将此类函数代理为具体值插入到表中;
- 当select/insert/update/delete语句中出现curdate()、curtime()等函数时,计算节点将函数代理为具体值插入到表中;
- 对于随机值函数,计算节点针对不同的SQL语句进行不同的代理办法。
- 对于值函数,计算节点进行统一代理。
- 当select/insert/update/delete语句中出现uuid()或uuid_short()时,计算节点按照标准的UUIDv1算法代理值;
- 当存储节点和配置库的server_id冲突时,计算节点自动禁用uuid_short()并告知用户手动调整server_id。可参考MySQL官网说明:https://dev.mysql.com/doc/refman/5.7/en/replication-options.html。
相关文章