基础知识
磁盘读取数据 一次IO最小读取4k
数据库最小 data page(4k) 对应一个序列号——索引
关系型数据库:行级存储(占位,便于在原有磁盘位置增删改)
查询时,内存中b+tree,where条件命中索引,通过索引找到dp 读入索引性能优化实质:减少I/O的流量(磁盘操作)
数据在磁盘和内存中体积不同
数据库排行
DB-ENGINES.com
redis,mysql概述
Redis 1.5M/s操作 远超于关系型 千级
磁盘IO: 1寻址:ms级 2带宽:G/M 内存IO: 1寻址:ns级,比磁盘快10w倍 2带宽:很大 内存,掉电易失 | 两个基础设施: 1冯诺依曼体系的计算机 2以太网,tcp/ip网络 | ||
题目:如果数据库表很大,是否会性能下降?
如果有索引
增删改会变慢,
少量查询依然会很快, 高并发查询会受磁盘带宽限制
Redis velue类型
String(字符,数值,bitmap)
Hashes
Lists
Sets
Sorted list
Hyperlog
Geospatial
memcache不区分数据类型,
redis可以直接取元素,省去解析过程(计算向数据移动)
redis启动与库的 进入 redis-cli
IO发展过程
BIO(一个连接开启一个线程)-->同步非阻塞NIO(用户空间程序轮询调用内核同一个线程轮询)-->多路复用NIO(用户态内核fd相关数据拷来拷去)--> 基于epoll多路复用NIO(内核与用户共享空间mmap注册红黑树,链表)
JVM:JAVA内存中 堆是共享的,线程栈是独立的,一个线程的成本约1M(可调节)
1.线程多了调度成本浪费
2.内存成本
Redis 单进程 单线程 单实例
“顺序性”每个链接里 命令顺序
redis单线程实例为何快
1.redis在内存存储数据,操作也在内存。(内存寻址快,带宽大)
2.I/O多路复用技术。基于内核的epoll,epoll为系统函数,当描述符在epoll函数中为ready时,才可以去read,减少线程不必要的调用;mmap为内核态和用户态共享空间,由系统内核实现,减少数据传输。
redis安装步骤