Python 编写键值存储

Python 编写键值存储,python,key-value-store,Python,Key Value Store,我希望编写一个键/值存储(可能是python)主要是为了体验,因为我认为这是一个非常有用的产品。我有几个问题。通常,键/值对通常如何存储在内存和磁盘上?如何将存储在磁盘上的东西加载回内存?键/值存储是否同时将所有键/值对保存在内存中?还是从磁盘读取 我试图找到一些关于这个主题的文献,但没走多远,希望这里的人能帮助我。如果您正在用Python进行键/值存储以供学习,那么从模块开始可能是最简单的。将任意Python数据流写入持久性存储并重新读取是一种快速方便的方法。您可以查看“”以了解它是如何工作的

我希望编写一个键/值存储(可能是python)主要是为了体验,因为我认为这是一个非常有用的产品。我有几个问题。通常,键/值对通常如何存储在内存和磁盘上?如何将存储在磁盘上的东西加载回内存?键/值存储是否同时将所有键/值对保存在内存中?还是从磁盘读取


我试图找到一些关于这个主题的文献,但没走多远,希望这里的人能帮助我。

如果您正在用Python进行键/值存储以供学习,那么从模块开始可能是最简单的。将任意Python数据流写入持久性存储并重新读取是一种快速方便的方法。

您可以查看“”以了解它是如何工作的,它是一个键/值数据库,因此您可以直接使用它,或者由于它是开源的,所以可以查看它如何处理大多数引用页面的持久性、事务和分页


下面是它的python绑定

Amazon发布了一个关于Dynamo的版本—一个高可用的键值存储系统。它主要涉及扩展问题(如何创建在大量计算机上运行的键/值存储),但也涉及一些基础知识,通常值得一读。

这一切都取决于您想要深入研究的复杂程度。从一个简单的Python
dict
开始,以多种可能的方式(其中pickle可能是最简单的)序列化到一个文件,您可以实现一个完整的数据库系统

查找
redis
——它是一个用C编写的键/值存储,作为服务器“DB”运行。它有一些很好的文档和易于阅读的代码,因此您可以借鉴Python实现的思想

更进一步,你可以阅读B-树

对于您的具体问题:超过一定的数据库大小,您永远无法将其全部保存在内存中,因此您需要一些健壮的方式从磁盘加载数据。还考虑商店是单客户机还是多客户机。这对它的实现有着严重的影响。

看看Python模块,它提供了一个持久的字典。它基本上将pickle存储在数据库中,通常是dmb或BSDDB。查看
shelve
的工作原理将为您提供一些见解,源代码随python发行版提供


另一个需要关注的产品是。这是一个对象数据库,它使用自己的B树实现持久化到磁盘。

首先,我知道这个问题很老


我是aodbm()的创建者,它是一个键值存储库。aodbm使用不可变的B+树来存储数据。因此,无论何时进行修改,都会在文件末尾追加一棵新树。这听起来可能是一种可怕的空间浪费,但鉴于前面树中的绝大多数节点都被引用,开销实际上相当低。在任何给定的时间,整个树的很少部分保存在内存中(最多O(logn))。

我建议看一下talk(),它很好地概述了构建额外内存数据库(例如键值存储)的现代方法,并对此进行了解释


如果您的键值存储以所有数据都适合主存的用例为目标,那么数据存储体系结构可能会简单得多,并且使用该内存时根本不需要考虑磁盘到内存的通信和同步,因为这会成为操作系统的一个问题。

如果我可以对此进行两次升级,我会这样做。这就是我想要的答案。谢谢。这个答案是我来这里写的。BDB在任何地方都被使用,并实现了大量存储问题的解决方案。不过,我认为他在阅读代码时不会有太多乐趣。请注意,这里有一个有趣的纯Python NoSQL