有没有类似于SQLite的NoSQL平面文件数据库?
简短的问题: 有没有像sqlite那样的nosql平面文件数据库?
解释: 平面文件数据库可以在不同的进程中打开进行读取,同时保持一个进程来写入。我觉得如果不需要严格的一致性,这种方式非常适合用作读取缓存。比如说,写入文件或内存块的时间是1到2秒,之后读取者就能获取到更新的数据。
所以我几乎选择使用sqlite作为我的python服务器的读取缓存。但还有一个问题。我不想在另一个地方重新写sql语句,也不想在sqlite中构建一份和我在PostgreSql中一样的数据表的副本,PostgreSql是我用作后端数据库的。
那么还有其他选择吗?谢谢!
3 个回答
这是一件简单但可行的事情。如果你在找一种可以存储键值对数据的结构,可以使用“腌制字典”(pickled dictionary)。如果需要更好的性能,可以使用cPickle。
BerkeleyDB 是一个广泛使用的嵌入式数据库,历史悠久(它最初源自 BSD 中的数据库库,所以叫这个名字),在很多使用场景下表现非常好(尤其是缓存这个功能),但它也有一些明显的限制。
如果你想在 Python 中使用它,建议你使用 外部维护的 pybsddb/bsddb3
库,而不是 Python 2.x 中包含的 已经不再推荐的 bsddb
库(在 3.x 中也没有了)。
现在它归 Oracle 所有,但可以在开源许可证下使用。要特别注意许可证条款——当前版本是 GPL 相关的(与 GPL 兼容),所以确保这与你的计划是兼容的。
更多信息:
也许可以用 shelve
?它其实就是一个键值存储,你可以在里面存放 Python 对象。你可以查看这个链接了解更多:http://docs.python.org/library/shelve.html
或者你也可以直接使用文件系统呢?