Транзакционные, в памяти, объект / ключ / библиотека хранения значений?

У меня есть приложение C ++, чей набор данных в памяти состоит из набора объектов, к каждому из которых прикреплен набор ключей / значений. Объекты и ключи обозначаются идентификатором int, а значения всегда являются экземплярами одного класса. Идентификаторы ключей уникальны в объекте, идентификаторы объектов уникальны во вселенной.

Это почти map , value> , за исключением того, что у меня есть дополнительное требование, чтобы я мог перечислить ключи, прикрепленные к конкретный объект. И все это должно быть транзакционным, чтобы я мог откатить изменения, если что-то пойдет не так.

Все это кажется мне полностью стандартной проблемой, для которой я мог бы получить готовый код, но я ' я не смог ничего найти. Может ли кто-нибудь:

(a) сказать мне, как на самом деле называется эта проблема, чтобы я знал, что искать;

(b) предложить любой код, на который мне следует взглянуть.

Обратите внимание, что я хочу, чтобы это было хранилище данных только в памяти, поэтому подходы NoSQL, такие как Berkeley DB, не подходят --- я не хочу продолжать чтение и запись объектов значений (которые являются умеренно сложными).

Пока что я ' Мы нашли либо простые подходы, которые не выполняют транзакции (например, boost_multi_index, или даже просто вложенные карты STL), либо сложные подходы с использованием постоянного хранилища, но ничего между ними. Я мог бы реализовать свой собственный уровень транзакций поверх базового хранилища, но, честно говоря, я бы не стал.

Что мне не хватает?

Изменить : ну, похоже, никто не мог предложить один; поэтому я написал свой собственный. Это на удивление неудобно, но на самом деле не очень много кода. Сейчас это просто класс-шаблон, использующий вложенные карты для хранения, но я рассматриваю возможность перехода на использование boost :: multi_index_container для простоты. Он не отшлифован и, вероятно, изобилует ошибками, но если кто-то думает, что может его использовать, дайте мне знать.

Подробнее Edit : для справки, оказывается, что имя в Google для того, что я ' m ищет базу данных объектов / атрибутов / значений (EAV) .

5
задан David Given 14 March 2011 в 19:06
поделиться