扩展字典的数据更新策略

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

扩展字典支持数据的在线更新,更新后无需重启服务。字典数据的更新频率由配置文件中的 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值不同,则会判定源数据发生了变化,字典需要更新。

目录
相关文章
|
3月前
|
Python
字典是怎么创建的,支持的操作又是如何实现的?
字典是怎么创建的,支持的操作又是如何实现的?
71 8
|
8月前
|
存储 JSON NoSQL
数据库- 动态属性策略
数据库- 动态属性策略
124 2
|
8月前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
462 0
|
6月前
|
存储 数据处理 数据库
数据库索引策略如何影响数据更新操作的性能?
【7月更文挑战第3天】数据库索引策略如何影响数据更新操作的性能?
105 1
|
8月前
|
存储 缓存 自然语言处理
平台设计-字典缓存
字典是软件开发中常用的功能
|
8月前
|
缓存 架构师 NoSQL
五种更新缓存的组合方式
【4月更文挑战第19天】更新缓存的步骤特别简单,共两步:更新数据库和更新缓存。但这简单的两步中需要考虑很多问题。
|
存储 数据采集 Java
从数据库中提取大量数据到 HashMap 集合中,优化方案有以下几点:
从数据库中提取大量数据到 HashMap 集合中,优化方案有以下几点:
261 0
|
存储 缓存 分布式计算
指定表和分区来预先缓存,查询分析更高效 | 学习笔记
快速学习指定表和分区来预先缓存,查询分析更高效。
163 0
|
数据库
【自然框架】元数据的数据库结构的详细说明和示例(三):项目与数据库字段的关联
【自然框架】PowerDesigner 格式的元数据的表结构 【自然框架】元数据的数据库结构的详细说明和示例(一):项目描述部分 【自然框架】元数据的数据库结构的详细说明和示例(二):数据库描述部分     1、Manage_FunListCol(列表用字段) 字段名...
980 0

热门文章

最新文章