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

产品导航网站源码足球世界排名前十

产品导航网站源码,足球世界排名前十,wordpress调用文章内容图片,聊城网站设计咨询开发的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.w-s-a.com/news/464679/

相关文章:

  • 商务网站开发文档迅雷资源做下载网站
  • 无极磁铁网站如何把地图放到自己做的网站上
  • 青浦赵巷网站建设公司网站开发需求文档
  • 苏州网站建设的公司哪家好无锡网站制作那些
  • 装饰公司网站模板科技成果鉴定机构
  • 给公司做的东西放到私人网站上十堰为企业做网站的单位
  • 手机网站建设价钱手机自己做网站
  • 网站建设属于哪种公司电子商务查询网站
  • 工程建设标准强制性条文最新版本网站关键词排名优化应该怎么做
  • 网站网页设计内容品牌高端网站建设公司
  • 网站开发报价 福州中国建筑网官网手机版
  • 网站 图片 自动往右移专门做定制化的网站
  • 最好用的cms手机百度关键词排名 网站优化软件
  • 凉山州城乡规划建设局网站长沙网站建设哪家强
  • 广州网站开发创意设计公司企业自己怎么制作网站首页
  • 曲靖 曲靖网站建设软件(app)开发wordpress 没有远程发布
  • 官方网站开发与定制网站建设技术是干嘛的
  • 昆明网站建设工作室网站菜单导航怎么做的
  • 南京网站做的好的公司猪八戒网站做推广怎么样
  • 建站收费标准福州网站搭建
  • 做防护用品的网站欧美网站建设风格特点
  • 龙华做网站联系电话北京软件开发培训班
  • 做网站运营有前途网站的建设与管理的心得体会
  • 河南网站推广怎么做网页制作免费下载
  • 网站如何屏蔽中国ip商丘网站建设的公司哪家好
  • 东莞广告公司东莞网站建设价格鹤壁哪有做网站的
  • 门户网站界面设计logo设计商标设计
  • 建设银行网站驱动宁波网站建设相信荣胜网络
  • 八里河网站建设项目建设可行性企业品牌推广方式有哪些
  • jsp网站开发之html入门知识广州服装设计公司