用 Python 和 Pygame 写游戏 - 从入门到精通

Pygame是一个利用SDL库的写就的游戏库,SDL呢,全名Simple DirectMedia Layer,是一位叫做 ...

↑我也要推荐

存在可靠且高效的 Linux K/V 数据库 ?

发布时间:2013-11-05 23:05:32, 关注:+11118, 赞美:+7, 不爽:+7

原始出处: HX

问题描述

我需要一个快速,可靠且占内存少的 Linux K/V 数据库。Key 长大约为 128 bytes,value 最长 128K 或 256K 。理想中的数据库内存占用不应该大于1MB。数据库大约有 20G ,但是每次只有随机小部分读取。或者,我可以从数据库中移出部分二进制数据,从而将数据库尺寸降到 2G。数据库在系统挂掉时不能丢数据。可能是百倍读写比(读100,写1)。如果能够使用块存储而不是文件系统就更好了。不需要客户端服务端,仅仅只需要一个类库。最好有 Python 接口。

我考虑过哪些方案呢?

  • Tokyo Cabinet Python 接口选择 pytc,参见 pytc 示例代码,支持哈希和 B+trees,事务,桶尺寸大小在创建时固定;独占写锁(写需要关闭,才能让其他用户操作);大量小数据写会多次重新打开文件导致很慢;Tyrant 服务可以帮助大量小数据写;Tokyo Cabinet, Tokyo Tyrant 和 BDB 性能评测
  • VSDB 即便在 NFS 也很安全,无锁;栅栏呢?;更新很慢,但不像 cdb 般的慢;最后一个版本为2003
  • BerkeleyDB 提供灾难恢复;事务;bsddb Python 模块
  • Samba's TDB 提供事务支持和Python接口,用户很有经验,有时 mmap() 整个文件,repack操作有时会使文件翻倍,有些操作会在数据库文件大于2G(甚至是在 64位操作系统)之后莫名其妙失败,有集群实现(CTDB)。大量修改后,文件增长很大;出现大量hash竞争时会导致速度下降严重;没有内建方法重建数据文件;每个单独的hash桶拥有一个锁,并行处理很快
  • aodbm 日志式追加数据处理,防止系统挂掉;提供Python类库
  • hamsterdb 提供Python类库
  • C-tree 成熟,功能丰富的高性能商业解决方案,提供一个免费的简化版本
  • TDB
  • bitcask 日志式结构,Erlang实现
  • 其他 DBM 实现(诸如 GDBM,NDBM,QDBM,Perl‘s SDBM or Ruby’s;他们可能没有灾难恢复)

我不会使用这些:

  • MemcacheDB 客户端、服务端,使用 BerkeleyDB 作为后端
  • cdb 每次写都需要重新生成整个数据库
  • apbcdb 同上
  • Redis 将整个数据库放到内存中
  • SQLite 如果没有周期性压缩将会变得非常慢,比如 Firefox 3.0 的自动完成功能。即便在 SQLite 3.1 版本之后拥有 auto_vacumming (同样需要周期性整理)。小数据写事务非常慢;一个繁忙的进程执行很多事务,其他进程将拿不到锁
  • MongoDB 过于重量级,用内部结构对待值
  • Firebird 基于SQL RDBMS,过于重量级

参考链接:

Noah 回答

我幸运的采用 Tokyo Cabinet/pytc 方案。它的读和写都很快(在我的实现中,甚至比 shelve 模块,anydbm 模块还快)。对于我来说,他的Python接口文档有些简陋,还好有充足的示例代码,让你知道如何解决问题。此外 Tokyo Cabinet 易于安装,不需要服务端,持续提供支持。你可以通过只读模式打开文件,以提供并发访问,或者读、写模式以阻止其他进程访问。

整个夏天我看到了很多观点,建议我尝试最适合自己的方法。如果你能在这里找到属于你的最好方法那就再好不过了,但是每个人都在寻找不同的特性,这会导致完全不一样的结局,选择你最熟悉的。

原文: http://stackoverflow.com/questions/1690605/reliable-and-efficient-key-value-database-for-linux

如果你觉得本站对你有帮助,欢迎向本站赞助 :P

使用支付宝捐赠

Copyright© Python4cn(news, jobs) simple-is-better.com, 技术驱动:powered by web.py 空间主机:Webfaction

版权申明:文章转载已注明出处,如有疑问请来信咨询。本站为 python 语言推广公益网站,与 python 官方没有任何关系。

联系/投搞/留言: en.simple.is.better@gmail.com 向本站捐赠