数据存储
文章平均质量分 82
redis、mysql等数据存储工具的使用和原理讲解
正则化
这个作者很懒,什么都没留下…
展开
-
MySQL分库分表分区
数据库存储的演进单库单表单库单表是最常见的数据库设计,很多业务刚开始时都只需要单库单表,即数据存储只使用一个服务器结点,这个服务器上部署着一个数据库,数据库里对于每个存储场景只有一张表。(如果有多个服务器结点,就需要考虑分布式问题了,会使数据存储更加复杂。)比如说将所有订单数据存放在一张表里,那么所有的历史订单都可以在这张表上查到。但是随着时间的推移和业务的发展,数据表中存放的数据量越来越大,当数据量达到一定程度的时候,会影响到db的性能,因此可以考虑分区、分表、分库的方法来优化db的设计。其中,my原创 2022-01-27 20:22:02 · 2525 阅读 · 0 评论 -
mysql逻辑架构、查询过程和优化方法
参考 DBA整理的万字详解MySQL性能优化,值得收藏!MySQL执行计划解析MySQL语法执行工作原理 本文主要介绍MYSQL的逻辑架构和查询过程(数据库大多数都是读多写少,这里只关注查询过程,不讨论数据插入、更新等其他过程)MYSQL逻辑架构mysql逻辑架构分为三层:1、客户端:连接处理、授权认证、安全等功能(常见的登录、连接数据库之类的操作)。2、核心服务:查询缓存、解析、优化、执行计划、API调用存储引擎(API屏蔽了不同存储引擎间的差异)都在这一层。3、存储引擎:存储引擎负责M原创 2022-01-10 17:25:55 · 1008 阅读 · 0 评论 -
ORM简介
参考ORM 实例教程面向对象编程和关系型数据库,都是目前最流行的技术。面向对象编程把所有实体看成对象(object),关系型数据库则是采用实体之间的关系(relation)连接数据。于是就有人提出,关系也可以用对象表达,这样的话,就能使用面向对象编程,来操作关系型数据库。所以总的来说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relati...原创 2020-01-05 16:07:34 · 265 阅读 · 0 评论 -
Experiences and challenges in building a data intensive论文阅读笔记
实证研究课程的期末作业:Experiences and challenges in building a data intensive论文阅读笔记,针对实证研究的概念和过程总结笔记。报告要求为:课程报告至少涵盖以下内容− 所读论文的详细信息,以及选择该论文的原因与动机(0-5%)− 论文研究工作的背景(10-15%)− 论文相关工作以及论文自己的研究动机(10-20%)− 论文所做实证...原创 2020-01-24 02:59:39 · 140 阅读 · 0 评论 -
MySQL在线修改表结构的影响(MySQL Online DDL)
MySQL Online DDL的改进与应用MySQL Online DDLMySQL 不止有增删改数据操作(DML),还有改表结构的操作(DDL),当新增加字段等修改表结构时,就需要进行 DDL 操作。一般来说,在创建数据表时就应该充分考虑到以后的需求变动,合理设置字段和索引,最好不要修改已有数据表的结构和索引。如果不得不修改已有的数据表的结构(比如增加字段),会给在线业务带来很大的影响。即使需要修改,最好是先再测试库上修改,然后再修改线上的数据库。本文以Mysql InnoDB为例讲解ddl方法原创 2020-07-30 14:39:59 · 1979 阅读 · 0 评论 -
sql语句的执行顺序
A Beginner’s Guide to the True Order of SQL Operationssql语句的执行顺序如下(逻辑上应该如此,实际上可能有所调整):FROM:任何sql语句都应该先执行FROM子句,加载数据表的所有数据行。WHERE:筛选出符合WHERE条件的数据行,快速缩减所需处理的数据行数。GROUP BY:得到一个Map<String, List<Row>>结构,GROUP BY子句字段相同的数据行被放到同一个Key对应的List<Row原创 2020-07-29 16:26:17 · 178 阅读 · 0 评论 -
mysql锁(共享锁、排他锁、意向锁、间隙锁、死锁)
分布式场景下,如果有多个事务同时访问同一行数据,就需要考虑加锁的问题。多个节点发起多个事务访问同一行数据单个节点发起多个事务访问同一行数据锁的种类共享锁与排他锁共享锁:本事务加锁后,其他事务可以读,不可以写。排他锁:本事务加锁后,其他事务既不可以读,也不可以写。行级锁与表级锁表级锁:粒度打,以表为单位上锁,允许很低的并发度。行级锁:粒度小,以行为单位上锁,允许较高的并发度。但是上锁、解锁开销大,且有可能出现死锁问题。MyISAM只支持表级锁,不支持行级原创 2020-08-07 21:24:44 · 729 阅读 · 0 评论 -
HDFS&Hive介绍
HDFSHDFS:Hadoop分布式文件存储系统HDFS架构包含Client、NameNode和DataNode。可以简单的认为有一个NameNode和多个DataNode。(NameNode不一定只有一个)参考5分钟深入浅出 HDFS 聊聊Hadoop:图解HDFS是个啥Client用户需要通过HDFS Client向HDFS提交命令,Client负责与NameNode和DataNode建立连接以及传输数据。NameNodeNameNode负责管理整个文件系统信息。记录数据存储位置:原创 2020-08-16 21:09:05 · 6962 阅读 · 0 评论 -
redis的5种数据结构及其底层实现原理
redis中的数据结构Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(无序集合)及zset(有序集合)。在秒杀项目里,我用过redis的Set和Hash结构:String:一个 key 对应一个字符串,string是Redis 最基本的数据类型。(字节的abase框架只实现了redis的string数据结构,导致我们如果想要存储复杂的数据结构的时候,只能转成json格式的字符串来存储)list:一个 key 对应一个字符串列表,底层使用双向链表实现原创 2020-10-21 19:55:43 · 28821 阅读 · 4 评论 -
redis优化(bigkey、hotkey)
bigkey优化什么是bigkeybigkey是指某个key的value太大,分成两种情况字符串类型:它的big体现在单个value值很大,一般认为超过10KB就是bigkey。比如说把文章正文甚至小说全文都缓存进redis了。非字符串类型:哈希、列表、集合、有序集合,它们的big体现在元素个数太多。比如通过hash的方式来存储每一天用户订单次数。其中key = 日期,field = 用户id,value = 用户订单数。那么如果一天有上千万个用户下订单,那么field就会非常多,存储空间也很大,原创 2020-10-22 00:51:32 · 1179 阅读 · 0 评论 -
redis分布式(三种模式)
主从模式(读写分离)作用是:主从复制:备份数据,即使部分节点损坏也可以恢复。读写分离:主节点负责写,从节点负责读。因为读事务比写事务多很多,所以把读事务交给多个从节点来负责,可以减轻主节点压力,提高效率。缺点:主节点宕机后,无法提供写事务,也无法重新选举主节点。哨兵模式哨兵模式建立在主从模式上,作用是当主节点宕机后,哨兵负责在slave中选一个成为新的主节点,当原本的主节点恢复后,就成为了从节点。使用哨兵,相当于客户端不是直接访问Redis服务,而是先访问哨兵系统,哨兵告诉客户端哪个才是原创 2020-10-21 19:59:01 · 2973 阅读 · 0 评论 -
SQL基础概念和语法(关系模型、查询语句、修改语句)
SQL教程暂时看了一部分主要内容,有需要时再看剩余部分。关系模型关系数据库的表和表之间需要建立“一对多”,“多对一”和“一对一”的关系,这样才能够按照应用程序的逻辑来组织和存储数据。主键关系表,要求能够通过某个字段唯一区分出两个不同的记录,这个字段被称为主键。主键最好不要选取与业务相关的字段,因为随着业务发展,相关的字段有可能需要改变,主键修改非常麻烦。一般选用自增整数主键就可以了。主键可以为一个字段,也可以用多个字段,即联合主键。但是联合主键使逻辑更复杂,不常用。外键定义表中某一个字段为原创 2020-08-16 20:47:43 · 537 阅读 · 0 评论 -
redis持久化机制
redis有两种持久化机制:RDB(快照)和AOF(日志)COPY ON WRITE机制:当前数据正在进行处理(比如制作快照或者进行AOF重写)的时候,如果有新的请求需要修改数据,那么就用到了写时复制技术。即将数据复制一份出来,然后在复制的数据上面进行修改。等到前面的处理流程结束后,可以把这份复制出来的数据写回去,或者直接指向这块新的内存。父进程fork子进程的时候,用到COW,意思是,原本新fork出来的子进程是共享父进程的数据的,只有当父进程或者子进程修改数据的时候,才复制一份出来,在复制的数据上原创 2020-10-21 20:00:16 · 159 阅读 · 0 评论 -
mysql主要数据类型(整型、浮点数、字符串、日期)
整型mysql的整型是默认带符号的。有时会看到定义整型的写法是int(11),无论括号里的数字N是多少,int类型永远占用4个字节。括号里的N代表的是显示宽度,没什么用。浮点数char和varchar类型类型大小用途CHAR0-255字节定长字符串VARCHAR0-65535 字节变长字符串TEXT0-65 535字节长文本数据(变长)char和varchar的区别char(n) 固定长度,比如char(4)不管是存入几个字符,都将占用4原创 2020-08-16 21:05:32 · 492 阅读 · 0 评论 -
redis为什么使用单线程模型
redis单线程模型如下:redis基于内存,速度很快。相比单线程读写内存的时间,读写同样大小的数据,使用多线程所带来的上下文切换开销就显得不可忽略,所以说redis使用单线程可以避免上下文切换的开销。相比之下,对于数据库这种磁盘读写的应用来说,读写磁盘的时间远大于多线程上下文切换时间,因此更适合使用多线程。不必考虑线程安全问题。很多操作都不用加锁,提高了性能,而且设计上更简单;所以作者说单线程就够快了,没必要写多线程。(redis本身有很多线程,redis单线程指的是只有一个线程从队列取出网络原创 2020-10-21 19:53:42 · 192 阅读 · 0 评论 -
数据库隔离级别与MVCC多版本并发控制
数据库隔离级别这部分主要看的是ACID特性中的隔离性。隔离级别越高,事务越安全,但是并发性会变差。数据库的三种隔离问题:脏读:事务A更新了数据,但未提交,事务B读取了这个更新后的数据。随后事务A回滚,结果导致事务B读取的是脏数据,因此叫脏读。不可重复读:事务A对同一个数据先后读两次。第一次读取完毕后,事务B更新了这个数据,随后事务A进行第二次读取,发现这个数据转眼间竟然前后不一致。这就是不可重复读。(重点在修改)幻读:事务A查询或者修改数据表的符合范围条件的数据记录,但期间事务B向表中这个范围内原创 2020-10-22 01:02:27 · 235 阅读 · 0 评论 -
mysql回滚日志与重做日志
基础知识:数据都是先读到内存中,然后修改内存中的数据,最后将数据写回磁盘。这里把数据库内容在磁盘上的部分叫data file,把数据库内容在内存中的缓存叫data buffer。data buffer与data file内容不同,此时把data buffer的内容叫脏数据,但是不能每次事务提交时都同步到磁盘,这样磁盘IO开销太大,应该等到data buffer内数据比较多时再全部更新到磁盘。这里把日志磁盘上的文件叫log file,把日志在内存上的缓存叫log buffer。log buffer与log原创 2020-10-22 01:03:59 · 1592 阅读 · 0 评论 -
MySql索引详解
索引是数据库里的一个用于排序的数据结构,查询语句使用到索引的时候,就不需要扫描整张表去查找数据,可以提高查询的速度。但是创建和维护索引需要耗费一定的时间,同时也会影响插入的速度。mysql主要使用B+树作为索引结构。mysql的索引结构主要有hash索引和B+树索引两种,hash索引是基于hash表实现的,缺点很多,所以B+树索引更常用。hash索引缺点:1.无序,则无法排序,范围查询开销大;2.key值重复率高时,出现大量哈希冲突,拉链很长,索引效率接近于遍历。聚集索引 vs 非聚集索引聚原创 2020-10-22 01:00:48 · 103 阅读 · 0 评论 -
mysql类型char, varchar和text的区别
程序中的string类型,在mysql数据表中可以有三种对应的类型:char、varchar和text。char、varchar和text的区别char:定长字符串,最大长度255字节,不足255字节的部分用空格补齐,数据库检索出char类型的数据表数据时会自动截断后面的空格,也就是说字符串后面自带的空格也会被删掉,使用要小心。定长的好处是存取更高效。varchar:可变长字符串,最大长度65535字节,例如: 当varchar(10)字段类型中插入"abc"时,实际存储大小也只有3个字节,此外,va原创 2021-12-14 12:06:05 · 1339 阅读 · 0 评论