Хорошо, в качестве предисловия мне нужно кэшировать относительно небольшое подмножество редко изменяемых данных, чтобы не запрашивать базу данных так часто из соображений производительности. Эти данные широко используются только для чтения, поскольку на них часто ссылается гораздо больший набор данных в других таблицах.
Я написал класс, который будет иметь возможность хранить в основном все две таблицы. рассматриваемая в памяти при прослушивании изменений фиксации в сочетании с поточно-безопасным механизмом обратного вызова для обновления кешированных объектов.
Моя текущая реализация имеет два std :: vectors
по одному для элементов каждой таблицы. Класс обеспечивает как доступ ко всем векторам, так и удобные методы для поиска определенного элемента данных таблицы через std :: find
, std :: find_if
и т. Д.
Кто-нибудь знает, используется ли std :: list
, std :: set
или std :: map
вместо std :: vector
для поиска предпочтительнее? В большинстве случаев это то, что будет запрашиваться у этих контейнеров после однократного заполнения из базы данных при создании нового соединения.
Я также открыт для использования функций C ++ 0x, поддерживаемых VS2010 или Boost.