从 Postgres 到 Redis,再到 Prometheus,我们都使用并从事过各种数据库的开发。我花了很多时间来阅读其中一些数据库的源代码,对于那些像我一样好奇的少数人来说,他们有兴趣学习如何编写一个数据库。本书旨在记录这一过程。
GitHub-arriqaaq/flashdb:
FlashDB is an embeddable, in-memory key/value database in Go (with Redis like commands)
01
内存数据库
传统数据库的数据主要保存在机械硬盘或者固态硬盘, 内存数据库则主要将数据保存在内存中,并通过消除对磁盘的访问来实现最小的响应时间。两者的不同主要体现在内存数据库是将数据保存在主存或者 RAM 中,而传统的数据库则是通过驱动磁盘来获取数据。
内存数据库相比传统数据库更不稳定,由于所有的数据都存储与管理在主存中,当计算机断电或 RAM 崩溃时,数据将会丢失。
内存数据库可以通过将每个操作存储在日志中或采取快照的方式在磁盘上持久化数据。
02
目标
我们的目标是用 Go 编写一