字典服务的设计与管理

编码问题,谁不想避其锋芒;

一、业务背景

在搜索引擎的功能上,曾经遇到过这样一个问题,数据库中某个公司名称中存在特殊编码,尽管数据已经正常同步到索引中,但是系统中关键词始终也无法匹配到该公司;

然后在库中模糊匹配,将公司名称复制到搜索框中,这样就可以正常命中索引,那么问题也就很清楚了,这种数据”隐身”的情况,即看着是同一个字,但是实际上不是,通常由特殊编码引起的;

通过表单进行数据采集是常用的业务手段,但是如果表单存在多个任意输入的文本框,这样获取的数据在质量上可能存在很多欠缺,尤其针对一些核心字段,严谨的校验规则十分有必要;

如果站在数据层面来看,虽然获取多维度数据有利于全景识别,但是各个维度的值准确与否或质量高低才是关键,对于多数业务场景来说,只依赖数据实体的部分属性,更多还是在于数据维度的质量;

提高数据质量的手段中,最行之有效的方式就是尽可能对字段维度提供枚举值,将数据内容限制在约定的范围内,其次就是校验规则需要严谨,以此确保业务数据的高质量;

二、字典服务

在分布式系统架构中,比较常见的基础服务层通常有:调度、缓存、文件、消息、字典等,下面就来详细的聊聊字典服务的设计与业务协作的逻辑;首先看一看交互逻辑:

字典服务的设计与管理

在字典服务中,通常管理公共的常量与数据枚举值的维护;常规情况下,在业务表单加载的时候,从字典服务中读取各维度枚举值,在表单提交的时候,校验相关枚举字段,以此提高内容的质量;

在字典服务中提供的枚举值,根本目的是为了确保数据值的统一性,尽可能的避免同一个信息用两种方式描述,比如编程标签:”JAVA”与”Java”,虽然从程序角度可以规避识别,但实际上是可以避免的;

字典服务的设计与管理

从字典服务常见的内容管理来看,通常包括:常量、状态描述、业务标识;行业、标签、地址、学校等数据码表;其最大的特点就是在系统中被全局复用和识别;

三、细节设计

1、维护方式

对于字典数据的维护,通常使用两种手段:枚举类管理,码表存储,参数表存储;如何选择对应的方式,更多是取决于数据的属性:

  • 枚举类:维护基本不会改变的字段,比如数据的常规状态描述;
  • 码表:通常数据具有层次或者级联关系,比如地址和行业中的多级联动;
  • 参数表:即时要求很高,例如字段枚举值的定义,需要动态实时管理;

字典服务的设计与管理

不管使用那种方式管理字典数据,都需要增强业务语义的描述,这样在业务表单中通过相应标识读取对应枚举选项即可,并且拦截范围之外的提交动作;

2、数据加载

字典数据的查询通常采用Cache-Aside缓存模式,即查询优先访问缓存数据,命中则返回数据;否则访问库表数据,获取数据后返回页面并同步缓存中;在控制中心做内容修改后也需要再次同步缓存;

字典服务的设计与管理

字典服务虽然并不复杂的,但是系统访问却十分频繁,如果出现异常情况很容易对业务产生大规模的影响,既要考虑并发访问的流量,又要设计合理的查询降低加载时间,避免对流程产生有感知的影响;

3、数据修改

不管是采用字典方式加载枚举值,还是采用任意输入的方式,都会面对一个无法避开的问题,字段值在业务开发中不断优化,则需要对数据进行清洗,至于数据清洗的流程在之前有详细的总结过,这里不再赘述。

四、数据意识

数据字典本身的逻辑比较简单,但是如果放在数据体系中,这是一种基础的意识,在数据中很容易出现同名但定义不同,或者定义相同但名称不同,这会给数据分析带来很多不必要的麻烦;

所以基于数据字典的方式,明确数据口径同时避免业务语义产生分歧,尤其对于汉语来说,”意思”到底是什么意思?

五、参考源码

编程文档:
https://gitee.com/cicadasmile/butte-java-note

应用仓库:
https://gitee.com/cicadasmile/butte-flyer-parent

Original: https://www.cnblogs.com/cicada-smile/p/16614338.html
Author: 知了一笑
Title: 字典服务的设计与管理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/610959/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • redis主从同步收到以下参数影响

    repl-ping-slave-period主从心跳ping的时间间隔。默认10 repl-timeout 从节点超时时间。默认60 repl-backlog-size 主节点保存…

    Linux 2023年5月28日
    061
  • zabbix自定义监控mysql主从状态和延迟

    zabbix自定义监控mysql主从状态和延迟 zabbix自定义监控mysql主从状态和延迟 zabbix自定义监控mysql主从状态 zabbix自定义监控mysql主从延迟 …

    Linux 2023年6月13日
    0113
  • 面试题目汇总

    目录: 1、数字数组数字数组2、字符串字符串3、链表 链表4、二叉树二叉树 5、堆栈 堆栈 posted @2019-12-11 20:35 风御之举 阅读(63 ) 评论() 编…

    Linux 2023年6月13日
    083
  • Linux

    ​ 大型企业高并发的 Java 应用程序都是部署在大型服务器之上的,而服务器的操作系统一般是使用高性能的 Linux(或Unix)的操作系统,不是 Windows 操作系统,所以编…

    Linux 2023年5月27日
    0149
  • 最新超详细Linux下LNMP环境搭建

    一、了解LNMP系统 当前两个主要应用的架构:LNMP和LAMP,都是指一组通常一起使用来运行动态网站或者服务器的自由软件名称。 LAMP的全称是:Linux + Apache +…

    Linux 2023年6月15日
    0140
  • Cisco实验:【DHCP配置】客户端跨网段通过DHCP服务器自动获取动态IP和固定IP地址

    模拟环境:R1为路由器e0/0接口和e0/1接口分别连接两个网段,e0/0连接用户区域,e0/1连接服务器区域;用户区域中SW1为接入层交换机,连接一台PC(R2模拟)和一台打印机…

    Linux 2023年6月8日
    0173
  • PyTorch 介绍 | LEARN THE BASICS

    大多数机器学习流程都包括数据、创建模型、优化模型参数,以及保存训练模型工作。该教程向你介绍一个在PyTorch上实现的完整的机器学习工作流,并提供了了解这些概念详细信息的链接。 我…

    Linux 2023年6月16日
    0129
  • AWS修改RDS时区

    查看 RDS 当前时区 默认情况下,AWS 的 RDS 采用的是 UTC 时间。而我们地区一般位于东八区,因此我们本地的时间是 UTC+8。 连接到 RDS 上,查询当前实例的时区…

    Linux 2023年6月7日
    092
  • 高等代数:4 矩阵的运算

    4 矩阵的运算 1、数域K上两个矩阵称为 相等,如果它们的行数相等,列数也相等,并且它们的所有元素对应相等。 2、定义1:设(A=(a_{ij}),B=(b_{ij}))都是数域K…

    Linux 2023年6月8日
    087
  • Docker-dockerfile

    Docker-通过Dockerfile创建镜像 1.Dockerfile简介 简而言之,Dockerfile 是一个描述如何创建 Docker 镜像所需步骤的文本文件。 一个Doc…

    Linux 2023年6月13日
    086
  • Linux指令_曾佳豪

    一、基础指令 1、ls指令 含义:ls (list) 用法1 :#ls 含义:列出当前工作目录下所有文件/文件夹的名称 [En] Meaning: list the names o…

    Linux 2023年5月27日
    0114
  • MySQL日志管理之二进制日志

    二进制日志采用二进制格式(01)来存储日志信息(导致数据发生变化的SQL语句),二进制日志记录整个数据库的修改过程。 MySQL的二进制日志主要就是起一个备份的功能。二进制日志≈备…

    Linux 2023年6月7日
    094
  • QT:设置子窗口显示在父窗口的位置(绝对坐标)

    故事背景:最近需要在父窗体修改按钮上弹出二次确认框,之前要么使用 QDesktopWidget,要么使用QCursor,来设置弹窗位置,但是这两种方式不是很理想,就是想弹到相对父窗…

    Linux 2023年6月13日
    095
  • select,poll,epoll的区别以及使用方法

    I/O多路复用是指:通过一种机制,可以 监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。 原生socket客户端在与服务端建立连接时,…

    Linux 2023年6月14日
    091
  • 如何在 pyqt 中解决启用 DPI 缩放后 QIcon 模糊的问题

    问题描述 如今显示器的分辨率越来越高,如果不启用 DPI 缩放,软件的字体和图标在高分屏下就会显得非常小,看得很累人。从 5.6 版本开始,Qt 便能支持 DPI 缩放功能,Qt6…

    Linux 2023年6月7日
    0195
  • Redis集群-哨兵模式

    Sentinel(哨岗、哨兵)是Redis的主从架构的高可用性解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)监视任意多个R…

    Linux 2023年6月7日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球