Boost flyweight для коротких струн

Я внедряю систему, которая хранит и манипулирует множеством повторяющихся коротких строк. Например, цена акций серии. У меня будет много повторяющихся записей о ценах на акции Microsoft:

<time1>,MSFT,60.01
<time2>,MSFT,60.02
<time3>,MSFT,60.00

Я думаю об использовании Boost::Flyweight чтобы оптимизировать выделение памяти, стоимость поиска / сравнения / копирования строк этих небольших повторяющихся имен тикеров (например, MSFT в данном случае).

Но дело в том, что эти строки довольно малы - обычно всего несколько байтов. Пока длинный тип составляет 8 байт уже в современных компьютерах. Стоит ли использовать Boost::Flyweight в этом случае?

Мое понимание Boost::Flyweight заключается в том, что внутренние строки являются целыми числами для повышения производительности. Но я думаю, что поиск / сравнение / копирование 8-байтовой строки не сильно отличается от работы с 8-байтовым типом данных. Так стоит ли переходить к Boost::Flyweight?

Моя главная цель - скорее оптимизация скорости, чем оптимизация памяти, если мне придется выбирать одну.

1 ответ

Решение

Flyweight очень универсальный и настраиваемый.

Я бы предложил использовать поддержку строк, выделенных из одного пула памяти фиксированного размера (например, std::vector<CharType>). Вам тогда нужно будет только вернуться std::string_views диапазон байтов в резервном хранилище.

Вы можете использовать FlyWeight для настройки подобных вещей, но мне нужно найти время для демонстрации.

В качестве альтернативы, вы можете "свернуть свое". У меня есть несколько примеров этого на Stackru:

Мой опыт работы с Flyweight варьируется ( https://stackru.com/search?tab=votes&q=user%3A85371%20flyweight, например, boost multi_index_container и slow operator ++). Кажется, что наивная реализация Flyweight редко бывает то, что вы хотите.

ОБНОВЛЕНИЕ Только что вспомнил эту связанную демонстрацию, которую я сделал, используя Perfect Hashing для символов тикера NASDAQ: возможно ли отобразить строку в int быстрее, чем при использовании hashmap?

Другие вопросы по тегам