Jakie są najbardziej zauważalne różnice między buforami protokołów Google i ASN.1 (z kodowaniem PER)? Dla mojego projektu najważniejszą kwestią jest wielkość zserializowanych danych. Czy ktoś dokonał porównań wielkości danych między tymi dwoma?Jak Google Protocol Buffers porównuje się do ASN.1
Odpowiedz
Minęło dużo czasu, odkąd wykonałem jakąkolwiek pracę ASN.1, ale rozmiar jest bardzo prawdopodobne, zależy od szczegółów typów i rzeczywistych danych.
Chciałbym zdecydowanie zalecamy, aby prototypować i umieścić kilka rzeczywistych danych w celu porównania.
Jeśli Twój protokół buforowy zawierałby powtarzające się typy pierwotne, powinieneś sprawdzić najnowsze źródło w Subversion dla buforów protokołów - mogą one być reprezentowane w "spakowanym" formacie, który jest znacznie bardziej wydajny. (Mój port C# ma tylko połapał się z tą funkcją, jakiś czas w zeszłym tygodniu.)
Jeśli używasz ASN.1 z Unaligned PER i definiujesz typy danych za pomocą odpowiednich więzów (np. Określając dolną/górną granice dla liczb całkowitych, górne granice dla długości list itd.), twoje kodowanie będzie bardzo zwarte. Nie będzie marnowanych bitów na takie rzeczy jak wyrównanie lub dopełnienie między polami, a każde pole będzie zakodowane w minimalnej liczbie bitów niezbędnych do utrzymania dopuszczalnego zakresu wartości. Na przykład pole typu INTEGER (1..8) zostanie zakodowane w 3 bitach (1 = '000', 2 = '001', ..., 8 = '111'); a wybór z czterema alternatywami zajmie 2 bity (wskazujące wybraną alternatywę) plus bity zajmowane przez wybraną alternatywę. ASN.1 ma wiele innych interesujących funkcji, które z powodzeniem zastosowano w wielu opublikowanych standardach. Przykładem jest znacznik rozszerzenia ("..."), który po zastosowaniu do SEKWENCJI, WYBORU, WYBUCHOWANEGO i innych typów umożliwia kompatybilność wsteczną i do przodu między punktami końcowymi implementującymi różne wersje specyfikacji.
Gdy wielkość zapakowany/zakodowany komunikat jest ważny należy również zwrócić uwagę na fakt, że protobuf nie jest w stanie zapakować repeated
pola, które nie mają primitive numeric type
, read this uzyskać więcej informacji.
Jest to problem, np. jeśli masz wiadomości tego typu: (komentarz określa rzeczywisty zakres wartości)
message P{
required sint32 x = 1; // -0x1ffff to 0x20000
required sint32 y = 2; // -0x1ffff to 0x20000
required sint32 z = 3; // -0x319c to 0x3200
}
message Array{
repeated P ps = 1;
optional uint32 somemoredata = 2;
}
W przypadku gdy masz długość tablicy, na przykład, 32 niż można byłoby doprowadzić zapakowany rozmiaru wiadomości od około 250 do 450 bajtów z protobuf, w zależności od wartości, które tablica zawiera. Może to nawet wzrosnąć do ponad 1000 bajtów w przypadku korzystania z pełnego zakresu 32-bitowego lub w przypadku korzystania z int32
zamiast sint32
i mieć wartości ujemne.
BLOB danych surowych (zakładając, że Z może być zdefiniowana jako int16
wartość) będzie zużywać tylko 320 bajty, a zatem ASN.1 komunikat jest zawsze mniejszy niż 320 bajty, ponieważ wartość maksymalna nie jest 32-bitowym, ale faktycznie 19bit (x, y) i 15bit (z).
buforów rozmiar wiadomości mogą być zoptymalizowane zgodnie z tą definicją wiadomości:
message Ps{
repeated sint32 xs = 1 [packed=true];
repeated sint32 ys = 2 [packed=true];
repeated sint32 zs = 3 [packed=true];
}
message Array{
required Ps ps = 1;
optional uint32 somemoredata = 2;
}
co skutkuje rozmiarów wiadomości od około 100 bajtów (wszystkie wartości są zerami), 300 bajty (wartości w zakresie max) i 500 Bajt (wszystkie wartości to wysokie 32-bitowe wartości).
- 1. Jak przeanalizować ASN.1 z Haskellem?
- 2. Samouczek programowania OpenSSL ASN.1
- 3. Google Parowanie Protocol Protocol - Błąd uzgadniania SSL z Go (golang)
- 4. muszę przykład zrozumieć niejawnej tagowanie ASN.1
- 5. ASN.1 vs JSON, kiedy jest odpowiedni do ich użycia?
- 6. SNMP: ASN.1 MIB Definicje. Odwoływanie się do tabeli w tabeli
- 7. Czy jest implementacja protokołu Google Buffers w implementacji jakości .NET
- 8. W jaki sposób logowanie przez Google+ porównuje się do logowania googleappengine.api.user?
- 9. W jaki sposób jboss kuge porównuje się do roo wiosny?
- 10. Protocol Buffer: Enum problem
- 11. W jaki sposób Elm porównuje się do ClojureScript?
- 12. Jak zaimportować podpis DSA w formacie ASN.1 przy użyciu BouncyCastle (C#)
- 13. W jaki sposób Google App Engine porównuje się z planami hostingowymi?
- 14. ANDROID ELM327/OBD2 PROTOCOL
- 15. Protokół Logitech Unifying Receiver Protocol?
- 16. przeglądarka porównuje pozycję dokumentu
- 17. Algorytm odwzorowania IP na ASN
- 18. Dlaczego Google ignoruje moją miniaturę strony +1?
- 19. Obiekt konfiguracyjny javascript google +1
- 20. Płyn porównuje daty
- 21. Przycisk Google +1 jako link?
- 22. Google Protobuf ByteString vs. Byte []
- 23. Co to jest ewolucja różnicowa i jak się ją porównuje do algorytmu genetycznego?
- 24. W jaki sposób EF4 porównuje się z NHibernate?
- 25. Co to jest plik ASN i jak z niego korzystać?
- 26. Dlaczego [:] = 1 zasadniczo różni się od [:] = "1"?
- 27. Jakoś 1 nie równa się 1 (PHP)
- 28. Czy istnieje bezpłatny program ogólnego przeznaczenia ASN.1 Decode/Dump/Inspect?
- 29. Niestandardowy tekst i obraz Google +1
- 30. Chrome HTTP2.0 zgłasza SPDY PROTOCOL ERROR
Być może powiązane pytanie: dlaczego potrzebujemy buforów protokołu, gdy mamy już dojrzały ASN.1? Nie wymyślił tu syndrom w Google? –