Есть ли прозрачная дедупликация для больших двоичных данных в PostgreSQL?

У нас есть приложение, которое хранит большие двоичные данные в виде больших объектов в базе данных PostgreSQL, и теперь у нас есть сценарий использования, при котором мы работаем с этими данными таким образом, что мы знаем, что части этих уже сохраненных данных будут сохранены еще раз лишь незначительно другая комбинация. На самом деле мы собираемся разделить некоторые файлы и объединить их по-разному, но хотим сохранить исходные файлы в дополнение к новым объединенным.

Это звучит как хороший пример использования дедупликации. Знаете ли вы что-нибудь, что работает в Postgres напрямую и прозрачно, так что нам не нужно заново изобретать колесо? Что-то вроде слоя хранения или плагина для добавления в Postgres, чтобы он самостоятельно обрабатывал дедупликацию, по крайней мере, для всей базы данных? Или, может быть, какая-то библиотека, которая работает как оболочка для большой функции объектов Postgres, которую может использовать наше приложение, а библиотека-обертка выполняет всю часть дублирования, может быть, добавляет несколько таблиц для бухгалтерии и всего этого?

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

Спасибо за любые подсказки!

1 ответ

Решение

Нет, нет (по состоянию на 9.4, во всяком случае).

PostgreSQL сжимает каждый отдельный элемент, но не выполняет никакого перекрестного сжатия или дедупликации.

Механизм TOAST означает, что PostgreSQL должен иметь возможность дедуплицировать значения в типах TOASTable с некоторыми усилиями, это просто вопрос его реализации.

Патчи приветствуются;-)

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