it-swarm-id.com

Perbedaan terbesar Penghemat vs Protokol?

Apa pro dan kontra terbesar dari Apache Thrift vs Google's Protocol Buffer ?

256
Bob

Keduanya menawarkan banyak fitur yang sama; Namun, ada beberapa perbedaan:

  • Hemat mendukung 'pengecualian'
  • Protokol Buffer memiliki dokumentasi/contoh yang jauh lebih baik
  • Thrift memiliki tipe Set bawaan
  • Protokol Buffer memungkinkan "ekstensi" - Anda dapat memperluas proto eksternal untuk menambahkan bidang tambahan, sementara masih memungkinkan kode eksternal untuk beroperasi pada nilai. Tidak ada cara untuk melakukan ini di Thrift
  • Saya menemukan Protokol Buffer lebih mudah dibaca

Pada dasarnya, mereka cukup setara (dengan Protokol Buffer sedikit lebih efisien dari apa yang saya baca).

145
hazzen

Perbedaan penting lainnya adalah bahasa yang didukung secara default.

  • Buffer Protokol: Java, Android Java, C++, Python, Ruby, C #, Go, Objective-C, Node.js
  • Hemat: Java, C++, Python, Ruby, C #, Go, Objective-C, JavaScript, Node.js, Erlang, PHP, Perl, Haskell, Smalltalk, OCaml, Delphi, D, Haxe

Keduanya dapat diperluas ke platform lain, tetapi ini adalah binding bahasa yang tersedia di luar kotak.

78
Mike Gray

RPC adalah perbedaan utama lainnya. Thrift menghasilkan kode untuk mengimplementasikan klien RPC dan server di mana Protokol Buffer tampaknya sebagian besar dirancang sebagai format pertukaran data saja.

68
saidimu apale
  • Objek serial Protobuf sekitar 30% lebih kecil dari Hemat.
  • Sebagian besar tindakan yang mungkin ingin Anda lakukan dengan objek protobuf (membuat, membuat serial, deserialize) adalah jauh lebih lambat daripada penghematan kecuali jika Anda menghidupkan option optimize_for = SPEED
  • Hemat memiliki struktur data yang lebih kaya (Peta, Set)
  • Protobuf API terlihat lebih bersih, meskipun kelas yang dihasilkan semuanya dikemas sebagai kelas dalam yang tidak begitu baik.
  • Hemat enum bukan Java Enums yang asli, mis. Mereka hanya int. Protobuf memiliki enum Java asli.

Untuk melihat lebih dekat perbedaannya, periksa kode sumber di proyek sumber terbuka ini .

56
eishay

Seperti yang saya katakan sebagai "Penghematan vs Protokol buffer" topik:

Mengacu pada perbandingan Thrift vs Protobuf vs JSON :

Selain itu, ada banyak alat tambahan menarik yang tersedia untuk solusi tersebut, yang mungkin memutuskan. Berikut adalah contoh untuk Protobuf: Protobuf-wireshark , protobufeditor .

54

Saya bisa mendapatkan kinerja yang lebih baik dengan protokol berbasis teks dibandingkan dengan protobuff pada python. Namun, tidak ada pemeriksaan jenis atau konversi utf8 mewah, dll ... yang ditawarkan protobuff.

Jadi, jika serialisasi/deserialisasi adalah semua yang Anda butuhkan, maka Anda mungkin dapat menggunakan sesuatu yang lain.

http://dhruvbird.blogspot.com/2010/05/protocol-buffers-vs-http.html

8
dhruvbird

Satu hal yang jelas belum disebutkan adalah bahwa dapat berupa pro atau kontra (dan sama untuk keduanya) adalah bahwa mereka adalah protokol biner. Hal ini memungkinkan untuk representasi yang lebih kompak dan mungkin lebih banyak kinerja (pro), tetapi dengan keterbacaan berkurang (atau lebih tepatnya, debuggability), sebuah con.

Juga, keduanya memiliki sedikit dukungan alat kurang dari format standar seperti xml (dan mungkin bahkan json).

(EDIT) Berikut ini adalah Perbandingan menarik yang menangani perbedaan ukuran & kinerja, dan termasuk angka untuk beberapa format lain (xml, json) juga.

7
StaxMan

Protokol Buffer tampaknya memiliki representasi yang lebih kompak, tetapi itu hanya kesan yang saya dapatkan dari membaca whitepaper Thrift. Dengan kata-kata mereka sendiri:

Kami memutuskan menentang beberapa optimasi penyimpanan ekstrem (mis. Mengemas Integer kecil ke ASCII atau menggunakan format kelanjutan 7-bit). demi kesederhanaan dan kejelasan dalam kode. Perubahan-perubahan ini dapat dengan mudah dibuat jika dan ketika kita menemukan kinerja-kritis. gunakan case yang menuntut mereka.

Juga, mungkin hanya kesan saya, tetapi Protokol Buffer tampaknya memiliki beberapa abstraksi lebih tebal di sekitar versi struct. Thrift memang memiliki beberapa dukungan versi, tetapi butuh sedikit usaha untuk mewujudkannya.

7
Daniel Spiewak

ProtocolBuffers LEBIH CEPAT.
Ada patokan Nice di sini:
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking

Anda mungkin juga ingin melihat ke dalam Avro, karena Avro bahkan lebih cepat.
Microsoft memiliki paket di sini:
http://www.nuget.org/packages/Microsoft.Hadoop.Avro ​​

Omong-omong, tercepat yang pernah saya lihat adalah Cap'nProto ;
Implementasi C # dapat ditemukan di repositori Github dari Marc Gravell .

6
Stefan Steiger

Dan menurut wiki runtime Thrift tidak berjalan di Windows.

6
hplbsh

Saya pikir sebagian besar poin ini telah melewatkan fakta dasar bahwa Thrift adalah kerangka kerja RPC, yang kebetulan memiliki kemampuan untuk membuat serialisasi data menggunakan berbagai metode (biner, XML, dll).

Protokol Buffer dirancang murni untuk serialisasi, ini bukan kerangka kerja seperti Hemat. 

3
Babra Cunningham

Pertama, protobuf bukan implementasi RPC penuh. Dibutuhkan sesuatu seperti gRPC untuk menggunakannya. 

gPRC sangat lambat dibandingkan dengan Thrift:

http://szelei.me/rpc-benchmark-part1/

2
trilogy

Penting juga untuk dicatat bahwa tidak semua bahasa yang didukung kompatibel secara konsisten dengan penghematan atau protobuf. Pada titik ini adalah masalah implementasi modul di samping serialisasi yang mendasarinya. Berhati-hatilah untuk memeriksa tolok ukur untuk bahasa apa pun yang Anda rencanakan untuk digunakan.

0
JSON

Ada beberapa poin yang sangat bagus di sini dan saya akan menambahkan satu lagi kalau-kalau jalur seseorang melintasi sini.

Thrift memberi Anda opsi untuk memilih antara serialer hemat-biner dan hemat-kompak (de), hemat-biner akan memiliki kinerja luar biasa tetapi ukuran paket lebih besar, sedangkan hemat-kompak akan memberi Anda kompresi yang baik tetapi membutuhkan daya pemrosesan lebih. Ini berguna karena Anda selalu dapat beralih di antara dua mode ini semudah mengubah sebaris kode (heck, bahkan membuatnya dapat dikonfigurasi). Jadi, jika Anda tidak yakin berapa banyak aplikasi Anda harus dioptimalkan untuk ukuran paket atau kekuatan pemrosesan, penghematan bisa menjadi pilihan yang menarik.

PS: Lihat proyek benchmark yang sangat baik ini oleh thekvs yang membandingkan banyak serialisator termasuk biner-hemat, hemat-kompak, dan protobuf: https://github.com/thekvs/cpp-serializers

PS: Ada serializer lain bernama YAS yang memberikan opsi ini juga tetapi skema-kurang lihat tautan di atas.

0
Sinapse