数据库常识课

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,经济版 1GB 1个月
简介: 数据库常识课

基础认知

传统关系型数据库(一般,指 InnoDB MySQL )参考指标:

  • 1TB:如果数据库会膨胀到 TB 级别,需要考虑 MySQL 分库分库。
  • 1000 万行或 10GB:单表的记录数超过 1000 万行,或单表磁盘空间占用超过 10GB,需要考虑分表
  • 每秒 1000 次写入:单节点写入速率超过每秒 1000 次。可以考虑根据业务场景引入 Redis 或消息队列作为写缓冲,实现数据库写操作异步化

来源:刘春辉 《Shopee 是如何进行数据库选型的?》

数据库的单机QPS不过几千,显然满足不了互联网业务场景下对高并发的要求。因此,分库分表 + 读写分离成为常态。

  • 分库,即把一个库分成多个库,部署在多个实例之上。
  • 读写分析:主库承载写请求,从库承载读请求。由于多数业务场景都是读远多于写,一个主库挂多个从库,可以有效降低对单库的压力。

如果写请求继续增加(或,数据量增加)达到瓶颈,就继续分库分表;反之,如果读的请求上升就挂更多的从库。

分表复杂性

然而线上业务情况往往复杂的多,随着数据量增加、用户量增加,数据库分表(分库,一般按照业务因此问题不大,暂且不表)会逐渐暴漏出以下问题:

  • 分片复杂
  • 容量预估困难
  • 某单一数据没有考虑分表,随着业务发展需要分表,且分表字段不是已有的ID字段,变更代价高昂

十倍架构设计、百倍数据设计

  • Coordinate&Integrity
  • 以订单为例,业务会按照买家、卖家、订单状态、支付方式等维度筛选数据。若以买家维度分库分表,则卖家维度的查询会变得困难;反之亦然。解决方案一般是以主要查询为维度,分别建立异构索引,不同数据必然存在一致性的难题
  • 数据倾斜
  • 诸如点赞和关注等偏社交类业务数据,按照用户维度分库分表后常出现数据分布不均匀的现象,少数分片的数据量可能远大于其他分片;这些大分片往往也是读写的热点,进而容易成为性能瓶颈。

解决方案:使用大素数取模再分表 可以得到较好的效果

  • 查询复杂
  • 多分表查询
  • 多维度维度:见订单部分

存储细分

由于数据分表可见的复杂性,在实际使用中,随着对分表的疲劳,不同于诸多传统关系型数据库的新兴分布式数据库也越来越多的被使用在生产环境,例如:TiDB

参考:TiDB 在知乎万亿量级业务数据下的实践和挑战

无论数据库如何多变,了解其类型和原理,才能看穿表象,把握本质,更好的应用到业务的设计之中

按照应用类型来分

  • 键值型:ID - Value
  • 表格型:ID Collection + Time - Value
  • 关系模型: ID + ID Collection + Time - Value

参考: 认识资源

按照存储模型来分

  • B-tree:读取友好,数据有序。LIRS算法,将缓冲池分为两级,数据首先进入第一级,如果数据在较短的时间内被访问两次或者以上,则成为热点数据进入第二级,每一级内部还是采用LRU替换算法
  • Bitcask:写入友好,数据无序。在内存中存储了主键和value的索引信息,磁盘文件中存储了主键和value的实际内容。需要定期执行合并(Compaction)操作以实现垃圾回收。Bitcask通过索引文件(hint file)来提高重建哈希表的速度
  • LSM:写入友好,数据有序。将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘,读取时需要合并磁盘中的历史数据和内存中最近的修改操作,需要定期执行合并(Compaction)操作以实现垃圾回收

本文作者 : cyningsun

本文地址https://www.cyningsun.com/08-18-2020/first-lesson-of-database.html

版权声明 :本博客所有文章除特别声明外,均采用 CC BY-NC-ND 3.0 CN 许可协议。转载请注明出处!

# 数据库

  1. 深入理解 Redis cluster GOSSIP 协议
  2. 如何配置 go-redis 连接池
  3. 如何使用 Redis 存储对象
  4. Redis cluster 细节与技术选型
  5. etcd 实现与选型分析
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
23天前
|
存储 数据管理 数据库
理解数据库中的参照完整性
【6月更文挑战第13天】数据库设计旨在创建和维护企业的数据管理系统,确保数据完整性和消除冲突。好的数据库设计应减少冗余,保证信息准确完整,并满足处理和报告需求。设计工具包括E-R图和UML等。
50 2
理解数据库中的参照完整性
|
2月前
|
存储 SQL 关系型数据库
我们应该要知道的数据库知识
我们常常谈到数据库可能就会想到Oracle数据库、ACCESS数据库、SQL数据库、MySQL等等,
19 1
|
2月前
|
存储 监控 算法
什么是数据库的内模式
什么是数据库的内模式
|
2月前
|
数据库
数据库(二)
数据查询教程包括单表查询操作,如Select语句用于选取属性,可指定列名、使用别名、计算表达式,并通过Distinct去除重复元组。条件查询(Where子句)支持比较运算,如Between、In、Like(支持模糊匹配)及空值判断。连接查询用于合并多表数据,如内连接、外连接和笛卡尔积。例如,通过连接emp和dept表,可获取员工姓名及其所在部门名称。
26 3
|
2月前
|
数据库
数据库视频(五)
数据库视频(五)
21 0
|
2月前
|
存储 数据库 数据安全/隐私保护
数据库特点
数据库特点
46 9
|
12月前
|
存储 SQL 数据库
数据库—耿建玲视频总结(三)
其实这章很是简单的,索引(编号),其中讲解了索引的优缺点;以及都有什么类别的索引,最后就是如何建立。
|
9月前
|
存储 缓存 关系型数据库
2、数据库相关
2、数据库相关
36 0
|
12月前
|
SQL 安全 数据库
【数据库视频】总结
【数据库视频】总结
|
数据库
数据库的实现
数据库的实现
191 0