大家好,我是鱼皮,今天和大家聊聊数据库。 什么是数据库? 这个问题相信对学编程的朋友们来说过于简单了,大家想必都是增删改查的好手。 但如果让你说出 10 种不同类型的数据库,阁下该如何应对?...比较经典的关系型数据库产品有 MySQL、Oracle、PostgreSQL、Microsoft SQL Server 等。其中,MySQL 由于开源又易学,已经成为后端开发同学必学的数据库技术。...对于大多数项目,用 MySQL 等关系型数据库来存储数据就足够了。但关系型数据库不是银弹!在某些场景下,比如要存储的数据间没有关系时,它并不是最佳的选择。...解决特定问题的数据库 相信很多同学对数据库的印象就停留在 MySQL 和 Redis。的确,以上两类数据库几乎已经可以解决所有问题! 但是,未必是最适合的。...向量数据库 向量数据库是专门用于存储和处理 高维向量数据 的数据库系统。 什么是向量?每个向量可以表示一个实体,并且包含多个维度的数值。
专栏持续更新中:MySQL详解 一、背景 先要从 InnoDB 的索引实现说起,InnoDB 有两大类索引: 聚集索引(clustered index) 普通索引 (secondary index...InnoDB 聚集索引 的叶子节点存储行记录,因此,InnoDB 必须要有,且只有一个聚集索引: 如果表定义了主键,则主键就是聚集索引; 如果表没有定义主键,则第一个 not null 的 unique 列是聚集索引...二、什么是回表查询?...通俗的讲就是,如果索引的列在 select 所需获得的列中(因为在 mysql 中索引是根据索引列的值进行排序的,所以索引节点中存在该列中的部分值)或者根据一次索引查询就能获得记录就不需要回表,如果 select...这个是可以的,上面所说的分两步查找,第一步根据username查找是肯定不能少的,那我们只要把password和索引username放到一起就可以了。
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一...在本教程中,会让大家快速掌握 MySQL 的基本知识,并轻松使用 MySQL 数据库。 ---- 什么是数据库? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。...4.许多的行和列组成一张表单 5.若干的表单组成database ---- RDBMS 术语 在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语: 数据库: 数据库是一些关联表的集合...---- MySQL数据库 MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。...MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL 是开源的,目前隶属于 Oracle 旗下产品。
夏日的美好 本文是来自一位前端人员的吐槽,笔者自己在做接口测试的时候,也会发现各类不太合理的接口定义,看看前端人员怎么说。...一个接口可以10分钟搞定,复杂的搞个一周都有可能,有时我们在项目中可能急于完成任务,而忽视了其他方面,但,我认为有些问题是可以提前避免的。 01 接口能实现功能就可以了吗?...如果这样,那么上图中的骚操作可以满足大部分场景,或者前端把数据库表传给后端,后端直接把表中数据查出返回就可以了,这种“数据中转工程师”的确没啥前途。 什么是好的接口?...问题三:路由风格要统一 接口风格不统一,有些是Rest风格的,有些不是Rest风格的 问题四:所有接口全部合成一个 上图是某项目的销售简报,从电商迁移过来的,一个页面中有多个图表,但全部用一个接口查询返回...问题五:数据格式问题 数据格式不规范,数字不要加引号 数据格式前端处理,数据库里也不要存成文本,不要进行单位转换(如转成万、亿等),后端不要对小数位数做处理,这些操作都应前端处理。
第一次听到RPO,我以为是专门割韭菜的IPO,加上说这话的人不断对我挤眉弄眼,以至于我手抖,怎么搜都搜不到这个技术名词。 到了最后我才弄明白,他说的是RPO,而不是IPO,是灾备场景中的名词。...RTO = Recovery Time Objective = 恢复时间目标 RPO = Recovery Point Object = 恢复点目标 其差别,一个是Time、一个是Point。...比如,你的数据库当机了。如果你的业务能够忍受30分钟之内启动起来,那么RTO就等于30分钟。 再比如,你的数据库当机了,30分钟后恢复了。...值得注意的是,任何宣称RTO=0和RPO=0的厂商,都是在吹牛皮。 单机服务 对于单机服务来说,从故障到恢复正常服务,它的间隔时间不可能是0。...因为目前的数据库服务,大多数都会写一份预写日志来防止异常发生。比如ES会先写一份translog,MySQL会先写一份redo log,Postgres会写一份wal日志。
在软件开发的过程中随着业务的复杂,产生缺陷是在所难免的,而发现缺陷修正缺陷的代价也会越来越大,当业务价值和缺陷共存的时候是追求0缺陷还是追求业务价值最大化成为了相当困难的抉择。...价值优先还是质量零缺陷优先谁说了算 最后做什么是PO产品负责人说了算,但是责任是团队共担的。...所以DevOps持续交付能力是构建适应变化的基础,另一方面的难度在于团队对于质量的定义,也就是用户故事中虚拟角色所需要的价值。是更多考虑游戏中的硬核玩家还是更多普通玩家呢?
连接方式 1.1 方式1 /usr/local/mysql5.7/bin/mysql -p 此方法默认采用root@localhost用户登录, ?...1.2 方式2 /usr/local/mysql5.7/bin/mysql -uroot -p -S /app/data/mysql3307/tmp/mysql.sock 1.3 方式3 /usr...注:root@localhost 和root@'127.0.0.1'是不同的用户 1.4 方式4 /usr/local/mysql5.7/bin/mysql -uroot -p -h localhost...user="root" password="123456" /** 使用mysql进行测试 */ /usr/local/mysql5.7/bin/mysql -uroot -S /app/...data/mysql3307/tmp/mysql.sock Welcome to the MySQL monitor.
NOT EXISTS真的不走索引么? 查看两种SQL的执行计划! 使用NOT EXIST方式的执行计划: ? 使用LEFT JOIN方式的执行计划: ?...通过MySQL提供的Profiling方式来查看两种方式的执行过程。 使用NOT EXIST方式的执行过程: ? 使用LEFT JOIN方式的执行过程: ?...关注公众号Java技术栈回复m36获取一份MySQL研发军规。 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
varint是使用一个或多个字节序列化整数的方式,他可以把一个固定字节的整数编码成变长字节。...varint编码中每一个字节的最高位都不用来存储数字的真正表示,而是表示当前字节是否还属于当前数据,1代表是,0代表不是(也就是该字节是当前数据的最后一个字节数据)。...每一个字节的低7位用于以7位为一组存储数字的二进制补码表示,最低有效数组在前,这也就表明varint编码是按照小端序来排列的。
本文是来自一位前端人员的吐槽,笔者自己在做接口测试的时候,也会发现各类不太合理的接口定义,看看前端人员怎么说。...如果这样,那么上图中的骚操作可以满足大部分场景,或者前端把数据库表传给后端,后端直接把表中数据查出返回就可以了,这种“数据中转工程师”的确没啥前途。 什么是好的接口?...问题三:路由风格要统一 接口风格不统一,有些是Rest风格的,有些不是Rest风格的 问题四:所有接口全部合成一个 上图是某项目的销售简报,从电商迁移过来的,一个页面中有多个图表,但全部用一个接口查询返回...问题五:数据格式问题 数据格式不规范,数字不要加引号 数据格式前端处理,数据库里也不要存成文本,不要进行单位转换(如转成万、亿等),后端不要对小数位数做处理,这些操作都应前端处理。...往期推荐: 测试团队的一次复盘实践 接口测试断言 你写的接口脚本合理么 事务一致性测试 研发效能度量指标的陷阱思考
要实现一个简易的String.raw也很简单,比如下面的myRaw,其中: strings参数是保存原始字符串的数组 values参数是保存所有替换变量的数组 function myRaw(strings...values.length) { result += values[i]; } } return result; } 对于模版字符串你好 {1}我是...{2} strings参数如下: ["你好", "我是", "", "谢谢"] values参数如下: [1, 2, 3] myRaw方法会依次从strings和values中取值拼接字符串。...身份标签 标签函数的一个有意思的应用场景是「定义身份标签」,也就是告诉编译器「接下来这段模版字符串是什么语言」。...下面是一个代码示例: function safeHtml(strings, ...values) { let result = strings[0]; for (let i = 1; i < strings.length
大家好,我是程序员鱼皮。MySQL 是后端程序员必备的关系型数据库管理系统,有了 MySQL 之后,数据就可以像表格一样结构化地持久化存储。...而无论是使用 Docker 部署还是手动搭建 MySQL,都需要自己维护,出现任何问题都需要自己花时间去解决。如果出现一些恶意攻击、数据丢失的特殊情况,那就真的是汗流浃背了。...MySQL 集群版 前面提到,为了防止数据丢失、保证服务的可用性,我们可以搭建 MySQL 集群。 什么是 MySQL 集群呢?...涉及的专业名词可能比较多,总之大家只需要知道 —— MySQL 又进化了。优化是永无止境的! 最后 腾讯云的 MySQL 服务不仅提供了数据库的监控系统,还可以免费帮我们维护数据。...是像鱼皮一样直接用云服务的数据库,还是 Docker 搭建 MySQL,还是自己手动部署 MySQL?欢迎大家留言评论。
Mysql数据库中什么是索引下推引言在MySQL数据库中,索引是提高查询性能的关键。为了进一步优化查询性能,MySQL引入了索引下推的概念。...索引下推是指在使用索引进行查询时,将过滤条件下推到存储引擎层级进行处理,减少不必要的数据读取和传输,从而提高查询效率。...Mysql数据库中的"索引下推"是指在使用索引进行查询时,将部分过滤条件下推至存储引擎层进行过滤,减少回表的次数和数据传输量,从而提高查询性能。...但是需要注意的是,索引下推对于某些特定的查询条件可能没有效果,或者在某些情况下可能会降低查询性能。因此,在使用索引下推时需要仔细评估和测试。结论索引下推是MySQL中一项优化查询性能的重要技术。...在设计和优化数据库查询时,可以考虑使用索引下推来进一步提升性能。
那些写程序员不是吃青春饭的文章,基本上都是这两点理由:第一见着的老程序员写代码都超级牛叉,小年轻都自愧不如,人家收入还很高;第二国外人家程序员写到退休的有的是啊。...基本上就这两点吧,这两点第一点说的是岁数大的技术大牛,第二是外国人,各位对号入座觉着自己能成为岁数大写代码很牛叉的那个还是能成为外国人呢? 编程这个工作并没有多少年的历史。...有一个公认的的结论就是,程序员一个是需要长期不断学习新知识的工种,老程序员的弱点就是在学习新知识这块,精力的确不如年轻人。...再有一些公司,有一些程序员是可以自己主动转职的,比如转实施或者转测试啊等等,代码写的没那么牛就可以想办法改成公司中的其他工种,这也是转型,有很多人就写了一两年代码就改行了,发展其实也未必比程序员差。...去一个技术稳定一点的,一种技术或者一个平台起码能用个七八年吧,掌握点值钱而且稳定的技术,比如数据库那些东西,多少年不过时,再找一个稳定的项目,可以做很久。
要回答这个问题,就要搞清楚这里的所谓的“做东”主要是为谁提供怎样的服务,这里: 客人(被服务的对象)是运行在MCU上的程序; 服务主要是 Libc 所许诺提供的服务; 与大家一般意义上的理解不同: 这里的主人并非是...(然而并不是,哈哈哈……) 【Semihosting是如何成为嵌入式“阑尾”的】 正如前面所说,Semihosting是一种由PC上运行的调试程序(Debugger),经由调试仿真器(Debugger...其中 BKPT 是Cortex-M 的 Break Point(软件断点)指令,而常数 0xAB 则是 Semihosting 专用暗号。...下面是Semihosting所覆盖的libc功能的主要类别: 1....Compiler 5向Arm Compiler 6迁移必经之路上的拦路虎之一就是名为BKPT 0xAB的Hardfault: 你以为你写了 int main(void) 编译器就不给main()函数传参数了么?
相信不少朋友和我一样是通过实时性操作系统(Real Time Operating System, RTOS)第一次接触到实时性概念的——我记得那还是大学时代、参加机器人竞赛的时候。...考虑一个有趣的问题:对一个实时性任务来说,实时性窗口内的时间,其价值是一样的么?换句话说,横竖处理事件消耗的时间是不变的,早点做迟点做都是做,有什么区别么?...需要强调的是,task_a()、task_b()和task_c()三个函数的策略本质上都是一样的——“一旦检测到事件立即处理,绝不迟延”!...作为一个系统开发者,我们显然是需要从全局考虑的,因此完全没有必要从单个实时性任务的自私视角来看问题,因此结论就变得更为直接:实时性窗口内越靠前的时间价值越高,从总体上来看“单纯”越快越好的策略对实时性是有害的...从结论上看简单的“越快越好”策略在实时性系统中是不允许的。
然而,随着时间的推移,业务体谅发展起来,忽然有一天,Redis 宕机,所有的流量会打到 MySQL 上,严重的话还会压垮 MySQL。...流量依然会打到 MySQL 上,咋办呢? 于是,2013 年,Redis 2.8 版本发布,迎来了数据持久化。...哨兵集群 有了主从复制就万无一失了么?答案是否定的。 因为我们通过人工介入来实现主从切换的,就必须要算上人的反应时间、操作时间,所以,在这期间你的业务应用依旧会受到影响。 如何把这个过程自动化?...Redis 集群是一种分布式数据库方案,集群通过分片(sharding)来进行数据管理(「分治思想」的一种实践)。 将数据划分为 16384 的 slots,每个节点负责一部分槽位。...是一个无中心架构,并提供复制和故障转移功能。 展望未来 Redis 受欢迎主要原因是极高的性能以及丰富、方便使用的数据结构,这些简单好用的数据结构大幅度降低开发业务复杂度。
的安装目录 basedir=D:\Program Files\mysql-8.0.13-winx64 # 设置mysql数据库的数据的存放目录 datadir=D:\Program Files\mysql...-8.0.13-winx64\mysql_oldboy.err pid-file=D:\Program Files\mysql-8.0.13-winx64\mysqld.pid # 定义mysql应该支持的...安装数据库服务 接上一步初始化数据库后,继续执行如下命令; mysqld --install 因为博主已经安装过了,所以会提示服务已存在,若是第一次安装,则不会提示已安装; ? 6....启动与关闭 MySQL 数据库服务 # 开启 net start mysql # 关闭 net stop mysql 7....,是不是简单,那就亲自动手试试吧; Reference [1]下载: https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.13-winx64.zip
如果是 MySQL 8.0.x 到 MySQL 8.0.z 的小版本升级,可以直接升级。参数名称的变化和弃用情况,可以在 MySQL 服务启动后,错误日志中看到,更新到配置文件中即可。...所以申请一个变更窗口是最优解。 4具体的升级步骤是什么?...-8.0.xx-linux-glibc2.12-x86_64 mysql 4.4 启动数据库 启动就是升级,数据字典升级和 server 升级。...ln -s mysql-8.0.xx旧版本-linux-glibc2.12-x86_64 mysql_Basedir # 启动服务 6关于节点切换 变相自定义切换 (虽说节点切换是自动的)。...节点权重 group_replication_member_weight 值越大越优先 server_uuid 越小越容易被选为主 7关于升级中遇到的问题 启动数据库时,查看 error 日志,替换或是去除
小伙伴想精准查找自己想看的MySQL文章?...喏 → MySQL专栏目录 | 点击这里 在业务场景要求高的数据库中,对于单条删除和更新操作,在delete和update后面加limit 1绝对是个好习惯。...避免了长事务,delete执行时MySQL会将所有涉及的行加写锁和Gap锁(间隙锁),所有DML语句执行相关行会被锁住,如果删除数量大,会直接影响相关业务无法使用。...---- 对于delete limit 的使用,MySQL大佬丁奇有一道题: 如果你要删除一个表里面的前 10000 行数据,有以下三种方法可以做到: 第一种,直接执行 delete from T...所以,在 delete 后加 limit 是个值得养成的好习惯。 好了,本文就带你了解这些,如果有相关疑问和好想法,请在下方留言,方便和小伙伴儿们一起讨论。