2024年,史上最强的数据库资料集合

💨🏹🌀 2024年,史上最强的数据库资料集合

N种数据库的全方位整理

mysql,mariaDB,Percona Server,Redis,RocksDB,Cassandra,CouchDB,MongoDB,TokuDB,TiDB,MemDB,Oceanbase等等
在这里插入图片描述

👀 数据库分类

数据库分类对比

英文名中文名定义存储方式ACID规则支持情况CAP原理支持情况
Relational database关系型数据库采用了关系模型来组织数据的数据库表格支持ACID规则满足CP,但A不完美
NoSQL非关系型数据库泛指非关系型的数据库,不保证关系数据的ACID特性键值存储、列存储、文档存储等不一定完全支持ACID规则满足AP,但C不完美
NewSQLNewSQLNewSQL是对各种新的可扩展/高性能数据库的简称多种存储方式支持ACID规则满足CAP

ACID规则

  • 原子性(A) 一个事务的所有系列操作步骤被看成一个动作,所有的步骤要么全部完成,要么一个也不会完成。如果在事务过程中发生错误,则会回滚到事务开始前的状态,将要被改变的数据库记录不会被改变。
  • 一致性(C) 一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏,即数据库事务不能破坏关系数据的完整性及业务逻辑上的一致性。
  • 隔离性(I) 主要用于实现并发控制,隔离能够确保并发执行的事务按顺序一个接一个地执行。通过隔离,一个未完成事务不会影响另外一个未完成事务。
  • 持久性(D) 一旦一个事务被提交,它应该持久保存,不会因为与其他操作冲突而取消这个事务。

CAP原理

  • Consistency(一致性): 数据一致更新,所有数据变动都是同步的
  • Availability(可用性): 好的响应性能
  • Partition tolerance(分区耐受性): 可靠性

举例来说在高可用的网站架构中,对于数据基础提出了以下的要求:

  • 分区耐受性 保证数据可持久存储,在各种情况下都不会出现数据丢失的问题。为了实现数据的持久性,不但需要在写入的时候保证数据能够持久存储,还需要能够将数据备份一个或多个副本,存放在不同的物理设备上,防止某个存储设备发生故障时,数据不会丢失。
  • 数据一致性 在数据有多份副本的情况下,如果网络、服务器、软件出现了故障,会导致部分副本写入失败。这就造成了多个副本之间的数据不一致,数据内容冲突。
  • 数据可用性 多个副本分别存储于不同的物理设备的情况下,如果某个设备损坏,就需要从另一个数据存储设备上访问数据。如果这个过程不能很快完成,或者在完成的过程中需要停止终端用户访问数据,那么在切换存储设备的这段时间内,数据就是不可访问的。

🦩 关系型数据库

关系型数据库,是指采用了关系模型来组织数据的数据库

  1. 关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
  2. 通过SQL结构化查询语句存储数据。
  3. 强调ACID规则, 保持数据一致性。

🦈 MySQL

知识体系存储引擎面试题优化与集群架构源码与配置参数视频资源文章Paper电子书籍常见问题
🌴🔱🛠📜🧿📄🍀📙🧲

🌴 知识体系

MySQL体系详解

|85%x85%
MySQL体系详解

MySQL架构图

|70%x70%
MySQL架构图

MySQL亿级订单数据分库分表设计架构图

image
MySQL亿级订单数据分库分表设计架构图(鑫语人间)

MySQL亿级流量系统设计每秒十万查询的高并发架构图

|85%x85%
MySQL亿级流量系统设计每秒十万查询的高并发架构图(石杉)

🔱 存储引擎

  • MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。
  • InnoDB引擎使用B+Tree作为索引结构,叶节点保存了完整的数据记录(数据和索引)。
  • B+树原理详解
MyISAM引擎
MyISAM索引实现
  • MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。

|65%x65%

这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。如果我们在Col2上建立一个辅助索引,则此索引的结构如下图所示:

|65%x65%

同样也是一颗B+Tree,data域保存数据记录的地址。因此,MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。 MyISAM的索引方式也叫做“非聚集”的,之所以这么称呼是为了与InnoDB的聚集索引区分。

MyISAM引擎特点
  1. 不支持事务
  2. 表级锁定 数据更新时锁定整个表:其锁定机制是表级锁定,也就是对表中的一个数据进行操作都会将这个表锁定,其他人不能操作这个表,这虽然可以让锁定的实现成本很小但是也同时大大降低了其并发性能。
  3. 读写互相阻塞 不仅会在写入的时候阻塞读取,MyISAM还会再读取的时候阻塞写入,但读本身并不会阻塞另外的读。
  4. 只会缓存索引 MyISAM可以通过key_buffer_size的值来提高缓存索引,以大大提高访问性能减少磁盘IO,但是这个缓存区只会缓存索引,而不会缓存数据。
  5. 读取速度较快 占用资源相对较少
  6. 不支持外键约束,但只是全文索引
  7. MyISAM引擎是MySQL5.5版本之前的默认引擎,是对最初的ISAM引擎优化的产物。
MyISAM引擎适用的生产业务场景
  1. 不需要事务支持的业务(例如转账就不行,充值也不行)
  2. 一般为读数据比较多的应用,读写都频繁场景不适合,读多或者写多的都适合。
  3. 读写并发访问都相对较低的业务(纯读纯写高并发也可以)(锁定机制问题)
  4. 数据修改相对较少的业务(阻塞问题)
  5. 以读为主的业务,例如:blog,图片信息数据库,用户数据库,商品库等业务
  6. 对数据一致性要求不是很高的业务。
  7. 中小型的网站部分业务会用。
  8. 小结:单一对数据库的操作都可以示用MyISAM,所谓单一就是尽量纯读,或纯写(insert,update,delete)等。
MyISAM引擎调优精要
  1. 设置合适的索引(缓存机制)(where、join后面的列建立索引,重复值比较少的建索引等)
  2. 调整读写优先级,根据实际需求确保重要操作更优先执行,读写的时候可以通过参数设置优先级。
  3. 启用延迟插入改善大批量写入性能(降低写入频率,尽可能多条数据一次性写入)。
  4. 尽量顺序操作让insert数据都写入到尾部,较少阻塞。
  5. 分解大的操作,降低单个操作的阻塞时间,就像操作系统控制cpu分片一样。
  6. 降低并发数(减少对MySQL访问),某些高并发场景通过应用进行排队队列机制Q队列。
  7. 对于相对静态(更改不频繁)的数据库数据,充分利用Query Cache(可以通过配置文件配置)或memcached缓存服务可以极大的提高访问频率。
  8. MyISAM的Count只有在全表扫描的时候特别高效,带有其他条件的count都需要进行实际的数据访问。
InnoDB引擎
InnoDB索引实现
  • InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。叶节点保存了完整的数据记录(数据和索引)。

InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。

|65%x65%

上图是InnoDB主索引(同时也是数据文件)的示意图,可以看到叶节点包含了完整的数据记录。这种索引叫做聚集索引。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。

第二个与MyISAM索引的不同是InnoDB的辅助索引data域存储相应记录主键的值而不是地址。换句话说,InnoDB的所有辅助索引都引用主键作为data域。例如,下图为定义在Col3上的一个辅助索引:

|65%x65%

这里以英文字符的ASCII码作为比较准则。聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。

InnoDB引擎适用的生产业务场景
  1. 支持事务
  2. 行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引完成。
  3. 数据更新较为频繁的场景,如:BBS(论坛)、SNS(社交平台)、微博等
  4. 数据一致性要求较高的业务,例如:充值转账,银行卡转账。
  5. 硬件设备内存较大,可以利用InnoDB较好的缓存能力来提高内存利用率,尽可能减少磁盘IO,可以通过一些参数来设置
  6. 相比MyISAM引擎,Innodb引擎更消耗资源,速度没有MyISAM引擎快
InnoDB引擎调优精要
  1. 主键尽可能小,避免给Secondery index带来过大的空间负担。
  2. 避免全表扫描,因为会使用表锁。
  3. 尽可能缓存所有的索引和数据,提高响应速度,较少磁盘IO消耗。
  4. 在大批量小插入的时候,尽量自己控制事务而不要使用autocommit自动提交,有开关可以控制提交方式。
  5. 合理设置innodb_flush_log_at_trx_commit参数值,不要过度追求安全性。 如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作。
  6. 避免主键更新,因为这会带来大量的数据移动。
其他引擎
  • 其他引擎

⭕ 面试题

  • 1. 能说下myisam 和 innodb的区别吗?
  • 2. 说下mysql的索引有哪些吧,聚簇和非聚簇索引又是什么?
  • 3. 那你知道什么是覆盖索引和回表吗?
  • 4. 锁的类型有哪些呢?
  • 5. 你能说下事务的基本特性和隔离级别吗?
  • 6. 那ACID靠什么保证的呢?
  • 7. 那你说说什么是幻读,什么是MVCC?
  • 8. 那你知道什么是间隙锁吗?
  • 9. 你们数据量级多大?分库分表怎么做的?
  • 10. 那分表后的ID怎么保证唯一性的呢?
  • 11. 分表后非sharding_key的查询怎么处理呢?
  • 12. 说说mysql主从同步怎么做的吧?
  • 13. 那主从的延迟怎么解决呢?
  • 14. 为什么用自增列作为主键?
  • 15. 为什么使用数据索引能提高效率?
  • 16. B+树索引和哈希索引的区别?
  • 17. 哈希索引的优势?
  • 18. 哈希索引不适用的场景?
  • 19. B树和B+树的区别?
  • 20. 为什么说B+比B树更适合实际应用中操作系统的文件索引和数据库索引?
  • 21. MySQL联合索引?
  • 22. 什么情况下应不建或少建索引?
  • 23. 什么是表分区?
  • 24. 表分区与分表的区别?
  • 25. 表分区有什么好处?
  • 26. 分区表的限制因素?
  • 27. 如何判断当前MySQL是否支持分区?
  • 28. MySQL支持的分区类型有哪些?
  • 29. 四种隔离级别?
  • 30. 关于MVVC的运行原理介绍?
  • 31. 在MVCC并发控制中,读操作可以分成两类?
  • 32. 行级锁定的优点有哪些?
  • 33. 行级锁定的缺点有哪些?
  • 34. 你对MySQL优化了解多少?
  • 35. key和index的区别?
  • 36. Mysql 中 MyISAM 和 InnoDB 的区别有哪些?
  • 37. 数据库表创建注意事项?
  • 38. MyISAM和InnoDB存储引擎使用的锁?
  • 39. 数据库一个大表如何优化?
  • 40. 如何理解字符集及校对规则?

🛠 优化与集群架构

  • MySQL体系结构和组件
  • MySQL架构体系
  • MySQL调优策略

📜 源码与配置参数

  • MySQL5.7源码地址: https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.18.tar.gz
  • MySQL8.0源码地址: https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.19.tar.gz
  • MySQL源码文件结构及主要数据结构
  • MySQL5.7配置文件
  • MySQL8.0配置文件

🧿 视频资源

  • MySQL不了解这些,好意思说搞懂了MySQL
  • 性能优化的方法论,异步的原理与实现,mysqlredis,dns, http,服务器并发
  • 大厂面试,Mysql必问的问题
  • MySQL的块数据操作
  • mysql索引 myisam,innodb,b树b+树
  • 一节课搞懂 MySQL 索引和事务
  • 90分析搞懂mysql索引及其优化
  • 90分钟搞懂MySQL InnoDB索引以及事务
  • 90分钟搞懂mysql缓存问题的解决方案
  • 大厂如何解决mysql读写效率问题
  • 你所需要掌握的MySQL基本原理:索引和事务
  • —节课搞懂MySQL索引和事务
  • —节课详尽讲解提升MySQL读写性能的方案
  • 高并发场景下,mysql与redis的数据同步方案

📄 文章

No.ArticleAuthor
1MySQL远程客户端连接问题milo
2亿级订单数据分库分表设计方案鑫语人间
3数据库扩展性架构设计
4分库分表需要考虑的问题及方案
5无限容量数据库架构设计
6MQ消息可达性+幂等性+延时性架构设计
7高可用+高并发+负载均衡架构设计
8数据库秒级平滑扩容架构方案
9100亿数据平滑数据迁移,不影响服务
10一分钟掌握数据库垂直拆分
115kw数据量,如何为表增加一列
12互联网在线表结构变更
1358同城,1万属性100亿数据量数据库架构设计
14每秒10万并发 mysql_亿级流量系统架构之如何设计每秒十万查询的高并发架构清幽梅
📙 电子书籍
书籍翻译
《MySQL 5.7 Reference Manual》《MySQL 5.7参考手册》
《MySQL 8.0 Reference Manual》《MySQL 8.0参考手册》
《MySQL》《MySQL》
《MySQL Notes For Professionals》《MySQL专业指南》
《Intrusion Detection with SNORT: Using SNORT, Apache, MySQL, PHP, and ACID》《Snort入侵检测:使用Snort、Apache、MySQL、PHP和ACID》
《MySQL 从入门到精通》《MySQL 从入门到精通》
《MySQL Workbench教程》《MySQL Workbench教程》
《高性能MySQL_中文版》《高性能MySQL(中文版)》
《高性能MySQL(英文版)》《高性能MySQL(英文版)》
《MySQL技术内幕:SQL编程》《MySQL技术内幕:SQL编程》
《MySQL技术内幕:InnoDB存储引擎 第二版》《MySQL技术内幕:InnoDB存储引擎 第二版》

🍀 Paper

No.TitleTranslateCompany
1《MySQL V5 - Ready forPrime Time Business Intelligence》MySQL V5 - 为黄金时段商业智能做好准备
2《TDSQL for MySQL Security White Paper Product Documentation》TDSQL for MySQL安全白皮书产品文档
3《MONGODB VS MYSQL: A COMPARATIVE STUDY OF PERFORMANCE IN SUPER MARKET MANAGEMENT SYSTEM》MONGODB与MYSQL:超市管理系统性能的比较研究
4《Optimizing MySQL Database System on Information Systems Research , Publications and Community Service》在信息系统研究、出版物和社区服务方面优化MySQL数据库系统
5《A Comparative Study: MongoDB vs MySQL》MongoDB与MySQL的比较研究
6《Best Practices for Migrating MySQL Databases to Amazon Aurora》将MySQL数据库迁移到Amazon Aurora的最佳实践
7《Comparative Performance Analysis of MySQL and SQL Server Relational Database Management Systems in Windows Environment》Windows环境下MySQL与sqlserver关系数据库管理系统性能比较分析
8《MySQL Cluster Internal Architecture》MySQL集群内部架构
9《MySQL Database Service with HeatWave》MySQL数据库服务与HeatWave
10《Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases》Amazon Aurora:高通量云本地关系数据库的设计考虑
11《Recovery Principles of MySQL Cluster 5.1》MySQL集群的恢复原理

⚒ 集群架构

🧲 常见问题

  • 远程客户端连接问题
  • 库表设计问题
  • 慢SQL问题

🐬 MariaDB

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。
在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。
MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎。
MariaDB直到5.5版本,均依照MySQL的版本。

MariaDB项目

  • MariaDB项目地址。
  • MySQ迁移到MariaDB。
  • MariaDB优势。
  • MariaDB是MySQL的二进制替代品

MariaDB与MySQL比较

  • MariaDB与MySQL特性比较
  • MariaDB与MySQL兼容性比较
  • MariaDB各个发行版的异同
  • MariaDB发行注记

MariaDB第三方工具

  • DBEdit 一个免费的MariaDB数据库和其他数据库管理应用程序。
  • Navicat 一系列Windows、Mac OS X、Linux下专有数据库管理应用程序。
  • HeidiSQL 一个Windows上自由和开放源码的MySQL客户端。它支持MariaDB的5.2.7版本和以后的版本。[5][6]
  • phpMyAdmin 一个基于网络的MySQL数据库管理应用程序

🐋 Percona Server

Percona Server项目

Percona Server由领先的MySQL咨询公司Percona发布。
Percona Server是一款独立的数据库产品,其可以完全与MySQL兼容,可以在不更改代码的情况了下将存储引擎更换成XtraDB。是最接近官方MySQL Enterprise发行版的版本。
Percona提供了高性能XtraDB引擎,还提供PXC高可用解决方案,并且附带了percona-toolkit等DBA管理工具箱。
Percona Server 只包含 MySQL 的服务器版,并没有提供相应对 MySQL 的 Connector 和 GUI 工具进行改进。
Percona Server 使用了一些 google-mysql-tools, Proven Scaling, Open Query 对 MySQL 进行改造。

  • Percona Server项目地址
  • Percona XtraDB群集
  • Percona XtraDB Cluster安装
  • Galera Cluster

MySQL,MariaDB,Percona Server如何选择

综合多年使用经验和性能对比,首选Percona分支,其次是MariaDB,如果你不想冒一点风险,那就选择MYSQL官方版本。

🦉 NoSQL数据库

键值(Key-Value)存储数据库

  • 相关产品: Redis、RocksDB
  • 典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
  • 数据模型: 一系列键值对
  • 优势: 快速查询
  • 劣势: 存储的数据缺少结构化

🐝 Redis

知识体系数据类型面试题优化与集群架构源码与配置参数视频资源文章Paper电子书籍常见问题
🌴🛠📜🧿📄🍀📙🧲

🌴 知识体系

Redis知识体系图

|85%x85%
Redis知识体系图

Redis Cluster方案图

image
官方Redis Cluster 方案(服务端路由查询)

Redis集群方案(单副本)

|80%x80%
Redis集群方案(单副本)

♨ 数据类型

Redis的五大数据类型也称五大数据对象;Redis并没有直接使用这些结构来实现键值对数据库,而是使用这些结构构建了一个对象系统redisObject;
这个对象系统包含了五大数据对象,字符串对象(string)、列表对象(list)、哈希对象(hash)、集合(set)对象和有序集合对象(zset)
而这五大对象的底层数据编码可以用命令OBJECT ENCODING来进行查看。

//redisObjecttypedef struct redisObject { // 类型属性存储的是对象的类型,也就是我们说的 string、list、hash、set、zset中的一种, // 可以使用命令 TYPE key 来查看。 unsigned type:4; // 编码,记录了队形所使用的编码,即这个对象底层使用哪种数据结构实现。 unsigned encoding:4; // 指向底层实现数据结构的指针 void *ptr; // … } robj;

redis是以键值对存储数据的,所以对象又分为键对象和值对象,即存储一个key-value键值对会创建两个对象,键对象和值对象。键对象总是一个字符串对象,而值对象可以是五大对象中的任意一种。 image

  • 字符串对象(string)
  • 列表对象(list)
  • 哈希对象(hash)
  • 集合对象(set)
  • 有序集合对象(zset)

⭕ 面试题

  • 01. Redis相比memcached有哪些优势?
  • 02. Redis支持哪几种数据类型?
  • 03. Redis主要消耗什么物理资源?
  • 04. Redis的全称是什么?
  • 05. Redis有哪几种数据淘汰策略?
  • 06. Redis官方为什么不提供Windows版本?
  • 07. 一个字符串类型的值能存储最大容量是多少?
  • 08. 为什么Redis需要把所有数据放到内存中?
  • 09. Redis集群方案应该怎么做?都有哪些方案?
  • 10. Redis集群方案什么情况下会导致整个集群不可用?
  • 11. MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?
  • 12. Redis有哪些适合的场景?
  • 13. Redis支持的Java客户端都有哪些?官方推荐用哪个?
  • 14. Redis和Redisson有什么关系?
  • 15. Jedis与Redisson对比有什么优缺点?
  • 16. Redis如何设置密码及验证密码?
  • 17. 说说Redis哈希槽的概念?
  • 18. Redis集群的主从复制模型是怎样的?
  • 19. Redis集群会有写操作丢失吗?为什么?
  • 20. Redis集群之间是如何复制的?
  • 21. Redis集群最大节点个数是多少?
  • 22. Redis集群如何选择数据库?
  • 23. 怎么测试Redis的连通性?
  • 24. Redis中的管道有什么用?
  • 25. 怎么理解Redis事务?
  • 26. Redis事务相关的命令有哪几个?
  • 27. MySQL里有2000w数据,redis中只存20w的数据,如何保证Redis中的数据都是热点数据?
  • 28. Redis的并发竞争问题如何解决?
  • 29. Redis如何做内存优化?
  • 30. Redis回收进程如何工作的?
  • 31. Redis回收使用的是什么算法?
  • 32. Redis如何做大量数据插入?
  • 33. 为什么要做Redis分区?
  • 34. 你知道有哪些Redis分区实现方案?
  • 35. Redis分区有什么缺点?
  • 36. Redis持久化数据和缓存怎么做扩容?
  • 37. 分布式Redis是前期做还是后期规模上来了再做好?为什么?
  • 38. Twemproxy是什么?
  • 39. 支持一致性哈希的客户端有哪些?
  • 40. Redis与其他key-value存储有什么不同?
  • 41. Redis的内存占用情况怎么样?
  • 42. 都有哪些办法可以降低Redis的内存使用情况呢?
  • 43. Redis持久化的几种方式?
  • 44. 谈谈对Redis的缓存失效策略和主键失效机制的理解?
  • 45. Redis 最适合的场景?
  • 46. 一个Redis实例最多能存放多少的keys?
  • 47. Redis常见性能问题和解决方案?
  • 48. Redis提供了哪几种持久化方式?
  • 49. 如何选择合适的持久化方式?
  • 50. 修改配置不重启Redis会实时生效吗?

🛠 优化与集群架构

Redis集群方式
  • Redis主从复制
  • Redis哨兵模式
  • Redis分片模式

📜 源码与配置参数

  • Redis-6.2.5.tar.gz
  • Redis参数解释

🧿 视频资源

  • Redis有序集合,跳表
  • 性能优化的方法论,异步的原理与实现,mysqlredis,dns, http,服务器并发
  • epoll的网络模型,从redis, memcached到nginx
  • 如何在开发中使用redis
  • Redis训练营一
  • Redis训练营二
  • Redis实战场景分析
  • Redis使用场景实战
  • Redis主从复制
  • —起实现Redis驱动与Redis协议深度剖析
  • 网络服务器模型, Redis, Memcached, Nginx对比
  • Redis, Nginx以及Skynet源码分析探究
  • TCP网络服务模型,Redis, Nginx,Memcached一起搞定
  • 10年大厂程序员是如何学习使用Redis
  • 秃顶大佬程序员如何制定Redis学习路线
  • 90分钟搞定Redis面试
  • 90分钟搞懂Redis存储结构
  • Redis,Skynet,Nginx,Memcached网络模块对比分析
  • Redis的rehash,布隆过滤器,redis持久化一节课搞定
  • Redis如何实现分布式锁延时队列以及限流应用
  • 大厂Redis面试,你能get到几个点
  • 大厂秋招面试必备-从Redis应用以及原理说起
  • 多维度了解Redis以及原理实现
  • 手把手带你看Redis, skynet网络模块实现
  • —场Redis线上事故引发的思考
  • 醍醐灌顶搞懂分布式多播以及消息队列的Redis解决方案
  • 茅塞顿开搞懂开源框架(Redis, Nginx, Skynet)中锁的使用
  • Redis,Memcached到Nginx,底层网络io中剥离精髓
  • 高并发场景下,Mysql与Redis的数据同步方案
  • Redis是什么,用来做什么,要掌握到什么程度

📄 文章

  • Redis底层数据结构
  • Redis的哨兵模式和集群模式
  • 如何解决Redis的热key问题?

🍀 Paper

No.TitleTranslateCompany
1《Implementing Information System Using MongoDB and Redis》利用MongoDB和Redis实现信息系统
2《15 Reasons to use Redis as an Application Cache》使用Redis作为应用程序缓存的15个原因
3《AMAZON ELASTICACHE》弹性评估
4《PLeveraging Django and Redis using Web Scraping》使用网页抓取对Django和Redis进行编辑
5《Cloud Native at the Edge: High-performance Edge Inference with RedisAI》边缘原生云:使用RedisAI进行高性能边缘推断
6《Contrail Architecture》轨迹结构
7《Database Caching Strategies Using Redis AWS Whitepaper》使用Redis AWS白皮书的数据库缓存策略
8《Deploying a Highly Available Distributed Caching Layer on Oracle Cloud Infrastructure using Memcached & Redis》使用Memcached和Redis在Oracle云基础架构上部署高可用的分布式缓存层
9《Scaling Memcache at Facebook》在Facebook上扩展Memcache
10《From advert to action: behavioural insights into the advertising of financial products》从广告到行动:金融产品广告的行为洞察
11《Persistent Memory Performance in vSphere 6.7》vSphere 6.7中的持久内存性能
12《Performance at Scale with Amazon ElastiCache》使用Amazon ElastiCache实现大规模性能
13《Redis Enterprise For Financial Services》Redis金融服务企业
14《Persisting Objects in Redis Key-Value Database》在Redis键值数据库中持久化对象
15《Break the Cost and Capacity Barrier with Intel® Optane™ DC Persistent Memory》使用Intel®Optane打破成本和容量壁垒™ DC持久存储器
16《Redistribution, Inequality,and Growth》再分配、不平等和增长
17《In-Memory Data processing using Redis Database》使用Redis数据库进行内存数据处理
18《USING REDIS WITH SOURCEPRO DB》将REDIS与SOURCEPRO DB一起使用
19《Redis on Samsung NVMe Benchmarking Results》三星NVMe基准测试结果的Redis

📙 电子书籍

  • 《Redis的主从复制》
  • 《Redis存储结构》
  • 《Redis实现分析》
  • 《Redis与网站架构》
  • 《Redis入门指南(第2版)》
  • 《Redis在京东到家的订单中的使用》
  • 《Redis实战》
  • 《Redis原代码分析》
  • 《Redis实现分析》
  • 《Redis集群》
  • 《Redis大数据之路》
  • 《深入了解Redis》
  • 《大厂Redis面试,你能get到几个点》
  • 《新浪微博Redis优化历程》
  • 《Redis 多机特性工作原理简介》
  • 《Redis设计与实现(第二版)》
  • 《Redis编程发布与订阅》
  • 《Redis cluster Specification (work in progress)》

🧲 常见问题

🦗 RocksDB

RocksDB特点:

RocksDB是嵌入式持久化存储系统,它是一个单点高性能的存储DB,不是分布式存储系统。 RocksDB能支持非常高吞吐量的IO读写,可以作为大型分布式存储系统元数据的存储媒介,比如Hadoop Ozone就将其元数据使用RocksDB作为元数据的结果写出。

  • 高性能: RocksDB使用一套日志结构的数据库引擎,为了更好的性能,这套引擎是用C++编写的。 Key和value是任意大小的字节流。
  • 为快速存储而优化: RocksDB为快速而又低延迟的存储设备(例如闪存或者高速硬盘)而特殊优化处理。 RocksDB将最大限度的发挥闪存和RAM的高度率读写性能。
  • 可适配性: RocksDB适合于多种不同工作量类型。 从像MyRocks这样的数据存储引擎, 到应用数据缓存, 甚至是一些嵌入式工作量,RocksDB都可以从容面对这些不同的数据工作量需求。
  • 基础和高级的数据库操作: RocksDB提供了一些基础的操作,例如打开和关闭数据库。 对于合并和压缩过滤等高级操作,也提供了读写支持。
  • RocksDB官方网址
  • RocksDB中文网址
RocksDB的典型场景(低延时访问):
  1. 需要存储用户的查阅历史记录和网站用户的应用
  2. 需要快速访问数据的垃圾检测应用
  3. 需要实时scan数据集的图搜索query
  4. 需要实时请求Hadoop的应用
  5. 支持大量写和删除操作的消息队列

🌴 知识体系

RocksDB体系结构

image

LSM-Tree

image

RocksDB 5大子模块,分别为:

  • Basic Operation,基本操作定义
  • Terminology,内部术语定义
  • Tool,内部工具
  • Logging/Monitoring ,日志和监控
  • System Behavior,内部系统行为

📄 文章

  • 高性能存储引擎RocksDB模块详解
  • RocksDB概念及简单应用

列存储数据库

  • 相关产品:Cassandra, HBase
  • 典型应用:分布式的文件系统
  • 数据模型:以列簇式存储,将同一列数据存在一起
  • 优势:查找速度快,可扩展性强,更容易进行分布式扩展
  • 劣势:功能相对局限

🦕 Cassandra

Cassandra是开源分布式NoSQL数据库系统。用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身,由于Cassandra良好的可扩展性,现在成为了一种流行的分布式结构化数据存储方案。是一个网络社交云计算方面理想的数据库。

image

特征
  • 分布式
  • 基于column的结构化
  • 高伸展性
Cassandra体系结构

image

核心结构
  • Node 存储数据的地方。它是Cassandra的基础设施组件
  • datacenter 相关节点的集合。数据中心可以是物理数据中心,也可以是虚拟数据中心。不同的工作负载应该使用单独的数据中心,无论是物理的还是虚拟的。复制由数据中心设置。使用单独的数据中心可以防止Cassandra事务受到其他工作负载的影响,并使请求彼此接近以降低延迟。根据复制因子,可以将数据写入多个数据中心。数据中心绝不能跨越物理位置。
  • Cluster 一个集群包含一个或多个数据中心。它可以跨越物理位置。
  • Commit log 为了持久性,所有数据写入之前都要首先写入提交日志(日志写入优先)。所有数据都刷新到SSTables之后,就可以对其进行归档、删除或回收。
  • SSTable(Sorted String Table) 一个SSTable是一个不可变的数据文件,Cassandra定期将memtables写入其中。仅追加SSTables并按顺序存储在磁盘上,并为每个Cassandra表维护SSTables。
  • CQL Table 按表行获取的有序列的集合。一张表由多列组成,并且有一个主键。
核心组件
  • Gossip 一种对等通信协议,用于发现和共享Cassandra集群中其他节点的位置和状态信息。Gossip息也由每个节点本地保存,以便在节点重新启动时立即使用。
  • Partitioner 分区程序确定哪个节点将接收一段数据的第一个副本,以及如何跨集群中的其他节点分发其他副本。每一行数据都由一个主键唯一地标识,主键可能与其分区键相同,但也可能包含其他集群列。Partitioner是一个哈希函数,它从一行的主键派生标记。分区程序使用令牌值来确定集群中的哪些节点接收该行的副本。Murmur3Partitioner是新Cassandra集群的默认分区策略,几乎在所有情况下都是新集群的正确选择。
  • Replication factor 整个集群中的副本总数。副本因子1表示在一个节点上每一行只有一个副本。副本因子2表示每一行有两个副本,其中每个副本位于不同的节点上。所有的副本都同样重要,没有主副本。你可以为每个数据中心定义副本因子。通常,应该将副本策略设置为大于1,但不超过集群中的节点数。
  • Replica placement strategy Cassandra将数据的副本存储在多个节点上,以确保可靠性和容错能力。副本策略决定将副本放在哪个节点上。数据的第一个副本就是第一个副本,它在任何意义上都不是唯一的。强烈建议使用NetworkTopologyStrategy策略,因为在将来需要扩展时,可以轻松扩展到多个数据中心。创建keyspace时,必须定义副本放置策略和所需的副本数。
  • Snitch snitch将一组机器定义为数据中心和机架(拓扑),副本策略使用这些数据中心和机架放置副本。 在创建集群时,必须配置一个snitch。所有的snitch都使用一个动态的snitch层,该层监视性能并选择最佳副本进行读取。它是默认启用的,建议在大多数部署中使用。在cassandra.yaml配置文件中为每个节点配置动态snitch阈值。
  • cassandra.yaml 用于设置集群的初始化属性、表的缓存参数、调优和资源利用率的属性、超时设置、客户端连接、备份和安全性的主要配置文件。
文章
  • Cassandra数据分区
  • Cassandra基础
  • NoSQL数据库——Cassandra

文档型数据库

  • 相关产品:CouchDB、MongoDB、SequoiaDB
  • 典型应用:Web应用(与Key-Value类似,Value是结构化的)
  • 数据模型: 一系列键值对
  • 优势:数据结构要求不严格
  • 劣势: 查询性能不高,而且缺乏统一的查询语法

🦜 CouchDB

🦢 MongoDb

🦊 NewSQL数据库

SQL引擎

🦅 TokuDB

TokuDB介绍

TokuDB 是一个高性能、支持事务处理的 MySQL 和 MariaDB 的存储引擎。TokuDB 的主要特点则是对高写压力的支持。

TokuDB 特性:
  • Up to 25x Data Compression
  • Fast Inserts
  • Eliminates Slave Lag with Read Free Replication
  • Hot Schema Changes
  • Hot Index Creation - TokuDB tables support insertions, deletions and queries with no down time while indexes are being added to that table
  • Hot column addition, deletion, expansion, and rename - TokuDB tables support insertions, deletions and queries without down-time when an alter table adds, deletes, expands, or renames columns
  • On-line Backup
TokuDB发展

TokuDB在 8.0 版本已标记为废除状态,下一个大版本更新将会移除此引擎,官方推荐了性能更优的 MyROcks 引擎。

分布式数据库

🐪 TiDB

  • TiDB概述和整体架构

🐫 Oceanbase

  • 阿里巴巴开源数据库–OceanBase从使用聊到架构剖析

🐐 MemDB

  • 分布式事务内存数据库–MemDB
  • Oceanbase,TiDB,Cassandra,RocksDB,MemDB对比

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/655194.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【LeeCode算法】第67题:二进制求和

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路:将a和b两个字符串转换成十进制,然后将相加的结果转换回文本的二进制。 2. 代码: char* addBinary(char* a, char* b) {int a_len strlen(a);i…

保障餐饮场所安全:可燃气体报警器专业检测的必要性

在餐饮行业,火灾隐患一直是备受关注的问题。为了有效预防和及时发现可燃气体泄漏,可燃气体报警器的专业检测周期显得尤为重要。 今天,佰德和大家一起来深入了解一下可燃气体报警器的专业检测周期,若您对此有不同的观点或其他的问…

鸿蒙ArkUI-X跨语言调用说明:【平台桥接开发指南(Android)BridgePlugin】

BridgePlugin (平台桥接) 本模块提供ArkUI端和Android平台端消息通信的功能,包括数据传输、方法调用和事件调用。需配套ArkUI端API使用,ArkUI侧具体用法请参考[Bridge API]。 说明: 开发前请熟悉鸿蒙开发指导文档: gitee.com/li-…

OSPF优化——OSPF减少LSA更新量2

二、特殊区域——优化非骨干区域的LSA数量 不是骨干区域、不能存在虚链路 1、不能存在 ASBR 1)末梢区域 该区域将拒绝 4、5LSA的进人,同时由该区域连接骨干0区域的ABR 向该区域,发布一条3类的缺省路由; 该区域内每台路由器均需配置&#xf…

1---Linux下进程的概念(逻辑推导,全干货无废话)

一、进程和程序: 1.1什么是程序? 程序由代码、数据、逻辑、接口和文档组成的一组按特定顺序执行的计算机指令,用于实现特定功能或解决问题。程序存储在磁盘上。 1.2什么是进程? 进程是一个正在执行的程序实例,包含程…

LLM提示工程的技巧

1. 从简单开始(Start Simple) 避免在一开始就增加太多的复杂性。 从简单的提示开始,然后在后续提示中添加更多信息和上下文。 这样,提示就是一个迭代过程,提示在此过程中进一步发展。 从简单的开始,就有足…

Matplotlib绘图指南:从基础绘图到多子图展示

目录 前言 导入模块 第一点:绘制图像 第二点:保存图像 第三点:多图形的绘制 第四点:绘制多子图 总结 前言 在数据可视化中,Matplotlib是一款强大的Python库,提供了丰富的功能来绘制各种类型的图表。…

【Linux】自己实现一个bash进程

bash就是命令行解释器,就是Linux操作系统让我们看到的,与用户进行交互的一种外壳(shell),当然了bash也是一个进程,它有时候就是通过创建子进程来执行我们输入的命令的。这无疑就离不开我们上篇博客所说的进…

Python零基础一天丝滑入门教程(非常详细)

目录 第1章 初识python 第1节 python介绍 1.为什么要学习Python? 2.python排名 3.python起源 4.python 的设计目标 第2节 软件安装 第2章 快速上手:基础知识 第1节 Python3 基础语法 Python 变量 字面量 数据类型转换 Python3 注释 数据类…

《java数据结构》--队列详解

一.认识队列🐱 初识队列😸 队列和栈类似都对数据的存取有着严格的要求,不同的是栈遵循先进后出的原则,而队列遵循先进先出的原则,栈是只有一端可以存取,队列是一端存,一端取。这里我来画一个图…

Java的类路径究竟是什么?

回答 问了chatgpt这个问题,首先类路径的定义是: 是指一组路径,这些路径告诉Java虚拟机(JVM)和类加载器在哪里可以找到应用程序所需的类和资源文件。说白了就是在运行java程序的时候需要先将java源代码编译成class文件…

Layui 项目打开左侧菜单空白解决方案

home/index.html 页面中 替换 navigation 为 menu

网络安全行为可控定义以及表现内容简述

在数字化快速发展的今天,网络安全已成为国家和企业不可或缺的防线。据统计,网络攻击事件频发,给全球经济带来了巨大损失。因此,确保网络安全行为可控显得尤为重要。今天我们来聊聊网络安全行为可控定义以及表现内容。 网络安全行为…

【Rust日报】Rust 中的形式验证

文章 - 未来的愿景:Rust 中的形式验证 这篇文章回顾了形式化验证的基本概念,作者展示了如何使用 Hoare triples 来描述和推理程序的正确性,以及如何使用分离逻辑来解决验证的复杂性。文章还解释了为什么 Rust 适用于形式化验证,以…

Java程序员必备技能之MySQL数据库 图解整理/快速入门

恭喜大家来到全新的篇章——MySQL数据库,这一篇我们将学会MySQL数据库的原理、使用sql对数据库的增删改查操作、以及对MySQL数据库的权限管理和用户管理等内容。请大家耐心看下去,相信大家在看完这篇文章后,一定可以学会MySQL数据库(不会Java也可以学会!)。 ps:想要补充…

Shell脚本基本命令

文件名后缀.sh 编写shell脚本一定要说明一下在#!/bin/bash在进行编写。命令选项空格隔开。Shell脚本是解释的语言,bash 文件名即可打印出编写的脚本。chmod给权限命令。如 chmod 0777 文件名意思是给最高权限。 注意:count赋值不能加空格。取消变量可在变…

菜鸟学dubbo 2.x配置笔记(更新中)

一、标签示例 provider.xml 示例 <beans xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo"http://dubbo.apache.org/schema/dubbo"xmlns"http://www.springframework.org/schema/beans"xsi:schemaLocation"http://w…

树莓派开箱

1.树莓派4B配置 CPU&#xff1a;64位1.5GHZ四核处理器。 GPU:Broadcom VideoCore VI500MHZ 蓝牙5.0 电源Type C(5V 3A),也可以使用排针链接5V锂电池最大放电电流必须达到3A。 还有千兆以太网等以后用到再说。 接下来进入文章重点 2.镜像文件烧录 前期准备&#xff1a;1…

java项目之飘香水果购物网站(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的飘香水果购物网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 飘香水果购物网站的主要…

GANs生成对抗网络的学习

1.GANs生成网络的定义 GANs是一种深度学习模型&#xff0c;用于生成新的数据实例&#xff0c;如图像、音频和文本。它主要由两部分组成&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;。 2.生成器 生成器的目标是创造出…