Теория, как сократить объём трафика по сети, Что-то вроде дельта кодирования.. |
Здравствуйте, гость ( Вход | Регистрация )
Теория, как сократить объём трафика по сети, Что-то вроде дельта кодирования.. |
512es |
17.1.2012, 18:28
Сообщение
#1
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
Доброго времени суток!
Упрошённая схема: Имеется 2 компьютера, клиент и сервер. Клиент достаточно часто запрашивает одни и те же данные (QByteArray) у сервера. Объём данных будем считать относительно большим. Иногда данные могут незначительно меняться. Задача: Максимально сократить объём трафика между клиентом и сервером. Возможно запоминание последних отданных данных клиенту на стороне сервера и последних принятых данных клиентом на стороне клиента. Сейчас используется qCompress. Заметный выигрыш в размере пакетов, но всё равно, теоретически, можно посылать только различия между новым и предыдущим QByteArray + хеш, указывающий на то, какие данные были использованы при сравнении (на всякий случай, для коррекции ошибок). Смотрю в сторону Delta кодирования. Но помоему это немного не то, или я просто не умею его использовать. Как его адаптировать для сравнения двух массивов данных? |
|
|
512es |
18.1.2012, 17:37
Сообщение
#2
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
Размер динамический. Вообщем утилита bsdiff просто гениальна! Она находит повторяющиеся блоки данных рекурсивным алгоритмом. Потом жмёт патч файл через библиотеку BZip2. Жаль только много памяти кушает.
Данные можно подавать абсолютно любые и разных размеров. В качестве проверки утилиты я дал ей 2 файла базы sqlite. Одна размером 3.3мб, вторая 4.1. Это был оригинал и один из бекапов. На выходе получил патч файл размером 40к!! Теперь, имея в наличии лишь этот патч файл и бекап, можно запросто получить исходный файл. |
|
|
Текстовая версия | Сейчас: 28.11.2024, 10:42 |