编写键值存储

13 投票
7 回答
7036 浏览
提问于 2025-04-15 16:00

我想写一个键值存储(可能用Python),主要是为了积累经验,因为我觉得这是一个非常有用的产品。我有几个问题。一般来说,键值对是如何在内存和磁盘中存储的?怎么把存储在磁盘上的东西加载回内存?键值存储会一次性把所有的键值对都放在内存里吗?还是说是从磁盘中读取的?

我试着找一些相关的资料,但没找到太多,希望这里有人能帮我解答。

7 个回答

3

如果你想在Python中做一个键值存储来学习,最简单的办法就是使用pickle模块。这个模块可以快速方便地把任意的Python数据写入一个持久的存储中,然后再把它读回来。

4

你可以看看Python的shelve模块,它提供了一种持久化的字典。简单来说,它把数据存储在一个数据库里,通常是dmb或BSDDB格式。了解一下shelve是怎么工作的,会让你对这个过程有更深的理解,而且它的源代码也包含在你的Python安装包里。

另一个值得关注的产品是Durus。这是一个对象数据库,它使用自己实现的B树结构来将数据持久化存储到硬盘上。

24

这完全取决于你想深入了解的复杂程度。如果你从一个简单的 Python dict 开始,把它以各种方式保存到文件中(其中使用 pickle 可能是最简单的),你可以一直深入到实现一个完整的数据库系统。

你可以了解一下 redis —— 这是一个用 C 语言写的键值存储系统,像一个服务器“数据库”一样运行。它有很好的文档和易于理解的代码,所以你可以从中借鉴一些想法来实现你的 Python 版本。

如果想更深入,可以看看 B 树的相关内容。

关于你具体的问题:当数据库的大小超过某个限制时,你无法把所有数据都放在内存里,所以你需要一种可靠的方法从硬盘加载数据。此外,还要考虑这个存储是单客户端还是多客户端,这对实现方式有很大的影响。

撰写回答