叶测试 发布的文章

为什么不推荐使用外键?

阿里的开发手册中提到:【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

外键和主键一样,都是一种约束,外键约束也称为引用约束或引用完整性约束:

  • 外键列必须引用另一个表中的主键或唯一键列
  • 外键列必须满足引用完整性,也就是说,它们包含的值必须存在于被引用表的主键或唯一键列中

定义外键之后,数据库的每次操作都需要去检查外键约束。对于插入来说,影响了插入速度;对于更新来说,级联更新是强阻塞,存在数据库更新风暴(Database Update Storm)的风险。

所谓 Database Update Storm,指的是在高并发环境下,多个客户端同时对数据库进行大量的更新操作,存在锁竞争问题甚至死锁,从而导致数据库性能急剧下降或完全崩溃。

另外,当数据量非常大的时候,常见手段是分库分表,但外键通常难以跨越不同数据库来建立联系,数据的一致性更难维护。

因此,外键与级联并不适合分布式、高并发集群,但单机低并发业务可以考虑使用外键保证一致性和完整性。

Git提交规范

需制定统一标准,提交记录清晰明了,让团队一看就能知道此次提交的目的,减少时间成本。规范的git提交,方便接入版本日志自动化处理系统。

phpstorm安装 git commit message helper 插件步骤:

  1. file -> settings
  2. plugins 搜索安装
  3. 通过phpstorm提交时,点击图示图标填写记录。

- 阅读剩余部分 -

PHP 生成简短唯一ID开源库 Sqids

Sqids 是一个开源库,可以让您从数字中生成唯一的ID。它有利于缩短链接,快速生成URL安全的ID,并将其解码为数字,以更快地查找数据库。https://github.com/sqids/sqids-php

注:不适用于敏感数据。
生成的ID对于输入和字母表是唯一的。请记住,默认字母表包含大写和小写字母,因此默认ID是区分大小写的。

限制:

  • Sqids无法编码负数。
  • 最小字母表长度为3个字符。
  • 字母表不能包含任何多字节字符。
  • Sqids不能生成特定长度的ID,只能生成至少特定长度的ID。最小长度参数范围介于0和255之间。
  • Sqids可以尝试重新生成ID,直到字母表长度减一。
# 安装
composer require sqids/sqids

# 示例
$sqids = new Sqids(); #指定最小长度 new Sqids(minLength: 10) 自定义字母表:new Sqids(alphabet: 'FxnXM1kBN6cuhsAvjW3Co7l2RePyY8DwaU04Tzt9fHQrqSVKdpimLGIJOgb5ZE') 防止特定单词出现在自动生成的ID中的任何位置:new Sqids(blocklist: ['86Rf07'])
$id = $sqids->encode([1, 2, 3]); // "86Rf07"
$numbers = $sqids->decode($id); // [1, 2, 3]

高并发架构设计(三大利器:缓存、限流和降级)

软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。

高并发背景

互联网行业迅速发展,用户量剧增,系统面临巨大的并发请求压力。

软件系统有三个追求:高性能、高并发、高可用,俗称三高。三者既有区别也有联系,门门道道很多,全面讨论需要三天三夜,本篇讨论高并发。

高并发对系统的挑战

性能下降、资源竞争和稳定性问题等。

- 阅读剩余部分 -

API 接口到底要不要添加签名机制?

在当今的数字化世界中,API(应用程序编程接口)是现代软件架构中不可或缺的一部分,使得不同的系统和服务能够相互通信和集成。在 API 接口的设计与开发中,安全性始终是一个不容忽视的问题。API 签名机制是一种简单有效的安全措施,用于请求的身份验证和数据完整性保护。本文将深入探讨 API 签名的必要性、原理、实现方式以及优缺点,为开发者提供全面的参考和指导。

什么是 API 签名机制

API 签名机制是用于确认消息的来源和保护数据完整性的一种安全措施。签名机制通常涉及到以下几个步骤:

- 阅读剩余部分 -

git log详解

git log 功能详解

命令模式:git log [options] [<file> <commit> <tag>...]

如果不加其它选项,默认情况下,这个命令按提交的先后顺序由近到远显示提交日志,包括每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明等信息。

如果加文件名作为参数,那么就会只查看跟某个文件有关的提交历史;

如果指定某次提交的校验和或者标签名作为参数,那么就会查看指定提交或标签之前的提交历史。

命令选项如下图:

- 阅读剩余部分 -