Сжатие направляющих путем хеширования в небольших наборах данных - PullRequest
0 голосов
/ 07 августа 2011

Я работаю над мобильным приложением и хочу оптимизировать данные, которые он получает с сервера (как JSON).Возвращается 3 списка (каждый из которых содержит свой собственный класс объектов, приблизительные размеры списков - 50, 100 и 170).Каждый объект имеет идентификатор Guid, и для каждого объекта есть некоторые данные об отношениях.Например:

o = { Id = "8f088552-5b24-4ba4-a6e5-8958c4353581",
      RelatedIds = ["19d2e562-0874-473f-8e05-7052e8defd9a", "615b4c47-199a-4f7d-8268-08ed43d9c891", ... ] }

Есть ли способ сжать эти гиды до чего-то более сортировочного без сохранения карты идентичности?Возможно, используя хеш-функцию?

Ответы [ 4 ]

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

Подумав об этом еще немного, я понял, что HTTP-сжатие (если оно включено), вероятно, в любом случае будет сжимать эти данные достаточно хорошо, поэтому на самом деле не стоит усилий для сжатия данных вручную.

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

Нет. Одним из атрибутов (не криптографических) хэшей является то, что они сталкиваются: hash(a) == hash(b), но a != b. Они являются оптимизацией производительности в случае, когда вы делаете много проверок на равенство и ожидаете много ложных результатов (потому что если hash(a) != hash(b), то a != b). GUID-> counter counter, вероятно, лучший способ получить меньшие идентификаторы здесь.

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

Вы можете конвертировать hex (base16) в base64 и удалить все знаки препинания. Вы должны сэкономить 25% для использования base64 и еще 4 байта для пунктуации.

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

Вы можете преобразовать 16-байтовое представление GUID в строку Base 64.Однако вы не упомянули язык программирования, поэтому мы не можем помочь в дальнейшем.

Хеш-функция здесь не рекомендуется, потому что хеш-функции обычно с потерями.

...