代码之家  ›  专栏  ›  技术社区  ›  Tim Post Samir J M Araujo

你知道一个支持cow事务的c字典吗?

  •  3
  • Tim Post Samir J M Araujo  · 技术社区  · 15 年前

    我正在寻找一个用c编写的键-值字典库,它支持理论上无限数量的廉价事务。

    我希望内存中有一个字典,其中有数百个线程启动事务,可能修改字典,结束(完成)事务,或可能中止事务。只有50%的时间这些线程会真正修改字典。

    我见过的大多数字典事务实现在事务启动时总是复制,而不是在写时复制。考虑到字典的预期大小(>1gb),我希望找到一些只有在事务处理期间实际发生更改时才会出现的东西。我也希望大多数主要的gnu/linux发行版都能打包一些东西。

    任何建议或链接都非常感谢。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community CDub    8 年前

    SQLite3 是事务性的,可以完全存在 in memory . 它不是 作为 在交易方面,一些人可能会喜欢便宜,但也不是所有的昂贵。快速mlock()/mlockall()防止数据库被调出,使用posix_madvise()的ymmv。这不是一个现成的解决方案,但并不太难适应。

    BDB 是另一种选择,甲骨文目前正在销售。

    sqlite3几乎完全符合我的需求。既然我赢得了 Tumbleweed badge 通过问这个问题,我至少可以回答它。

        2
  •  1
  •   Mahmoud Al-Qudsi    15 年前

    对于基本的字典需求来说,sqlite不是有点过分了吗?通常,如果不执行查询,则不需要数据库的开销。

    bdb绝对是很棒的,我已经打算将它融入到我的一些项目中一段时间了,而且听起来你肯定会从它的性能提升中受益。

    最简单的解决方案可能是创建一个包装类(即cowstring),它将实现写时复制行为,然后创建包装对象的stl::map或hash_map。这样,您就可以从容器逻辑中抽象出cow逻辑,这样您就不必编写自己的容器类和其中的巨大复杂性。