двоичное в текстовое кодирование, непечатаемые символы, буферы протокола, mongodb и bson - PullRequest
5 голосов
/ 24 января 2012

У меня есть ключ-кандидат (ключ-кандидат mongodb, __id), который выглядит следующим образом в буферах протокола:

message qrs_signature
{
  required uint32    region_id = 1;
  repeated fixed32 urls = 2;
};

Естественно, я не могу использовать строку, закодированную буферами протокола (через ParseToString(std::string))в моем документе bson, поскольку он может содержать непечатаемые символы.Поэтому я использую кодировку ascii85 для кодирования данных (используя this library ).У меня два вопроса.

  1. Является ли кодировка b85 безопасной для bson.
  2. Что такое двоичный тип bson для ?есть ли способ, которым я могу имплантировать свою (двоичную) строку в это поле с помощью вызова API mongodb, или это просто синтаксический сахар для обозначения типа значения, который должен быть обработан в некоторой форме (--ie, а не нативныймонгодб сущность)?

edit

Данные шоу API append binary, закодированные в шестнадцатеричном формате (OMG!), Поэтому base85 более экономичны (22 байта на запись вмой случай).

1 Ответ

4 голосов
/ 24 января 2012
  1. BSON безопасно, да. Выходные данные кодировки ASCII85 также действительны utf-8 iirc.
  2. Используется для хранения кусков двоичных данных. Двоичные данные являются официально поддерживаемым типом, и вы должны иметь возможность передавать двоичные значения в поля BSON, используя соответствующий код драйвера, BSONObj в вашем случае. Подробнее см. В документации к вашему драйверу или в исходном коде.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...