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

一、业务背景

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

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

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

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

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

二、字典服务

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

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

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

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

三、细节设计

1、维护方式

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

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

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

2、数据加载

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

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

3、数据修改

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

四、数据意识

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

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

ENDENDEND


字典服务的设计与管理相关推荐

  1. .NET应用程序管理服务AMS设计

    AMS全称是Application Management Server即应用程序管理服:由于经常要写些一些应用服务,每次部署和维护都比较麻烦,首先要针对服务编写一个windows服务程序方便系统启动里 ...

  2. 架构设计:服务自动化部署和管理流程

    本文源码:GitHub·点这里 || GitEE·点这里 一.分布式服务 从常规分布式架构系统来说,划分出十来个独立的微服务模块是很常见的,然后不同的开发人员分工几个服务块,负责日常开发和维护,微服务 ...

  3. 关于密码的那些事儿—浅谈密码的设计与管理

    这是整理于2011年底的一份报告材料. 介绍1.背景 2011年底,国内遭遇网络安全的"崩盘".从CSDN用户数据被爆库,到天涯用户信息被刷库,到众多社交网站.论坛用户数据被拖库, ...

  4. 远程字典服务Redis,感谢B站黑马程序员,多多三连

    目录 1.数据存储的解决方案(电商场景) 2.远程字典服务Redis介绍 2.1 基本操作 2.2 数据存储类型 3.数据类型 3.1 string 3.1.1 string类型数据基本操作 3.1. ...

  5. 你必须了解的微服务架构设计的10个要点!

    近来,几乎人人都在谈论微服务.微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活.更能适应现在需求快速变更的大环境等.本文将介绍微服务架构设计中的一些要点. 微服务架构设计时有哪些要点 ...

  6. ARTS打卡计划第一周-Share-系统字典模块的设计

    在软件开发的过程,经常有一些类型的字段信息:性别.学历.职级.车辆类别.公司类型.结算类型等.这些字段有2个特征:1是字段可选的类型是有限,2是字段可能会变化,我们把这种字段描述为字段字段.  本篇文 ...

  7. 数据产品经理:埋点的设计、管理与应用

    本文由作者 董小矿 于社区发布 前言: 本篇是从数据产品经理如何设计.管理和应用埋点的角度重新整理的文章,其中:1.埋点类型.2.1新增埋点设计.2.3产品指标地图部分的内容,与本人之前的文章有重叠, ...

  8. Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战

    Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台-  什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...

  9. 架构设计:远程调用服务架构设计及zookeeper技术详解(上篇)

    一.序言 Hadoop是一个技术生态圈,zookeeper是hadoop生态圈里一个非常重要的技术,当我研究学习hadoop的相关技术时候,有两块知识曾经让我十分的困惑,一个是hbase,一个就是zo ...

最新文章

  1. defensive-bash-programming
  2. BZOJ1975 [Sdoi2010]魔法猪学院 k短路
  3. 微信公众平台消息接口开发(34)桃花运测试
  4. c++ 基本排序算法学习
  5. 你的代码(软件)安全吗?【信息图】
  6. 【Fiddler篇】FreeHttp无限篡改http报文数据调试和mock服务
  7. 猎豹移动回应被谷歌下架:积极整改情况下被单方面下架
  8. My SQL-4 函数
  9. JAVA中的编码分析
  10. html5标签 不可修改,SEO优化不可忽视的5个Html代码标签
  11. 小米个性主题显示服务器不可用,MIUI个性主题上线透明壁纸功能,并修复状态栏无法混搭问题!...
  12. c语言悔棋用栈,中国象棋人机博弈程序(扁平化棋局) C语言实现
  13. 【爆笑】句经典流行俏皮语【爆笑】[
  14. 东拉西扯01世界的沧海桑田
  15. 云安全|云原生安全概述
  16. 机器学习中的F1-score
  17. 从红海里面寻找蓝海,看一个人的思维模式
  18. jquery 实现购物车的商品总数及价格计算
  19. 关于步进电机励相数、拍数、励磁方式、编码
  20. Android开发之仿QQ表情实现(下)

热门文章

  1. MyTtcp 测试网络带宽
  2. JS判断一个值是什么类型
  3. arcgis 界线外 遮盖_ArcGIS里怎么画边界线。比如地级市的地图。合并成一个省级界线地图。...
  4. 内存取证CTF-Memlabs靶场2
  5. 基于Lua框架下的合宙ESP32C3+1.5‘’Eink墨水屏天气时钟+OLED开源项目分享
  6. 在Vue3项目中使用 Echarts 绘制股票图表的分享(五):分时图的基础上绘制出五日图
  7. 机构推荐的2011年十大金股
  8. python3d相册源代码_js和CSS3炫酷3D相册展示
  9. Jmeter badboy脚本开发技术
  10. 《万王之王3》主题歌歌词有奖大征集