2016-05-24 4 views
0

Я отправил некоторый код для более эффективного хранения JSON (массивов) более эффективно на Code Review, но он начал привлекать ответы типа StackOverflow, поэтому я подумал, что буду публиковать здесь, чтобы обсудить цель, а не код.Condense JSON для эффективности использования полосы пропускания

JSON быстро становится стандартом форматирования для быстрой, удобной и надежной связи машин с машинами. Он гибкий и широко поддерживается, но имеет некоторые недостатки, когда дело доходит до данных, таких как базы данных. JSON полезной нагрузки из таблицы базы данных с именем фруктов может выглядеть следующим образом:

[{"id":1,"abbreviation":"appl","name":"Apple"}, 
{"id":2,"abbreviation":"pear","name":"Pear"}, 
{"id":3,"abbreviation":"bana","name":"Banana"}, 
{"id":4,"abbreviation":"bkby","name":"Blackberry"}, 
{"id":5,"abbreviation":"strw","name":"Stawberry"}, 
{"id":5,"abbreviation":"pech","name":"Peach"}, 
{"id":6,"abbreviation":"plum","name":"Plum"}] 

Большинство данных в этой полезной нагрузки повторяется из ключей массива. Это очень неэффективно и сложно с точки зрения пропускной способности. Я придумал способ сжать JSON путем удаления ключей и положить их на первой строке массива, как это:

C[["id","abbreviation","name"], 
[1,"appl","Apple"], 
[2,"pear","Pear"], 
[3,"bana","Banana"], 
[4,"bkby","Blackberry"], 
[5,"strw","Stawberry"], 
[5,"pech","Peach"], 
[6,"plum","Plum"]] 

Я знаю, что GZIP, как правило, используется для уменьшения пропускной способности, необходимой для но я понял, почему не обойтись? Gzip не имеет потерь, он может сжимать столько, сколько нужно, чтобы восстановить все, что было в точности. Лучшая эффективность хранения в сочетании с gzip дает наилучшие результаты.

Мой вопрос - вот за что и против этого предложения. Было высказано предположение, что накладные расходы на обработку этого не стоят. Я обсуждаю, что в наши дни пропускная способность намного дороже, чем вычислительная мощность. Я ошибаюсь? Я что-то упускаю? Если вы можете сократить свою полезную нагрузку более чем на половину, разве это не стоит?

+0

Похоже, что вы - какой-то тип системы Linux. Если это так, у них есть zip для Linux, и zip имеет несколько режимов сжатия, если вы хотите туда попасть. [Zip для Linux] (http://www.linuxfromscratch.org/blfs/view/svn/general/zip.html). [7 zip также имеет] (http://www.7-zip.org/download.html) очень хорошую степень сжатия. И у них есть источник и двоичные файлы для Linux. – Bulrush

ответ

0

«Я обсуждаю, что пропускная способность намного дороже, чем вычислительная мощность в эти дни».

Это зависит от того, сколько данных вы отправляете и как часто. Если вы отправляете файл 5gb 10x в день, это много данных, поэтому подумайте об их сжатии. Если вы отправляете файл 5kb 10x в день, это едва ли какая-либо полоса пропускания вообще для среднего высокоскоростного соединения. Это также зависит от скорости подключения приемника. 50 ГБ данных с соединением 3,5 Мбит/с (то, что я использовал) потребуется некоторое время для загрузки получателя.

The Archive Compression Test все еще существует, но я не знаю, когда это было последнее обновление. Он сравнивает множество архиваторов в различных условиях (изображения, текст и т. Д.) Со ссылками на все из них.

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

+0

Хорошее предложение по испытанию на сжатие. Я провел быстрый тест с помощью онлайн-gzip-инструмента и получил 10% -ное улучшение сжатия, используя это сжатие и gzip, и просто используя gzip. Это просто с приведенными выше примерами данных. С мобильным устройством не всегда можно предположить, что каждый будет иметь высокоскоростное соединение. – OffTheBricks