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

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

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

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

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

edit

В append binary api's данные кодируются в hex (OMG!), поэтому base85 занимает больше места (22 байта на запись в моем случае).

5
задан skaffman 26 February 2012 в 18:13
поделиться