Zip-уем данные на лету
September 2nd, 2008 Begemot Posted in Программирование
Встроенные удобства это приятно!:)
Пишу данные в базу, возникла мысль что архивирование может быть очень кстати, попробывал – действительно стало лучше. Арихивирование благодаря встроенным средствам wxWidgets делается легко и быстро. Просто пропускаем данные через wxZlibOutputStream который архивирует\распаковывает на лету.
[sourcecode language=”cpp”]
void SavecbContentToStream(wxMemoryOutputStream &memout, bool zlib/*=false*/) const
{
scoped_ptr
scoped_ptr
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]
Функция записывает данные в переданный буфер с опциональным архивированием их.
September 2nd, 2008 at 2:51 pm
Такой подход будет работать на небольшой базе и если блобы тоже небольшие по размерам. А если данных много то будет тормозить. К тому же полнотекстовый поиск отпадает в таком случае.
ЗЫ: чото с кодом ты намудрил, там какие-то теги закрывающие появились и имена классов чото в ловеркейсе.
September 2nd, 2008 at 3:26 pm
Ну да, я и не претендую на то что открыл универсально решение:) для моей конкретно задачи – подходит очень хорошо. Причем никакой связи с размером базы данных нету (опять же у меня). Поиск по этим полям не планируется:)
Поинт был в том что в wxWidgets есть втроеное зипование, и что пользоватся легко и просто и это ++.
Да траблы есть или у меня руки кривые, или это ЛайвВрайтер, или плагин…короче запарился я вставлять код нормально, расскажи как ты это делаешь?
September 2nd, 2008 at 4:16 pm
ну как, беру в режим HTML и прописую [сорскоде][/сорскоде] а потом внутрь копипастю код из студии
September 9th, 2008 at 1:50 pm
А можно узнать, зачем вообще архивировать базу данных? Чтобы места меньше занимала, или есть какие-то другие тайные умыслы?
September 9th, 2008 at 3:59 pm
Я архивирую не базу, а только одно поле в ней. Основная причина, экономия места.
Еще есть версия, что прочесть с диска сжатые данные и разархивировать их быстрее чем прочесть несжатые, незнаю правда насколько это правда… если и правда, то наверное только на больших массивах данных, а не как у меня. Значит остается только размер.
September 10th, 2008 at 7:53 pm
Спасибо за разъяснение, Николай.