Ответ 1
Эффективность JSON vs BSON зависит от размера целых чисел, которые вы храните. Там интересный момент, когда ASCII занимает меньше байтов, чем фактически сохраняет целые типы. 64-разрядные целые числа, то есть, как он выглядит в вашем документе BSON, занимают 8 байтов. Ваши номера составляют менее 10 000, что означает, что вы можете хранить каждый в ASCII в 4 байтах (по одному байту для каждого символа до 9999). Фактически, большинство ваших данных выглядят меньше 1000, то есть они могут храниться в 3 или менее байтах. Конечно, десериализация требует времени и не дешево, но экономит место. Кроме того, Javascript использует 64-битные значения для представления всех чисел, поэтому, если вы написали его в BSON после преобразования каждого целого в более подходящий формат данных, ваш файл BSON мог бы быть намного больше.
Согласно спецификации, BSON содержит много метаданных, которые JSON не делает. Эти метаданные в основном являются префиксами длины, поэтому вы можете пропустить данные, которые вам не интересны. Например, возьмите следующие данные:
["hello there, this is an necessarily long string. It especially long, but you don't care about it. You're just trying to get to the next element. But I keep going on and on.",
"oh man. here another string you still don't care about. You really just want the third element in the array. How long are the first two elements? JSON won't tell you",
"data_you_care_about"]
Теперь, если вы используете JSON, вам нужно разобрать все первые две строки, чтобы узнать, где третий. Если вы используете BSON, вы получите разметку больше (но не на самом деле, потому что я делаю эту разметку для примера):
[175 "hello there, this is an necessarily long string. It especially long, but you don't care about it. You're just trying to get to the next element. But I keep going on and on.",
169 "oh man. here another string you still don't care about. You really just want the third element in the array. How long are the first two elements? JSON won't tell you",
19 "data_you_care_about"]
Итак, теперь вы можете прочитать "175", знаете, чтобы пропустить вперед 175 байт, затем прочитайте "169", пропустите 169 байт, а затем прочитайте "19" и скопируйте следующие 19 байтов в свою строку. Таким образом, вам даже не нужно разбирать строки для разделителей.
Использование одного и другого сильно зависит от ваших потребностей. Если вы собираетесь хранить огромные документы, которые у вас есть все время в мире, чтобы разобрать, но ваше дисковое пространство ограничено, используйте JSON, потому что он более компактен и эффективен в пространстве. Если вы собираетесь хранить документы, но сокращение времени ожидания (возможно, в контексте сервера) более важно для вас, чем сохранение некоторого дискового пространства, используйте BSON.
Еще одна вещь, которую следует учитывать в вашем выборе, - это читаемость человека. Если вам нужно отладить отчет о сбоях, содержащий BSON, вам, вероятно, понадобится утилита для его расшифровки. Вы, вероятно, не просто знаете BSON, но можете просто прочитать JSON.