为什么 MySQL VARCHAR 小于 65535 · Why

CHAR 与 VARCHAR 是 MySQL 中常用的存储字符串的数据类型,在官方文档的介绍中 CHAR 类型的可定义最大长度为 255,而 VARCHAR 类型的最大长度为 65535,然而经过操作发现 VARCHAR 实际可创建的最大“长度”是一个不定值,这篇文章将会对这个问题进行分析。

关系型数据库索引设计原则

在关系型数据库系统中,不合适的索引是造成性能低下的最常见原因。普遍的情况包括没有足够多的索引、一些 SELECT 语句可能没有有效的索引、索引列的顺序不对等等。一些开发人员认为如果一个 SQL 语句使用了索引,那么这个语句得查询性能就会得到很大的提升,而且专业的索引设计应该由 DBA 来完成。但只要掌握数据库内部对任务的处理方式,我们也可以设计出高效的索引。

MySQL 与 InnoDB 存储引擎总结

MySQL 是目前广泛使用的关系型数据库,了解 MySQL 内部的运行机制与体系结构,可以帮助我们更好地解决使用过程中遇到的问题。因此笔者阅读了一些 MySQL InnoDB 存储引擎相关的书籍与资料,并在这篇文章进行总结记录。

可嵌入式数据库 BoltDB 实现原理 · Analyze

BoltDB 是使用 Go 语言实现的嵌入式 K/V 数据库,其目标是为不需要完整数据库服务(如 Postgres 或 MySQL)的项目提供一个简单、快速、可靠的嵌入数据库。BoltDB 已在 Etcd、Bitcoin 等项目中作为底层数据库实现。这篇文章对 BoltDB 的设计原理进行简要分析。

分布式一致性协议 Raft 原理

Raft 是一种基于消息传递通信模型、用来管理日志复制的一致性协议,它允许一组机器像一个整体一样工作,即使其中的一些机器出现错误也能正常提供服务。在 Raft 被提出来之前,Paxos 协议是第一个被证明的一致性算法,但是 Paxos 的原理理解与工程实现都很困难。Raft 是Paxos 的一种实现方式,目标是提供更好理解的算法,并被证明可以提供与 Paxos相同的容错性以及性能。

加密哈希算法的实现原理

哈希算法(Hash function)又称散列算法,是一种从任何数据中创建小的数字“指纹”的方法。哈希算法只需满足把一个散列对象映射到另一个区间的需求,因此根据使用场景的不同,可将哈希算法分为加密哈希与非加密哈希。

2019 年总结:教训、反思、新尝试

将年终总结以“教训、反思、新尝试”为主题未免感觉有些小题大作,但这也是我在 2019 年的心路历程。在这一年里除了工程能力上的提升,还在个人学习方式、团队协同工作方面进行了一些思考,对上半年比赛过程中产生的教训进行了反思,希望在未来的工作中少犯同类的错误。

Redis RDB 与 AOF 持久化 · Analyze

Redis 是内存数据库,将数据保存在内存中,以换取更快的读取速度。但由于内存是易失性存储器,一旦进程退出或者硬件设备出现故障,Redis 存储的数据可能就会丢失。为了解决数据持久化问题,Redis 提供了 RDB 快照与 AOF 写操作记录两种方案,这篇文章就这两种分案的实现方式进行分析。