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