У меня есть приложение C ++, чей набор данных в памяти состоит из набора объектов, к каждому из которых прикреплен набор ключ / значение.На объекты и ключи ссылается int id, а значения всегда являются экземплярами одного класса.Идентификаторы ключей уникальны для объекта, идентификаторы объектов уникальны для юниверса.
Это почти a map<pair<int, int>, value>
, за исключением того, что у меня есть дополнительное требование, которое я должен иметь возможность перечислятьключи, прикрепленные к определенному объекту.И все это должно быть транзакционным, поэтому я могу откатить изменения, если что-то пойдет не так.
Все это кажется мне совершенно стандартной проблемой, для которой я должен быть в состоянии получить готовый код,но я не смог ничего найти.Может ли кто-нибудь:
(а) сказать мне, как на самом деле называется эта проблема, поэтому я знаю, что искать;
(б) предложить любой код, на который я должен обратить внимание.
Обратите внимание, что я хочу, чтобы это было только хранилище данных в памяти, поэтому подходы NoSQL, такие как Berkeley DB, не подходят - я не хочу продолжать чтение и запись объектов-значений (которые являются довольно сложными).
До сих пор я нашел либо простые подходы, которые не выполняют транзакции (например, boost_multi_index или даже просто вложенные карты STL), либо сложные подходы, использующие постоянное хранилище, но ничего промежуточного.Я мог бы реализовать свой собственный транзакционный слой поверх базового хранилища, но, честно говоря, я бы предпочел этого не делать.
Чего мне не хватает?
Редактировать : хорошокажется, никто не смог его предложить;так что я написал свой.Это на удивление неудобно, но на самом деле не очень много кода.Прямо сейчас это просто шаблонный класс, использующий вложенные карты для хранения, но я рассматриваю переход на использование boost :: multi_index_container вместо этого для простоты.Он не отшлифован и, вероятно, изобилует ошибками, но если кто-то думает, что он может его использовать, дайте мне знать.
Подробнее Редактировать : для справки выясняется, что Googleable имя для того, чтоm ищет базу данных сущностей / атрибутов / значений (EAV) .