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

数字镭网站开发简易php企业网站源码

数字镭网站开发,简易php企业网站源码,pagekit和wordpress,医院网站建设方案书前言 因为项目需要把传感器的数据保存起来#xff0c;当时设计的时是mongo来存储#xff0c;后期需要从mongo DB里查询传感器的数据记录。由于传感器每秒都会像mongo数据库存500条左右的数据#xff0c;1天就有4320万条数据#xff0c;要想按照时间条件去查询#xff0c;…前言 因为项目需要把传感器的数据保存起来当时设计的时是mongo来存储后期需要从mongo DB里查询传感器的数据记录。由于传感器每秒都会像mongo数据库存500条左右的数据1天就有4320万条数据要想按照时间条件去查询经常会被卡死。以下是我的解决过程和方案。 解决方案 水平分表 按照传感器类型分表 将不同不同传感器的数据分别存入不同的表集合中这样每个表的数据就成倍减少但是过了一段时间发现查询嗨是很慢每个传感器每秒需要保存的数据也有100条左右一天就是864万条数据。仅靠类型分表是不行的。 按照日期分表 每个表每天的数据有864万条数据一个月就是2.6亿条数据。于是按照日期每天对每个传感器类型建设了一个表 表集合名格式如 ‘temperature_sensor_20240310’。 如保存数据时候自动创建分表代码如下 Asyncpublic T void insertSharding(Collection? extends T batchToSave, String collectionName) {String collectionNameSharding collectionName _ DateUtil.today();if (CollectionUtil.isNotEmpty(batchToSave)) {mongoTemplate.insert(batchToSave, collectionNameSharding);}}DateUtil.today() 是我工具类里的方法等效于 DateUtil.format(new Date(),“yyyyMMdd”)注意请保证每个传入的对象里都有一个createTime字段查询的时候会用到 按照时间查询分表的方法代码如下 public T ListT getSecondData(LocalDateTime start, LocalDateTime end, ClassT entityClass, String collectionName) {String collectionNameSharding collectionName_DateUtil.format(start,yyyyMMdd);// 设置时间范围查询条件Criteria criteria Criteria.where(createTime).gte(start).lte(end);// 查询数据return mongoTemplate.find(Query.query(criteria).limit(1000).skip(0), entityClass,collectionNameSharding);}代码中的 .limit(1000) 表示限制查询结果的数量即最多返回1000条匹配的文档记录。这对于分页查询或者批量处理数据时非常有用可以避免一次性加载过多数据导致内存溢出或响应延迟。 而 .skip(0) 则表示跳过前0条匹配的文档记录从第一条开始返回。在分页查询场景下如果你想获取第二页的数据通常会将skip的参数设置为每页大小假设也是1000即 .skip(1000)这样就会跳过前1000条然后取接下来的1000条数据。 经过以上操作查询数据的时候不会被卡顿了但是查询速度需要2s左右,项目需求查询速度至少得在200ms内所以还得继续优化。 建立索引 因为mongo水平分表的缘故不可能人工去对每个字段创建的表集合去建立时间索引需要代码实现创建表的同时自动创建时间索引。 修改分表数据保存方法如下 Asyncpublic T void insertSharding(Collection? extends T batchToSave, String collectionName) {String collectionNameSharding collectionName _ DateUtil.today();if (!mongoTemplate.collectionExists(collectionNameSharding)) {mongoTemplate.createCollection(collectionNameSharding);IndexOperations indexOps mongoTemplate.indexOps(collectionNameSharding);indexOps.ensureIndex(new Index().on(createTime, Sort.Direction.ASC).named(collectionNameSharding_createTime));}if (CollectionUtil.isNotEmpty(batchToSave)) {mongoTemplate.insert(batchToSave, collectionNameSharding);}}named(collectionNameSharding“_createTime”)) 即创建索引的名称on(“createTime”, Sort.Direction.ASC) 即使用集合中的createTime字段按照升序建立索引。 总结 经过以上水平分表和建立索引的方法按照时间条件去查询的方法已经可以优化到200ms左右了。本篇教程到此未知如果觉得不错记得一键三连感谢各位的支持
http://www.hkea.cn/news/14558765/

相关文章:

  • 查看虚拟币行情的网站怎么做网站设计建
  • 四川达州网站建设h5短视频源码
  • 怎么进网站如何做好网站推广方法
  • 百度做的网站外贸网站制作公司
  • 微信怎么建小网站网页制作素材包
  • 江苏网站建设南通中国企业商务网站建设
  • 网站建设与维护作业angular wordpress
  • 怎样给网站做优化铜陵seo
  • 做调查问卷网挣钱的网站windows 做网站服务器吗
  • 做网站学h5还是php昆明商城小程序开发
  • wordpress友情链接调用如何做seo搜索引擎优化
  • 抓好网站建设工作百度竞价排名背后的伦理问题
  • 城乡建设吧部网站帝国cms手机网站
  • 宿豫建设局网站建设六马路小学 网站
  • 沈阳海外模板建站网站开发不用框架?
  • 建设 网站协议范本博罗中山网站建设
  • 网站上传的图片怎么做的清晰免费网络游戏大全
  • 手机网站前端模板下载问卷调查网站建设
  • 济南网站建设公司晟创未来WordPress源代码 安装
  • 做网站应该问客户什么需求wordpress源代码编辑器
  • 焦作做网站最专业的公司网站建设要多钱
  • 网站建设经典案例外贸网站建设公司策划
  • 游戏logo设计网站微网站开发制作
  • 比较大的做网站的公司企业网站建站系统
  • 如何做一元购物网站企业网站制造
  • 内蒙古响应式网站建设wordpress后天地址
  • 如何给自己的公司建网站没有网站怎么做seo
  • 做照片书的模板下载网站好小米发布会最新
  • 怎么做属于自己的网站青岛网站建设加盟公司
  • 网站技术部门架构营销培训生