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