2010-03-16 72 views
3

我正在寻找一个用C编写的关键字 - >值字典库,它支持理论上无限数量的廉价交易。你知道一个支持COW事务的C字典吗?

我想在内存中有一个字典,有数百个线程开始事务,可能会修改字典,结束(完成)事务或可能中止事务。这些线程只有50%的时间会实际修改字典。

我看过的大多数字典事务实现总是复制,而不是在写入时复制,无论事务何时开始。鉴于字典的预期大小(> 1GB),我希望能够在交易过程中发生事实变化时才能找到一些COW。我也希望大多数主要的GNU/Linux发行版都包含这些东西。

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

回答

1

SQLite3是事务性的,可以完全存在in memory。它不是便宜,因为一些人可能会喜欢交易,但不是所有昂贵的。一个快速的mlock()/ mlockall()可以防止数据库被分页,YMMV和posix_madvise()。它不是开箱即用的解决方案,但不太难以适应。

BDB是Oracle目前销售的另一种选择。

SQLite3完全符合我的需求(几乎)。鉴于我通过询问这个问题赢得了Tumbleweed badge,我能做的至少是回答它。

1

对于基本的字典需求,SQLite是否过分矫枉过正?通常如果你不打算执行查询,数据库的开销是不必要的。我很想把它融入到我的一些项目中一段时间​​,肯定听起来你可以从它的性能提升中受益。

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

+0

它的交易,让你,尤其是数百线程使用普通的快速互斥体来控制它们。我花了相当多的时间尝试一些东西。 SQLite接近我自己的堆栈配置文件(就地块说,无论如何),并提供更多的灵活性。 – 2010-03-24 12:23:26

相关问题