MySQL 怎么让自己更高级---从内存表说到了开发方式

文摘   2024-12-09 06:00   菲律宾  

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2610人左右 1 + 2 + 3 + 4 +5 + 6 + 7 + 8 )(1 2 3 4 5 6群均已爆满,新人进7群破300,8群,准备9群)

公告:明天 2024-12-10此公众号有活动,要年底前拿着点东西的,明天关注一下,T桖,卫衣,书是不是你的。


最近好久不写MySQL了,并不是不想写,主要有两个原因

1 我们的确用MySQL越来越少了,都换PolarDB了

2 我们用PG 比较多,按照某大佬的说法,我们单位的PG算的上国内的 TOP N 了。

另外最近一直在学习OceanBase,时代在变,虽然我是个老登,但我还不服老,我还要往前走,那天走不动了,再说。

     这篇是群友的要求,说必须要给他写一篇关于MySQL的内存表,这就满足群友要求,写一篇。(后面告诉我是SQL SERVER 的内存表,那这篇写了就写了)

    其实说来,虽然MySQL很多人拿它当一个数据库容器来看,但MySQL是符合之前互联网的一些特性的,比如就这个内存表。首先互联网的要求是快,内存表本身是存储在内存中的,他的访问速度是高于我们日常的INNODB引擎下的表的,同时我们也不愿意在频繁的使用REDIS 这样的数据库产品,在这样的情况下,减少我们的数据库架构的复杂性,所以有了MySQL内存表的用武之地。

那么对于他的特性我们需要进行一个梳理

数据存储位置: 数据存储在内存中,而非磁盘。

访问速度: 由于内存的访问速度远高于磁盘,因此内存表的查询速度非常快。

数据生命周期: 当MySQL服务重启或连接断开时,内存表中的数据会丢失。

不支持事务: 内存表不支持事务,因此不能保证数据的ACID特性。

不支持BLOB和TEXT类型: 由于内存限制,内存表不支持BLOB和TEXT等大文本类型。

支持索引: 内存表支持索引,可以进一步提高查询效率。

CREATE TABLE my_memory_table (
 id INT PRIMARY KEY,
 name VARCHAR(50)
) ENGINE=MEMORY;

     从原理和支持的范围上,从某个角度这样的表好像比REDIS 更香,因为我可以用SQL来操作内存的数据,不用去学REDIS 的用法,速度还快,可以建立索引。

     内存表的应用场景 缓存: 将频繁访问的小型数据集缓存在内存表中,可以显著提高查询性能。 临时表: 用作临时计算结果的存储,可以避免频繁的磁盘I/O操作。 会话级数据: 存储会话级别的临时数据,例如购物车信息。

     这里内存表的特点是要理解为什么会有这个需求,且为什么开发要用这个表,这会提高我们DBA的一个逼格,高级的DBA都会侵入到开发的环节,甚至会到架构的环节,这就是在提高自己,把自己往架构师的队伍里面迁移。

今天详细说说内存表中的一个需求的来源,会话缓存。

   什么是会话级的数据,这里我做一个解释

1 客户的访问会产生一些临时的数据,这些数据标志着用户的一些操作的历史,或者一些用户特殊的爱好,或者一些用户的操作痕迹。

      为什么有这个需求,很简单,你不能保证客户和你的应用连接是一直稳定的,如果客户不稳定他掉线了,或者操作错误了怎么办,他要回去。怎么回去,把这些数据都写到你的数据库里面吗?如果此时有100个客户度这样,你的MySQL能扛得住SESSION级别的并发吗?

NO NO NO ,撑不住,这也是大部分情况用REDIS的原因之一。 比如购物车,比如在聊天临时的一些设置,比如一些客户在点餐时临时的喜好设定,这些变化是非常大的,数据库是不能将这些数据库都存储的,如果这么干了你的数据库将是一个垃圾堆。

      所以临时表的特性就在这里出现了,快速,临时,高效,且这些数据量都不大,后续可以将这些数据在刷到磁盘上的方法更简单。同时这里还有一个特性,就是用户可能很快速的退出,比如突然想买东西了,又不买了等等,然后过5分钟又上来买了,你说说,你让程序怎么设计,这些数据到底是存不存。

      所以对于这些数据,大部分程序设计对其的定义是,必要但非必须得数据,你说客户登录上来,之前的购物车清空了,他也不会怎么样,那么在MySQL使用中没有他的好基友,REDIS。使用这个也可以来满足一些需求。

CREATE TABLE my_memory_table (
 id INT PRIMARY KEY,
 name VARCHAR(50),
 age INT
) ENGINE=MEMORY;

CREATE INDEX idx_name ON my_memory_table(name);

任何事物都有他的优缺点MySQL的内存表的问题也是显而易见

1 不能存储一些特殊的字段,比如BLOB,TEXT 等字段,当然如果用了这个内存表,也不应该用类似的字段类型。

2  不支持事务,对不支持事务,你见过REDIS支持事务吗,见过,但那也是MySQL中的内存表是不支持事务,也就是你写进去无法进行ROLLBACK,你可以理解为autocommit。

3  不要本末倒置,内存表是好用,但是要有限度,或者你的这个数据库服务器如果大量使用了内存表就不要把核心的业务,往这个MySQL上放,INNODB BUFFER POOL 和 你的 内存表都会用内存,如果两方争抢内存,那么对系统是糟糕的,甚至导致 OOM。

      这里注意一个参数max_heap_table_size: 内存表的最大尺寸,这里的参数是指的一个表,如果你有多个表就是多个表的N * max_heap_table_size = 总内存,说到这里聪明的同学已经意识到一个问题。

      MySQL的内存表所在的数据库服务器的innodb_buffer_pool 不能设置的和普通的MySQL一样大,因为要预留出来内存表要使用的内存空间。具体多大,怎么可以用一个简单的公式来计算。

总内存 - 4G - innodb_buffer_pool - 最大连接数*链接内存 = 内存表总内存/ 表数 = max_heap_table_size

最后,咱们说说软件设计中的内存表使用的关键

在MySQL的内存表的使用中,最重要的注意这两点

1 MySQL内存表是不可以进行从一个MySQL节点到另一个节点的

2 MySQL的故障转移是不会带着内存表的信息的

那么在使用中就必须有一个定期刷新内存表到实体表的过程,具体的频率和方式与业务有关,这样才能在MySQL故障的时候,带着你的内存表走。

截止今天共发布1266篇文章



MySQL相关文章

MySQL timeout 参数可以让事务不完全回滚
"DBA 是个der" 吵出MySQL主键问题多种解决方案

MySQL 让你还用5.7 出事了吧,用着用着5.7崩了

MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验
用MySql不是MySQL, 不用MySQL都是MySQL 横批 哼哼哈哈啊啊
MYSQL  --Austindatabases 历年文章合集


PostgreSQL 相关文章


PostgreSQL “我怎么就连个数据库都不会建?” --- 你还真不会!

病毒攻击PostgreSQL暴力破解系统,防范加固系统方案(内附分析日志脚本)
PostgreSQL 远程管理越来越简单,6个自动化脚本开胃菜

PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆

PostgreSQL 如何通过工具来分析PG 内存泄露

PostgreSQL  分组查询可以不进行全表扫描吗?速度提高上千倍?

POSTGRESQL --Austindatabaes 历年文章整理

PostgreSQL  查询语句开发写不好是必然,不是PG的锅

PostgreSQL  字符集乌龙导致数据查询排序的问题,与 MySQL 稳定 "PG不稳定"
PostgreSQL  Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)
PostgreSQL   玩PG我们是认真的,vacuum 稳定性平台我们有了
PostgreSQL DBA硬扛 垃圾 “开发”,“架构师”,滥用PG 你们滚出 !(附送定期清理连接脚本)

DBA 失职导致 PostgreSQL 日志疯涨


SQL SERVER 系列
SQL SERVER维保AI化,从一段小故事开始
SQL SERVER 如何实现UNDO REDO 和PostgreSQL 有近亲关系吗
SQL SERVER 危险中,标题不让发,进入看详情(译)
SQL SERVER 我没有消失,SQL SERVER下一个版本是2025 (功能领先大多数数据库)
SQL SERVER 2022 针对缓存扫描和Query Store 的进步,可以考虑进行版本升级


OceanBase 相关文章


跟我学OceanBase4.0 --阅读白皮书 (4.0优化的核心点是什么)

跟我学OceanBase4.0 --阅读白皮书 (0.5-4.0的架构与之前架构特点)

跟我学OceanBase4.0 --阅读白皮书 (旧的概念害死人呀,更新知识和理念)

聚焦SaaS类企业数据库选型(技术、成本、合规、地缘政治)

OceanBase 学习记录-- 建立MySQL租户,像用MySQL一样使用OB
OceanBase  学习记录 -- 安装简易环境
OceanBase  学习记录 --  开始入门
数据库最近第一比较多,OceanBase 定语加多了?
临时工访谈:OceanBase上海开大会,我们四个开小会 OB 国产数据库破局者
临时工说:OceanBase 到访,果然数据库的世界很卷,没边
数据库信息速递  阿里巴巴的分布式数据库OceanBase旨在进军中国以外的市场 (翻译)


PolarDB 相关文章


PolarDB-MySQL 并行技巧与内幕--(怎么薅羊毛)

PolarDB 并行黑科技--从百套MySQL撤下说起 (感谢8018个粉丝的支持)

PolarDB 杀疯了,Everywhere Everytime Everydatabase on Serverless

POLARDB  从一个使用者的角度来说说,POALRDB 怎么打败 MYSQL RDS

PolarDB 最近遇到加字段加不上的问题 与 使用PolarDB 三年感受与恳谈

PolarDB 从节点Down机后,引起的主从节点强一致的争论

PolarDB serverless 真敢搞,你出圈了你知道吗!!!!

PolarDB VS PostgreSQL  "云上"性能与成本评测 -- PolarDB 比PostgreSQL 好?

临时工访谈:PolarDB  Serverless  发现“大”问题了  之 灭妖记 续集

临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一

PolarDB for PostgreSQL  有意思吗?有意思呀
PolarDB  Serverless POC测试中有没有坑与发现的疑问
临时工说:从人性的角度来分析为什么公司内MySQL 成为少数派,PolarDB 占领高处
POLARDB  到底打倒了谁  PPT 分享 (文字版)

POLARDB  -- Ausitndatabases 历年的文章集合

PolarDB for PostgreSQL  有意思吗?有意思呀

PolarDB  搞那么多复杂磁盘计费的东西,抽筋了吗?


MongoDB 相关文章


MongoDB 合作考试报销活动 贴附属,MongoDB基础知识速通

MongoDB 年底活动,免费考试名额 7个公众号获得

MongoDB 使用网上妙招,直接DOWN机---清理表碎片导致的灾祸 (送书活动结束)

数据库 《三体》“二向箔”  思维限制 !8个公众号联合抽奖送书 建立数据库设计新思维

MongoDB  是外星人,水瓶座,怎么和不按套路出牌的他沟通?

17000多张MongoDB表的锅 自动分析删除表数据难题--从头到尾的处理过程(文尾有MongoDB开发规范)
MongoDB 插入更新数据慢,开发问哪的问题?附带解决方案和脚本
MongoDB 不是软柿子,想替换就替换
MongoDB  挑战传统数据库聚合查询,干不死他们的MongoDB 2023纽约 MongoDB 大会 -- 我们怎么做的新一代引擎 SBE Mongodb 7.0双擎力量(译)
MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模
MongoDB  双机热备那篇文章是  “毒”
MongoDB   会丢数据吗?在次补刀MongoDB  双机热备
MONGODB  ---- Austindatabases  历年文章合集


阿里云系列

阿里云数据库产品权限设计缺陷 ,六个场景诠释问题,你可以做的更好?

阿里云数据库--市场营销聊胜于无--3年的使用感受与反馈系列

阿里云数据库产品 对内对外一样的卷 --3年阿里云数据库的使用感受与反馈系列

阿里云数据库使用感受--客户服务问题深入剖析与什么是廉价客户 --3年的使用感受与反馈系列

阿里云数据库使用感受--操作界面有点眼花缭乱 --3年的使用感受与反馈系列



临时工访谈系列

本地存储还有活路吗? 从上周一个供应商问我的问题开始
一年又一年,成了老梆子,别回头,往前看!
临时工说: 实际实例揭穿AI, 上云就不用DBA的谎言
临时工说:DBA 7*24H 给2万的工作,到底去不去?
国内最大IT服务公司-招聘DBA “招聘广告”的变化--分析与探讨
临时工说:  网友问35岁就淘汰,我刚入行DBA 怎么办?



AustinDatabases
PostgreSQL ACE ,PolarDB 3年, OceanBase 极速学习ING, MongoDB 8年经验, MySQL OCP, SQL SERVER, MCITP,REDIS ,做一个合格的数据库架构师
 最新文章