LINUX.ORG.RU

История изменений

Исправление aist1, (текущая версия) :

Я тебе подскажу. Тебе нужно определить цель, для чего ты создаешь формат. Это может быть аналитика. Тогда формат должен обеспечивать минимальную трудоемкость доступа к элементам. В идеале — O(1) traversal без сериализации (когда запросы можно выполнять прямо над сырыми блоками памяти, поднятыми из хранилища). Или ты хочешь обеспечить минимальный размер хранилища. Тогда надо смотреть в сторону сжатых структур данных.

Это может быть обработка транзакций, и тогда хорошо бы иметь возможность обновлять документы за логарифмическое (от их размера) время. И это будет, опять же, совсем другая история. Поскольку мы не можем иметь O(1) одновременно и на чтение, и на вставку в произвольную позицию динамического массива.

И, наконец, оптимизацию формата можно делать под эффективное выполнение конкретного ограниченного подмножества запросов, критичного для решения конкретной задачи.

И вот если ответы на эти все вопросы у тебя «я пока что не знаю», то твои эксперименты с «ужиманием» json-а могут дать совершенно контринтуитивные результаты. Поэтому, обычно предоставляют два формата: неоптимизированный текстовый и оптимизированный для общего случая O(1) traversal бинарный. Последнему, обычно, еще требуется и выравнивание элементов данных по границам блоков в 8 байт, так что он вряд ли будет компактным в плане затрат памяти.

Исходная версия aist1, :

Я тебе подскажу. Тебе нужно определить цель, для чего ты создаешь формат. Это может быть аналитика. Тогда формат должен обеспечивать минимальную трудоемкость доступа к элементам. В идеале — O(1) traversal без сериализации (когда запросы можно выполнять прямо над сырыми блоками памяти, поднятыми из хранилища). Или ты хочешь обеспечить минимальный размер хранилища. Тогда надо смотреть в сторону сжатых структур данных.

Это может быть обработка транзакций, и тогда хорошо бы иметь возможность обновлять документы за логарифмическое (от их размера) время. И это будет, опять же, совсем другая история. Поскольку мы не можем иметь O(1) одновременно и на чтение, и на вставку в произвольную позицию динамического массива.

И, наконец, оптимизацию формата можно делать под эффективное выполнение конкретного ограниченного подмножества запросов, критичного для решения конкретной задачи.

И вот если ответы на эти все вопросы у тебя «я пока что не знаю», то твои эксперименты с «ужиманием» json-а могут дать совершенно контринтуитивные результаты. Поэтому, обычно предоставляют два формата: неоптимизированный текстовый и оптимизированный для общего случая бинарный.