事务性,内存中,对象/键/值存储库?

Dav*_*ven 5 c++ database key-value

我有一个C++应用程序,其内存数据集由一组对象组成,每个对象都附加一个键/值集.对象和键由int id引用,值始终是单个类的实例.关键ID在对象中是唯一的,对象ID在Universe中是唯一的.

几乎是一个,map<pair<int, int>, value>除了我有额外的要求,我需要能够枚举附加到特定对象的键.这一切都需要是事务性的,所以如果出现问题我可以回滚更改.

这一切都让我觉得这是一个完全标准的问题,我应该能够获得现成的代码,但我一直无法找到任何东西.谁能:

(a)告诉我这个问题究竟叫什么,所以我知道要找什么;

(b)建议我应该看的任何代码.

请注意,我希望这只是一个内存中的数据存储,因此像Berkeley DB这样的NoSQL方法并不合适 - 我不想继续读取和写入值对象(它们是中等复杂的).

到目前为止,我发现了不做事务的简单方法(如boost_multi_index,甚至只是嵌套的STL映射),或使用持久存储的复杂方法,但两者之间没有任何内容.我可以在基本存储上实现自己的事务层,但说实话,我宁愿不这样做.

我错过了什么?

编辑:好吧,似乎没有人能够建议一个; 所以我写了自己的.这是令人惊讶的,但实际上并不是很多代码.现在它只是一个使用嵌套映射进行存储的模板类,但我正在考虑改为使用boost :: multi_index_container来简化.它没有抛光,可能充满了虫子,但如果有人认为他们可以使用它,请告诉我.

更多编辑:作为参考,事实证明,我正在寻找的Googleable名称是实体/属性/值数据库(EAV).

dex*_*ack 4

你真正想要的是一个异常安全的容器。

阅读这些: http://www.boost.org/community/exception_safety.html http://lmzr.perso.neuf.fr/attic/Exception_Safe_Generic_Containers.pdf http://www.drdobbs.com/184401771;jsessionid=TTP1SXYYVJZPLQE1GHPCKH4ATMY32JVN

您的问题很快就会减少到确保存储对象的构造函数、复制构造函数、赋值运算符等中的特定异常保证。如果这种情况没有发生,那么您可能没有足够仔细地设计对象类型来分离关注点。