2012-01-24 5 views
5

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

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

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

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

редактировать

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

ответ

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

Aha, спасибо за проверку, теперь я вижу, что существует специальный метод для добавления двоичных данных, называемых BSONObjBuilding :: AppendBinData', который занимает поле длины. –