首页 > 其他分享 >解决中级数据量(千万级、亿级)的数据检索方案探索

解决中级数据量(千万级、亿级)的数据检索方案探索

时间:2022-11-21 20:01:23浏览次数:48  
标签:检索 数据检索 千万级 索引 数据量 分表 数据 冗余


背景

在目前所有的系统中,不管是何种架构都需要存储数据,常规的管理系统在两三年之后,数据往往是百万级别,甚至小千万级别的。涉及到制造业中的生产信息,运输业中的gps信息等每天会大批量产生的场景,往往数个月就会到达上亿级别的数据。这种数据又不是传统的大数据,几十TB甚至PB,这种中间层面的数据该怎么处理呢?有两点要求,一方面满足存储,一方面满足检索的能力。

解决方案

存储的问题,其实是很好解决的,存数据库,存各种fs,关键是怎么把数据从数据库中读取出来。

中间数据量快速检索

对于大几百万,小几千万的数据,这种量级的数据,通过索引就能做很大的优化。通过把查询的语句进行分析,建立对应的索引,让检索功能都尽量走索引,是一种很常规的解决方案。尤其是针对mysql这种关系型数据库,加上索引效果还是很明显的。这种策略的本质是空间换时间,因为索引的本质还是一种数据结构形成的文件,需要占用磁盘空间,通过空间换时间的方式来实现数据检索速度的提升。加了索引之后,需要提升你的sql水平,让你的sql走索引,避免全盘搜索的这种情况,从技术的角度就解决了很大一部门了。

套路性答案

往往遇到这种问题,第一个念头就是分库分表,这算是一个面试时候的标准答案了。怎么分表就成了一个学问。我常用的方案有两种,第一种是按照时间分表,比如每月一个表,然后检索时去每月的表中检索,缺点是如果跨月就很被动了,也就是所谓的水平切分;另一种策略是垂直切分,把一张表的不同字段拆分到不同的表中。

实战案例·策略表

实际工作中遇到一个交通行业的案例,车辆的物联网终端会发送gps定位信息到云平台,然后平台进行存储,对车载终端进行控制,管理。数据量的话,半年有个上亿数据,之前的架构是将数据存到mongodb里面,已经是按月分表了,哪怕如此,单表数据也会上亿。检索起来非常困难,经常超时,客户体验很差。针对这种情况,还是利用空间换时间的想法,基于现在的数据库基础,与业务结合,做一些改造。经过分析更多的是对日内数据的检索,以及对单终端的数据检索。基于这种特性,采用了一种数据三倍冗余的策略。一重冗余:已有的常规按月分表,将所有终端的数据进行,按月拆分,每个月一个大表,每个月的数据量可能在上亿,是已有策略的保留,也是一种最终的检索策略;第二重冗余,车月表,每个车辆终端每个月一张表,所有关于单车的查询逻辑,走车月表;第三重冗余,全车日表,每天存一张表,将一天的数据进行存储。
这样虽然数据产生了三倍冗余,但是所有的业务逻辑,有了专门的策略表,将旧数据,写个程序分流,就能直接上线这种策略。经验就是需要面对业务去设计表,纯粹的技术套路并不能适应所有场景。


标签:检索,数据检索,千万级,索引,数据量,分表,数据,冗余
From: https://blog.51cto.com/u_11301546/5875174

相关文章

  • EasyExcel对大数据量表格操作导入导出
    前言最近有个项目里面中有大量的Excel文档导入导出需求,数据量最多的文档有上百万条数据,之前的导入导出都是用apache的POI,于是这次也决定使用POI,结果导入一个四十多万的文......
  • 第06章 数据检索
    实现数据查询是创建数据库的重要功能之一,在SQLServer中,查询数据是通过SELECT语句实现的。SELECT语句能够从服务器的数据库中检索符合用户要求的数据,并以结果集的方式返回......
  • Java订单号生成,唯一订单号(日均千万级别不重复)
    参考声明:https://www.bbsmax.com/A/pRdBBLWGdn/java订单号生成,唯一订单号相信大家都可以搜索到很多的订单的生成方式,不懂的直接百度。。1.订单号需要具备以下几个特......
  • offset新探索:双管齐下,加速大数据量查询
    摘要:随着offset的增加,查询的时长也会越来越长。当offset达到百万级别的时候查询时长通常是业务所不能容忍的。本文分享自华为云社区《offset新探索:双管齐下,加速大数据量查......
  • java导出excel(java导出excel数据量大 优化)
    如何利用JAVA生成Excel文件packagebeans.excel;importjava.io.IOException;importjava.io.OutputStream;importjxl.Workbook;importjxl.write.Label;importjxl.write.......
  • element表格el-table组件实现虚拟滚动,解决数据量大渲染DOM过多而卡顿问题
    element表格el-table组件实现虚拟滚动,解决数据量大渲染DOM过多而卡顿问题当页面数据过多,前端渲染大量的DOM时,会造成页面卡死问题,使用分页或则懒加载这些方案也无法解决,这......
  • 2022-10-19 mysql 查询中found_rows没有返回正确的总数据量 limit
    查询语句中使用了limit来进行分页,本打算是1页返回10行数据,满足条件的数据有15条,使用了limit后再用found_rows查总符合数据,却只得到了10条,而不是15条,证明查询语句不严谨。......
  • 千万级别mysql 分库分表后表分页查询优化方案初探
    在实际的软件系统开发过程中,随着使用的用户群体越来越多,表数据也会随着时间的推移,单表的数据量会越来越大。以订单表为例,假如每天的订单量在4万左右,那么一个月的订单量......
  • mysql大数据量分页查询靠后页数的语句写法
    假设测试表 table_test一共有一百万条数据,如果使用普通limit分页,当limitoffset偏移量很大时,如900000时,速度会很慢,因为limit等于要先查出前900020条数据,然后抛弃......
  • ES大数据量的分页查询
    FROM/SIZE分页查询默认情况下,不加from,size的话,ES会返回前10条记录。加上from,size就会查询指定的条数。其中from代表起始行号,size代表查询行数。如果用JAVA等Client端传参......