Perkeep — это открытая система для хранения, индексирования и синхронизации данных, представляющая собой набор форматов, протоколов и программного обеспечения для построения контент-адресуемого хранилища. Проект развивался как преемник Camlistore и ориентирован на долговременное сохранение разнообразного цифрового контента: файлов, медиа, метаданных и их связей. Perkeep реализует идеи разделения содержимого и метаданных, хранения объектов по их криптографическим хэшам и оформления слоёв индексирования и поиска поверх базового хранилища объектов.
Архитектура Perkeep основана на моделях объектов и индексах: данные представляются в виде неизменяемых блоков (объектов), каждый из которых имеет уникальный адрес, зависящий от содержимого. Над объектами строятся индексы и так называемые «camli-» сущности, которые обеспечивают быстрый поиск, организацию коллекций и отображение семантических связей. Система поддерживает распределённое и локальное хранение, позволяет реплицировать данные между узлами, создавать резервные копии и синхронизировать изменения. Perkeep включает серверные компоненты для управления хранилищем и клиенты для загрузки, извлечения и обслуживания содержимого.
- Контент-адресуемость: объекты хранятся и идентифицируются по криптографическому хэшу содержимого, что обеспечивает дедупликацию и целостность.
- Разделение данных и метаданных: поддержка независимого хранения метаданных, версионирования и связных описаний объектов.
- Индексация и поиск: механизмы индексирования для быстрого поиска по атрибутам, типам и содержимому, включая метаданные медиафайлов.
- Расширяемость: модульная архитектура, допускающая добавление новых форматов, индексов и бекендов хранения.
- Синхронизация и репликация: инструменты для репликации данных между серверами и клиентскими копиями, поддержка резервного копирования.
- Поддержка медиа и файлов: хранение изображений, видео, документов и их производных (превью, метаданные) с возможностью извлечения и представления.
- API и протоколы: программный интерфейс для взаимодействия с хранилищем, загрузки объектов и управления индексами.
- Безопасность и целостность: использование криптографических хэшей для проверки неизменности объектов и управления ссылками между ними.
- Локальное и удалённое хранилище: поддержка различных бекендов — от локальной файловой системы до удалённых сервисов хранения.
- Сообщество и открытый исходный код: проект развивается в рамках открытого кода и допускает внешние вклады и адаптацию под специфичные сценарии.