Кеш-библиотеки в C++

Вопрос или проблема

Существуют ли популярные библиотеки кэша на C++ с поддержкой постоянного хранения, аналогичные Embedded Ehcache? Ниже приведены требования к нашим библиотекам кэша.

  1. Несколько значений в одной записи. Поэтому необходима поддержка сложных коллекций.
  2. Хранение в памяти с файловой поддержкой постоянного хранения (предложения по базам данных будут полезны, но предпочтительнее файловый вариант).
  3. Встроенная библиотека кэша.
  4. Конкурентный доступ к большому набору данных для чтения, записи и обновления, который будет обрабатываться этой библиотекой.
  5. Активное сообщество или ясная документация по API будут полезны.

При поиске библиотек с открытым исходным кодом большинство из них не имеют поддержки постоянного хранения или не встроены. Например, Cachelib сохраняет данные только при завершении работы. Но нам нужно, чтобы данные сохранялись в процессе кэширования, поскольку имеется большой набор данных, который должен быть сохранен при достижении определенного количества, а затем загружен в память по мере необходимости. FasterKV является хранилищем ключ-значение, и документация по C++ API также не очень хороша.

Ответ или решение

В C++ существует несколько библиотек для кэширования, которые поддерживают работу с данными в памяти и обеспечивают сохранение состояния на постоянном носителе, как это делает Embedded Ehcache. Ниже приведены некоторые из наиболее подходящих библиотек, соответствующих указанным вами критериям.

1. Apache Ignite

Apache Ignite — это мощная распределенная вычислительная платформа, которая также предлагает возможности кэширования. Она поддерживает сложные коллекции и обеспечивает как in-memory хранилище, так и долговременное хранение данных. Ignite может работать в embedded режиме и поддерживает многофункциональную работу с данными.

Преимущества:

  • Поддержка сложных объектов и коллекций.
  • Возможность конфигурации с сохранением на файловую систему.
  • Хорошая многопоточность, что позволяет обрабатывать большое количество ресурсов.
  • Активное сообщество и обширная документация.

2. Redis с использованием Hiredis

Хотя Redis чаще всего используется в качестве отдельного сервиса, вы можете встроить его в ваше приложение с помощью клиентской библиотеки Hiredis. Redis предлагает поддержку сложных структур данных, как хэши и списки, а также легкую интеграцию с многопоточными приложениями.

Преимущества:

  • Поддержка сложных коллекций данных.
  • Быстрая работа с данными в памяти с возможностью создания постоянных снимков.
  • Хорошее API и активное сообщество.

3. Memcached с Persistent Storage

Memcached изначально не поддерживает долговременное хранение, но существуют некоторые версии и патчи, которые добавляют такую поддержку. Например, существует расширение Memcached для использования с BDB (Berkeley DB) или другого аналогичного хранилища.

Преимущества:

  • Высокая скорость работы и простота.
  • Поддержка внешних движков для долговременного хранения.
  • Доступная документация и большое сообщество.

4. DuckDB

Хотя DuckDB — это относительно новая библиотека, она ориентирована на работу с большими наборами данных и может использоваться для кэширования временных наборов данных с возможностью сохранения. DuckDB имеет поддержку SQL и может улучшить интеграцию с существующими системами.

Преимущества:

  • Поддержка сложных структур данных через SQL.
  • Встроенная поддержка хранения на диске.
  • Хорошо документированная C++ API.

Заключение

При выборе библиотеки для кэширования следует учитывать множество факторов, включая требования к производительности, специфику задач, которые необходимо решить, а также поддержку со стороны сообщества и документации. Apache Ignite и Redis могут стать отличными вариантами для большинства задач, связанных с кэшированием с долговременным хранением данных, а также дополнительная интеграция с другими библиотеками, такими как Hiredis или DuckDB, может усилить функциональность вашего приложения.

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

Оцените материал
Добавить комментарий

Капча загружается...