gpt4 book ai didi

python - 可靠高效的 Linux 键值数据库?

转载 作者:IT老高 更新时间:2023-10-28 21:40:39 27 4
gpt4 key购买 nike

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

7年前关闭。




Improve this question




我需要一个适用于 Linux 的快速、可靠且节省内存的键值数据库。我的key大约是128字节,最大值大小可以是128K或者256K。数据库子系统不应使用超过大约 1 MB 的 RAM。数据库总大小为 20G (!),但一次只访问数据的一小部分随机部分。如有必要,我可以将一些数据 blob 从数据库中移出(到常规文件),这样大小会降低到最大 2 GB。数据库必须能够在系统崩溃时幸免于难,而不会丢失最近未修改的数据。我的读取次数将是写入次数的 100 倍左右。如果它可以使用块设备(没有文件系统)作为存储,那就更好了。我不需要客户端 - 服务器功能,只需要一个库。我需要 Python 绑定(bind)(但如果它们不可用,我可以实现它们)。

我应该考虑哪些解决方案,您推荐哪种解决方案?

我知道的候选人可以工作:

  • Tokyo Cabinet (Python 绑定(bind)是 pytc ,另见 pytc example code ,支持哈希和 B+树、事务日志文件等,bucket 数组的大小在数据库创建时是固定的;作者必须关闭文件才能给其他人一个机会;为每个文件重新打开文件的大量小写入非常慢;Tyrant 服务器可以帮助处理大量小写入;speed comparison between Tokyo Cabinet, Tokyo Tyrant and Berkeley DB )
  • VSDB (即使在 NFS 上也是安全的,没有锁定;屏障呢?;更新很慢,但不像在 cdb 中那么慢;2003 年的最后一个版本)
  • BerkeleyDB (提供崩溃恢复;提供事务;bsddb Python 模块提供绑定(bind))
  • Samba's TDB (使用事务和 Python 绑定(bind),一些用户 experienced corruption,有时 mmap() 是整个文件,repack 操作有时会使文件大小加倍,如果数据库大于 2G(即使在 64 位系统上),也会产生神秘的失败),集群实现 ( CTDB ) 也可用;文件在大量修改后变得太大;在大量散列争用后文件变得太慢;没有重建文件的内置方法;通过锁定单个散列桶实现非常快速的并行更新)
  • aodbm (仅附加,因此在系统崩溃时幸免于难,使用 Python 绑定(bind))
  • hamsterdb (使用 Python 绑定(bind))
  • C-tree (成熟的、多功能的高性能商业解决方案,有功能减少的免费版)
  • TDB (从 2001 年开始)
  • bitcask (日志结构,用 Erlang 编写)
  • 各种其他 DBM 实现(例如 GDBM、NDBM、QDBM、Perl 的 SDBM 或 Ruby;可能它们没有适当的崩溃恢复)

  • 我不会使用这些:
  • MemcacheDB (客户端-服务器,使用 BereleleyDB 作为后端)
  • cdb (需要在每次写入时重新生成整个数据库)
  • http://www.wildsparx.com/apbcdb/ (同上)
  • Redis (将整个数据库保存在内存中)
  • SQLite (如果不定期清空它会变得非常慢,请参阅 Firefox 3.0 中位置栏中的自动完成,即使 3.1 及更高版本的 sqlite 允许 auto_vacuum ing;注意:小的写入事务可能会非常慢;注意:如果忙进程正在做很多事务,其他进程饿死了,他们永远拿不到锁)
  • MongoDB (太重了,把值当成有内部结构的对象)
  • Firebird (基于SQL的RDBMS,太重了)

  • 仅供引用, recent article about key--value databases在 Linux 杂志上。

    仅供引用, older software list

    仅供引用, speed comparison of MemcacheDB, Redis and Tokyo Cabinet Tyrant

    StackOverflow 上的相关问题:
  • Key Value Database For Windows?
  • Is there a business proven cloud store / Key=>Value Database? (Open Source)
  • 最佳答案

    我在 Tokyo Cabinet /pytc 解决方案上很幸运。它非常快(比在我的实现中使用 anydbm 使用搁置模块快一点),无论是读取还是写入(尽管我也做更多的阅读)。对我来说,问题是关于 python 绑定(bind)的简陋文档,但有足够的示例代码来弄清楚如何做你需要做的事情。此外,东京机柜很容易安装(就像 python 绑定(bind)一样),不需要服务器(正如你提到的)并且似乎得到了积极支持(稳定但不再处于积极开发状态)。您可以以只读模式打开文件,允许并发访问,或以读/写模式打开文件,防止其他进程访问数据库。

    整个夏天我都在研究各种选择,当时我得到的建议是:尝试不同的选择,看看哪种最适合你。如果只有一个“最佳”选项就好了,但每个人都在寻找略有不同的功能,并愿意做出不同的权衡。你最清楚。

    (也就是说,如果您分享最终对您最有效的方法,以及为什么您选择该解决方案而不是其他解决方案,那么这对其他人会很有用!)

    关于python - 可靠高效的 Linux 键值数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1690605/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com