扩展字典的数据更新策略

简介: 扩展字典的数据更新策略

扩展字典支持数据的在线更新,更新后无需重启服务。字典数据的更新频率由配置文件中的 lifetime 元素指定,单位为

<lifetime>
  <min>300</min>
  <max>360</max>
</lifetime>点击复制复制失败已复制


其中, minmax 分别指定了更新间隔的上下限。 ClickHouse 会在这个时间区间内随机触发更新动作,这样能够有效错开更新时间,避免所有字典在同一时间内爆发性的更新。当 minmax 都是 0 的时候,将禁用字典更新。对于 cache 字典而言, lifetime 还代表了它的缓存失效时间


字典内部拥有版本的概念,在数据更新的过程中,旧版的字典将持续提供服务,只有当更新完全成功之后,新版的字典才会替代旧版本。所以更新操作或者更新时发生的异常,并不会对字典的使用产生任何影响。


不同类型的字典数据源,更新机制也稍有差异。总体来说,扩展字典目前不支持增量更新。但部分数据源能够依照标识判断,只有在源数据发生实质变化后才实施更新动作。这个判断源数据是否被修改的标识,在字典内部称为 previous ,它保存了一个用于比对的值。 ClickHouse 的后台进程每隔 5 秒便会启动一次数据刷新的判断,依次对比每个数据字典中前后两次 previous 的值是否相同。若相同,则代表无需更新数据;若不同且满足更新频率,则代表需要更新数据。而对于 previous 值的获取方式,不同的数据源有不同的实现逻辑。


文件数据源

对于文件类型的数据源,它的 previous 值来自系统文件的修改时间,这和 Linux 系统中的 stat 查询命令类似:

$ stat test_flat_dictionary.xml 
  File: test_flat_dictionary.xml
  Size: 814           Blocks: 8          IO Block: 4096   regular file
Device: 45h/69d    Inode: 25821194    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-05-01 08:08:24.600907513 +0000
Modify: 2022-05-01 08:08:23.580896226 +0000
Change: 2022-05-01 08:08:23.580896226 +0000
 Birth: -点击复制复制失败已复制

当前后两次 previous 的值不同时,才会触发数据更新。


MySQL(InnoDB)、ClickHouse和ODBC

对于MySQL(InnoDB引擎)、ClickHouse和ODBC数据源,他们的previous值类源于invalidate_query中定义的SQL语句。例如在下面的示例中,如果前后两次的updatetime值不同,则会判定源数据发生了变化,字典需要更新。

目录
相关文章
|
6月前
|
XML 存储 JSON
不同类型数据进行批量拆分
经常处理大量的数据,这些数据可能具有不同的类型、格式和结构。批量拆分数据是一个常见的需求,它有助于我们更有效地处理、存储和分析数据
86 1
|
1月前
|
Python
字典是怎么创建的,支持的操作又是如何实现的?
字典是怎么创建的,支持的操作又是如何实现的?
51 8
|
4月前
|
存储 数据处理 数据库
数据库索引策略如何影响数据更新操作的性能?
【7月更文挑战第3天】数据库索引策略如何影响数据更新操作的性能?
79 1
|
5月前
|
数据库 关系型数据库 MySQL
关系性数据库查询日志的类型
【6月更文挑战第1天】
53 6
|
6月前
|
存储 缓存 自然语言处理
平台设计-字典缓存
字典是软件开发中常用的功能
|
6月前
|
缓存 架构师 NoSQL
五种更新缓存的组合方式
【4月更文挑战第19天】更新缓存的步骤特别简单,共两步:更新数据库和更新缓存。但这简单的两步中需要考虑很多问题。
|
Java
策略枚举:消除在项目里大批量使用if-else的优雅姿势
可以替换大量的if-else语句,且具备较好的可读性与扩展性,同时能显得轻量化,我比较推荐使用策略枚举来消除if-else。
125 0
|
NoSQL Redis 数据库
删除策略-过期数据的概念|学习笔记
快速学习删除策略-过期数据的概念
删除策略-过期数据的概念|学习笔记
集合或映射迭代过程进行删除或修改操作的时候会导致并发异常
集合或映射迭代过程进行删除或修改操作的时候会导致并发异常
148 0
集合或映射迭代过程进行删除或修改操作的时候会导致并发异常