热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据库的海量数据的存储解析

前言本篇文章会从数据的概念和分类,以及数据的处理思路及如何使用分区去提高性能,使用分区过后的优缺点。我常用来处理大数据存储问题的分区;会

前言

本篇文章会从数据的概念和分类,以及数据的处理思路 及如何使用分区去提高性能,使用分区过后的优缺点。我常用来处理大数据存储问题的分区;会解析关系型数据库和nosql数据库的区别及优缺点。


数据的概念和分类


何为大数据

数据很多,数据量很大,记录数一般在千万级或者亿级甚至更多; 从数据条数来说并不准确。
存储体量一般在TB级甚至PB级以上。
存储在一个或多个服务器上;
跟“大数据”的区别
“大数据”指的是对大数据量进行分析和挖掘,发掘出数据中蕴含的有意义的东西,比如:规律、趋势、喜好等,并据此做出一定的推理和预测。
通常会涉及数据仓库、数据挖掘、人工智能AI、机器学习等方面的技术。
对数据推理和预测,对数据仓库进行分析。例如分析平台等,对数据进行分析。

大数据带来的影响

大数据量带来的影响

服务端应用在处理业务逻辑时,会多次操作数据,如果数据量太大,每次对数据进行操作会消耗大量的资源,性能也比较低下,从而导致整个应用性能下降。  
最直接的影响就是时间慢,查询速度慢,并且让计算机卡起来了。

大数据量带来的问题

慢:业务处理变慢、响应时间变慢、整个应用变慢;
高并发下多次操作导致数据库崩溃
大数据量问题的本质就是:要操作的数据的基数太大

分类

联机事务处理(OLTP)
面向交易的处理系统,特征是数据需要立即传送到计算中心进行处理,并在短时间内给出处理结果
联机分析处理(OLAP)
通过多维的方式对数据进行分析、查询、报表,不必要即时给出响应结果
平常对于分析平台也就是OLAP的。  不必即时出响应结果
OLTP因为需要强一致性,  例如银行取钱这些涉及马上要处理成功的。
OLAP弱事务,要求最终一致性。

大数据处理思路

分流
常用的手段:用和不用、常用和不常用分开,例如平常的不同类型的数据,进行分开
对数据库存放的数据:分区、分库、分表  现在流行的数据库都提供了分区的 自带提供的。
对文件存放的数据:拆文件
考虑分批处理    也就是下面redis集群 的一种处理方法

 

原则就是:尽量使每次操作的数据的基数减少
缓存技术
读多写少用缓存,本地缓存  或者远端缓存,都可以使用。
数据库优化
合理设计数据库结构
合理构建索引
数据库集群
根据业务关系去设置 合理设置出数据库
处理优化
优化Sql
考虑使用临时表、中间表 ,, 例如在sql中 使用子查询也是 临时表,还是考虑在数据库中考虑使用
合理使用NoSql
Mongodb、Redis、HBase等
分布式大数据处理方案
Hadoop、Spark、Storm等

数据库种类

传统数据库  关系型数据库

Oracle、MySQL、SQLServer、DB2
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织

NoSql数据库

临时性键值存储:Redis、Memcached
永久性键值存储:ROMA、Redis
面向文档存储:mongoDB、CouchDB
面向列存储:Cassandra、HBase
NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。

 

统一是它的特性导致了他的优缺点, 弱结果化的存储,这个对比关系型数据库,包括join事务等  事务查询。

分区理解

之前说过分区在流行数据库中一般都自带着的。
所谓分区就是将一个表分解成多个区块进行操作和保存,从而降低每次操作的数据,提高性能。
而对应用来说是透明的,从逻辑上看是只有一个表(这里跟分库分表的访问不一样),但在物理上这个表可能是由多个物理分区组成的,每个分区都是一个独立的对象,可以进行独立处理。

利用分区可以达到分类数据分别存储。降低查询压力,分块存储。

优点
进行逻辑数据分割,分割数据能够有多个不同的物理文件路径
可以存储更多的数据,突破系统单个文件最大限制
提升性能,提高每个分区的读写速度,提高分区范围查询的速度
可以通过删除相关分区来快速删除数据
通过跨多个磁盘来分散数据查询,从而提高磁盘I/O的性能
涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理
可以备份和恢复独立的分区,这对大数据量很有好处
分区能支持的引擎
MySQL支持大部分的存储引擎创建分区,如MyISAM、InnoDB等;
不支持MERGE和CSV等来创建分区。
同一个分区表中的所有分区必须是同一个存储引擎。
InnoDB
事务型数据库的首选引擎,支持ACID事务,支持行级锁定。InnoDB是为处理巨大数据量时的最大性能设计。
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。

在查询时,直接去那个区去查询,降低了数据量的存储大小。

一般数据库是我们创建表时设置,也是考虑到join 关联查询表时的效率,还是得根据我们具体得业务场景去处理。

分区类型

  • RANGE分区:一个给定连续区间的列值  根据时间 地域得。

 注意分区得名字不能重复

  •  LIST分区:LIST是列值匹配一个离散值集合中的某个值来进行选择

采用list进行分区 

  •  HASH分区:用户定义的表达式的返回值来进行hash计算之后选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算,这个函数必须产生非负整数值

 

  •  KEY分区:类似于按HASH分区,由MySQL服务器提供其自身的哈希函数

查询是列表是一样展示数据是一样的

如果像知道文件系统在那里 直接使用 show global variable '%datadir%'

 在分区过后 日志文件 存储的位置  查看 文件。

查询分区中具体的数据具体的存储详情

如果表中存在primary key或者unique key时,分区的列是两种中的一个组成部分
如果表中不存在任何的primary key或者unique key,则可以指定任何一个列作为分区列
5.5版本前的Range、List、Hash分区要求分区键必须是int;MySQL5.5及以上,支持非整型的Range和List分区,即:range columns 和list columns。

创建分区

分区命名
分区的名字基本上遵循其他MySQL标识符应当遵循的原则,例如用于表和数据库名字的标识符。但是应当注意,分区的名字是不区分大小写的。
无论使用何种类型的分区,分区总是在创建时就自动的顺序编号,且从0开始记录。
MySQL分区处理NULL值的方式
MySQL中的分区在禁止空值NULL上没有进行处理,无论它是一个列值还是一个用户定义表达式的值,一般而言,在这种情况下MySQL把NULL视为0。如果你希望回避这种做法,应该在设计表时声明列“NOT NULL”

分区管理

 可以对分区进行添加、删除、重新定义、合并或拆分等管理操作。

注意点

最大分区数目不能超过1024,一般建议对单表的分区数不要超过150个,其实一般分区也不会这样做。
  •  如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键之内
  • 不支持外键
  •  不支持全文索引,对分区表的分区键创建索引,那么这个索引也将被分区
  •  按日期进行分区很合适,因为很多日期函数可以用。但是对于字符串来说合适的分区函数不太多
  •  只有RANG和LIST分区能进行子分区,HASH和KEY分区不能进行子分区
  •  分区表对于单条记录的查询没有优势
  •  要注意选择分区的成本,每插入一行数据都需要按照表达式筛选插入的分区
  •  分区字段尽量不要可以为null


推荐阅读
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 字节跳动深圳研发中心安全业务团队正在火热招募人才! ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • Oracle字符集详解:图表解析与中文乱码解决方案
    本文详细解析了 Oracle 数据库中的字符集机制,通过图表展示了不同字符集之间的转换过程,并针对中文乱码问题提供了有效的解决方案。文章深入探讨了字符集配置、数据迁移和兼容性问题,为数据库管理员和开发人员提供了实用的参考和指导。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 美团优选推荐系统架构师 L7/L8:算法与工程深度融合 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 在第二课中,我们将深入探讨Scala的面向对象编程核心概念及其在Spark源码中的应用。首先,通过详细的实战案例,全面解析Scala中的类和对象。作为一门纯面向对象的语言,Scala的类设计和对象使用是理解其面向对象特性的关键。此外,我们还将介绍如何通过阅读Spark源码来进一步巩固对这些概念的理解。这不仅有助于提升编程技能,还能为后续的高级应用开发打下坚实的基础。 ... [详细]
  • 提升MySQL数据库架构性能的策略与方法
    为了提升MySQL数据库架构的性能,本文探讨了多种策略与方法。首先,分析了影响数据库性能的关键因素,并详细阐述了数据库结构优化的重要性。接着,介绍了数据库设计的基本步骤,包括第一、第二和第三范式的应用,以及反范式化设计的场景。此外,还讨论了数据库物理设计的关键要素,如表定义、索引设计和存储引擎选择,以确保高效的查询响应和数据管理。 ... [详细]
author-avatar
罗帅飞1
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有