2012-01-24 16 views
5

Mam klucz potencjalny (MongoDB klucz potencjalny, __id) ów wygląda następująco w buforach Protokół:kodowanie transportowe, znaki niedrukowalne, bufory protokół, MongoDB i bson

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

Naturalnie Nie mogę użyć łańcucha zakodowanych w buforze protokołów (przez ParseToString(std::string)) w moim dokumencie na temat pasma, ponieważ może on zawierać znaki niedrukowalne. Dlatego używam kodowania ascii85 do kodowania danych (używając this library). Mam dwa pytania.

  1. Czy kodowanie b85 jest bson-safe.
  2. Co to jest bson's binary type for? czy jest jakiś sposób, że mogę wszczepić mój (binarny) ciąg do tego pola za pomocą wywołania API mongodb, czy jest to po prostu cukier syntaktyczny oznaczający typ wartości, który musi być przetworzony w jakiejś formie (- nie, nie jest rodzimy jednostka mongodb)?

edit

dane na append binary API serialu jest zakodowany jako hex (OMG!), Base85 jest zatem bardziej wydajny przestrzeń (22 bajtów na rekord w moim przypadku).

Odpowiedz

4
  1. BSON bezpieczny, tak. Wyjście kodowania ASCII85 jest również poprawnym iirc utf-8.
  2. Służy do przechowywania porcji danych binarnych. Dane binarne są oficjalnie wspieranym typem i powinieneś być w stanie przesłać wartości binarne do pól BSON za pomocą odpowiedniego kodu sterownika, BSONObj w twoim przypadku. Aby uzyskać szczegółowe informacje, zapoznaj się z dokumentacją sterownika lub kodem źródłowym.
+0

Aha, dziękuję za walidację, teraz widzę, że istnieje specyficzna metoda dodawania danych binarnych o nazwie 'BSONObjBuilding :: AppendBinData', która zajmuje pole długości. –