Zip-уем данные на лету

September 2nd, 2008 Begemot Posted in Программирование

Встроенные удобства это приятно!:)

Пишу данные в базу, возникла мысль что архивирование может быть очень кстати, попробывал – действительно стало лучше. Арихивирование благодаря встроенным средствам wxWidgets делается легко и быстро. Просто пропускаем данные через wxZlibOutputStream который архивирует\распаковывает на лету.

void SavecbContentToStream(wxMemoryOutputStream &memout, bool zlib/*=false*/) const
{
scoped_ptr dos;
scoped_ptr zlibstr;

if(zlib)
{
zlibstr.reset(new wxZlibOutputStream(memout, -1, wxZLIB_GZIP));
dos.reset(new wxDataOutputStream (*zlibstr));
}
else
dos.reset(new wxDataOutputStream (memout));

// write some data …
*dos <<(wxUint16)1 <<(wxUint16)cbContent.size(); // ... } [/sourcecode] Функция записывает данные в переданный буфер с опциональным архивированием их.


Если пост полезен для вас вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.

Related:

6 Responses to “Zip-уем данные на лету”

  1. Такой подход будет работать на небольшой базе и если блобы тоже небольшие по размерам. А если данных много то будет тормозить. К тому же полнотекстовый поиск отпадает в таком случае.

    ЗЫ: чото с кодом ты намудрил, там какие-то теги закрывающие появились и имена классов чото в ловеркейсе.

  2. Ну да, я и не претендую на то что открыл универсально решение:) для моей конкретно задачи – подходит очень хорошо. Причем никакой связи с размером базы данных нету (опять же у меня). Поиск по этим полям не планируется:)

    Поинт был в том что в wxWidgets есть втроеное зипование, и что пользоватся легко и просто и это ++.

    Да траблы есть или у меня руки кривые, или это ЛайвВрайтер, или плагин…короче запарился я вставлять код нормально, расскажи как ты это делаешь?

  3. ну как, беру в режим HTML и прописую [сорскоде][/сорскоде] а потом внутрь копипастю код из студии

  4. А можно узнать, зачем вообще архивировать базу данных? Чтобы места меньше занимала, или есть какие-то другие тайные умыслы?

  5. Я архивирую не базу, а только одно поле в ней. Основная причина, экономия места.
    Еще есть версия, что прочесть с диска сжатые данные и разархивировать их быстрее чем прочесть несжатые, незнаю правда насколько это правда… если и правда, то наверное только на больших массивах данных, а не как у меня. Значит остается только размер.

  6. Спасибо за разъяснение, Николай.