gpt4 book ai didi

c++ - 事务性、内存中、对象/键/值存储库?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:41 28 4
gpt4 key购买 nike

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

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

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

(a) 告诉我这个问题实际上叫什么,所以我知道要寻找什么;

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

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

到目前为止,我已经找到了不执行事务的简单方法(如 boost_multi_index,甚至只是嵌套的 STL 映射),或者使用持久存储的复杂方法,但没有介于两者之间的方法。我可以在基本存储之上实现我自己的事务层,但老实说,我宁愿不这样做。

我错过了什么?

编辑:好吧,似乎没有人能够提出建议;所以我写了我自己的。这是令人惊讶的繁琐但实际上不是很多代码。现在它只是一个使用嵌套映射进行存储的模板类,但为了简单起见,我正在考虑改为使用 boost::multi_index_container。它没有完善,可能充满了错误,但如果有人认为他们可以使用它,请告诉我。

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

最佳答案

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

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

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

关于c++ - 事务性、内存中、对象/键/值存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116763/

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