当前位置: 首页 > news >正文

大连模板网站制作公司银行服务外包公司排名

大连模板网站制作公司,银行服务外包公司排名,网站推广营销怎么做,网站 建设需要提供哪些资料开发的MES#xff0c;往往都要做生产执行跟踪扫描#xff0c;这样会产生大量的扫描数据#xff0c;用关系型数据库#xff0c;很容易造成查询冲突的问题。 生产跟踪扫描就发生的密度是非常高的#xff0c;每个零部件的加工过程#xff0c;都要被记录下来#xff0c;特别…        开发的MES往往都要做生产执行跟踪扫描这样会产生大量的扫描数据用关系型数据库很容易造成查询冲突的问题。 生产跟踪扫描就发生的密度是非常高的每个零部件的加工过程都要被记录下来特别是在大型工厂。写入密度高但是每次写入的记录都很少如果程序设计是实时往数据库写入记录那基本是每次一条记录且写入的频率很高导致表锁时常发生对查询扫描日志会带来很大的压力。 解决跟踪扫描的问题最好的办法还是用缓存(Redis)而且要共享缓存就是不同用户使用同一个缓存空间防止相同的零部件扫描时候不会出现相互冲突。实际生产过程中扫描冲突是不应该发生的但是偏偏就是会发生例如操作员后补扫描。程序发起扫描请求时候先去查询缓存是否存在扫描记录如果有则根据缓存中的数据进行扫描校验例如是否存在扫描的编号、重复扫描、扫描次数限制等如果缓存中没有数据则表明零部件从来没有被扫描过则从数据库中加载基础信息例如零部件的信息、工序的信息、工作中心的信息等然后这些信息也放到缓存中基础信息不能存放太久一般扫描也就毫秒级完成算1秒吧可以设置缓存超时清除我这里是设置10分钟的绝对超时10分钟后重新从数据库加载基础数据。 扫描数据一直保存在缓存中根据生产周期也可以设定一个延期超时例如90天每访问一次就重置超时时间。扫描记录可以全部存放到内存缓存中MemoryCache),用一个定时器往数据库中写入扫描记录不管扫描是否成功日志都要写入数据库保存。如果出现数据库事务冲突或者超时则后续继续往数据库中写入直到写入成功后才从内存缓存中移除扫描数据。 一般来说程序设计查询扫描记录从缓存中查询即可数据结构采用Hash保存 Key:                Scan_零部件编号注意部件编号这里是全局唯一 HashKey        工序编号 Value                扫描数据json        [ {scanTime:2024-01-01,operator:001}] 因为同一个工序可能需要扫描2次或者以上的所以value的设计是个集合 当查询的时候只需要把key的所有数据一次性读取出来丢去前端即可完全不需要查询数据库。不管是写入还是读取都比数据库快很多代码也很简洁。当然之类最好把操作缓存的功能封装成一个工具类毕竟设计到内存缓存和Redis。 在常规的需求中以上功能已经完全满足日常生产需求但是如果超过了90天后扫描缓存被清除了呢那么就需要在数据库中查询组织数据并重新写入到缓存中。那么使用clickhouse查询那是完全优于使用关系数据库例如oracle、sqlserver、mysql、postgresql。不仅仅是构造扫描缓存可能还要做一些分析这里只是用最简单的一个查询来说明clickhouse和关系数据库之间的一些差异。 第一要把数据同步到clickhouse。前边也已经踩坑了系统使用的mssql,开发语言是C#研究了很久没有现成的方案同步或者说还没弄明白。本来打算flink-cdc同步数据结果弄出一堆问题来还是没搞通所以这个事暂时耽搁下来自己写了一个cdc的同步工具也就2天时间够用就好了凑合着后续再研究flink。flink官方没有现成的clickhouse-sink哪位大神指点一二 第二涉及到的查询关键字。用到的关键字做一个简单的说明 limit n by exp        根据字段取第n条记录这个关键字不能和distinct同时使用只取其一。例如扫描记录出现重复的扫描日志要取最后一次这样需要配合order by才能实现。limit在clickhouse中不仅仅用于分页例如记录中出现(key,value) {a,1},{a,2},order by value limit 1 by key,则会得到{a,1},第二条记录会被过滤掉。 first_value(exp1) over(partition by exp2 order by exp3) 根据字段exp2分组exp3的顺序取第一条记录exp1的值。例如扫描记录有5个步骤取第一个步骤的工序编号 first_value(processid) over(partition by partId order by scanTime) groupArray(exp1) over(partition by exp2 order by exp3 Rows BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) 加载分组中字段后的exp1字段的所有值例如部件扫描了5个工序这个查询构造出一个列表字段返回扫描的所有工序编号 {001,002,003,004,005},同理用相同的方法把扫描时间也查出来放到另外一个字段顺序是一样的 上述关键字会对查询条件有限制的出现在where中的字段必须在select中出现类似group by的要求这个好办最一个子查询就可以解决了 with tb as (select ... from ... where ...) select * from tb 这样就完全规避了查询限制 上个例子一般的关系数据库是很难实现这样的分组查询当然用后端代码也能构造出这样的结构就另说了。 在mes中有很多复杂的查询生产库使用mssql,查询库使用clickhouse实现了读写分离。mssql通过cdc与clickhouse同步开发的cdc同步组件同时支持rabbitmq可以把变更数据通过rabbitmq分发出去让其他应用做实时数据统计和分析。 clickhouse驱动在开发语言中还是很丰富的我使用的是clickhouse.client,在nuget中直接安装即可使用起来和ado差不多git中有比较完整的文档。这里报告一个bug,执行executeNonQuery返回整数时候无论是否成功都返回0这个就很蛋疼了 一开始的时候读写分离用的是ssis同步到另外一台mssql,虽然这样很方便但是也有不方便的时候例如要修改目标数据库的内容会导致ssis同步报错关键是当数据量上亿的时候再怎么优化也很慢占用的磁盘空间也大clickhouse经过压缩后压缩比例普遍在15~25%左右可以节约大量的磁盘空间。只要设置好表的分区分片性能那是杠杠的。
http://www.hkea.cn/news/14379933/

相关文章:

  • 个人网站空间一般多大wordpress模板用什么工具修改
  • 如何查询网站二级页面流量学年论文网站建设
  • 网站推广目标关键词怎么选软件开发前景分析
  • 上海教育网站前置审批淘宝网站建设目标是什么意思
  • 狼们求个没封的免费网站如何调用网站列表页
  • 如何优化网站关键词排名联合会网站建设
  • 本网站只做信息展示不提供在线交易wordpress图片尺寸 样式
  • 苏州手机网站开发公司国内外贸公司前十名
  • 商城网站建设效果说明设计网站开发方案流程
  • 官方网站是指哪个网站手机网站管理
  • 优质的杭州网站优化洛阳万悦网站建设
  • 医院网站建设的要求淘宝如何刷关键词增加权重
  • 怎样开发一个网站网站变exe文件怎么做
  • 建设门户网站都需要什么意思阿里云域名出售
  • 大连建设工程设计院有限公司网站wordpress响应式
  • 微信支付 网站开发建立网站一般多少钱
  • 网站开发常遇到客户问题网站专题策划案例
  • 网站建设与开发 教材合肥网站优化技术
  • 天津建设信息网站wordpress 评论 正在提交_请稍后
  • 建个人网站怎么赚钱吗公司logo设计图片欣赏
  • 软件中心志鸿优化网
  • nginx 网站开发万云网络网站
  • 温州市城市建设学校网站网站keywords重复解决方法
  • 网站管理 设置开启php网站制作流程
  • 永久免费ppt下载网站手表哪个网站做的好
  • 建设银行网站logowordpress邮件验证评论
  • 瓷砖网站建设项目网络
  • 电动工具咋在网上做网站郑州网官网
  • 东营做网站优化公司那些网站是php开发的
  • 宁国新站seocn域名注册流程