Rails сжимает данные перед сохранением в базу данных - PullRequest
2 голосов
/ 09 августа 2011

Мне нужно хранить большое количество данных в базе данных (MySQL).Я хотел бы сэкономить место на диске, сжимая текстовые данные перед сохранением их в базе данных.

Я знаю, что будет сжатие производительности для сжатия / распаковки данных.Но я собираюсь кэшировать распакованные данные на CDN.И в основном, данные не станут устаревшими в течение нескольких месяцев или даже лет.

Не могли бы вы дать мне несколько хороших методов сжатия / распаковки?Я также открыт для других альтернатив, кроме сжатия / распаковки данных.

Ответы [ 2 ]

3 голосов
/ 09 августа 2011

Если вам нужно чистое решение MySQL, вы всегда можете попробовать использовать тип хранения ARCHIVE для своей таблицы. Документация описывает его как вставной, без обновления типа движка, предназначенного специально для того, что вы описываете, скрывая вещи, которые не изменятся годами.

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

Ruby имеет Zlib::Deflate, который может сжимать и расширять данные по требованию. Вы можете написать свою собственную оболочку, похожую на JSON one , реализовав методы encode и decode в своем модуле.

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

0 голосов
/ 09 августа 2011

Если данные действительно так статичны, как вы говорите, сохраните их в виде сжатых XML-файлов.

Вы можете разархивировать их и очень легко снова сжать, как и при необходимости, и в Rails, генерирующем файл XMLочень просто, используя SomeModel.to_xml, вывод которого можно легко отправить в файл, поэтому его обслуживание также будет простым.Вы можете так же легко работать с этим наоборот, так что когда дело доходит до чтения данных, вы можете просто преобразовать данные обратно в модель (в Rails 3.x есть ActiveModel, которая была бы идеальной для этого сценария, так как данные не являютсяопираясь на базу данных, но вы все еще получаете ActiveRecord API и весь сок, который дает вам AR, означая, что ваши представления, контроллеры и т. д. работают с согласованным API и согласованным поведением.

У вас есть и другие варианты, такие какиспользуя ActiveResource, но я бы не подумал, что это необходимо. Не рекомендуется, если вы не хотите кэшировать данные так, как вы предлагаете (что, кстати, является отличным решением)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...