| @ -0,0 +1,31 @@ | |||||
| Some redimentary benchmarks for performance + size of different over the wire protocols. | |||||
| ```bash | |||||
| $ git clone git://github.com/brettlangdon/proto-bench | |||||
| $ cd ./proto-bench | |||||
| $ go run main.go | |||||
| Struct Size: 48 | |||||
| BSON Size: 24 | |||||
| BSON Length: 90 | |||||
| Zversion@methodechoparams+0some1params2here | |||||
| JSON Size: 24 | |||||
| JSON Length: 63 | |||||
| {"Version":2,"Method":"echo","Params":["some","params","here"]} | |||||
| MSGPACK Size: 24 | |||||
| MSGPACK Length: 51 | |||||
| ��Version�@�Method�echo�Params��some�params�here | |||||
| $ go test -bench=. -benchmem ./bson ./json ./msgpack | |||||
| PASS | |||||
| BenchmarkBsonPack 500000 3950 ns/op 621 B/op 23 allocs/op | |||||
| BenchmarkBsonUnpack 1000000 1206 ns/op 261 B/op 6 allocs/op | |||||
| ok github.com/brettlangdon/proto-bench/bson 3.303s | |||||
| PASS | |||||
| BenchmarkJsonPack 1000000 1723 ns/op 287 B/op 4 allocs/op | |||||
| BenchmarkJsonUnpack 500000 5349 ns/op 576 B/op 15 allocs/op | |||||
| ok github.com/brettlangdon/proto-bench/json 4.472s | |||||
| PASS | |||||
| BenchmarkMsgpackPack 1000000 1585 ns/op 286 B/op 6 allocs/op | |||||
| BenchmarkMsgpackUnpack 1000000 1440 ns/op 390 B/op 7 allocs/op | |||||
| ok github.com/brettlangdon/proto-bench/msgpack 3.064s | |||||
| ``` | |||||
| @ -0,0 +1,28 @@ | |||||
| package bson | |||||
| import ( | |||||
| "labix.org/v2/mgo/bson" | |||||
| ) | |||||
| type BsonTest struct { | |||||
| Version float32 | |||||
| Method string | |||||
| Params []string | |||||
| } | |||||
| func BsonPack() { | |||||
| bson.Marshal(&BsonTest{ | |||||
| Version: 2.0, | |||||
| Method: "echo", | |||||
| Params: []string{ | |||||
| "some", | |||||
| "params", | |||||
| "here", | |||||
| }, | |||||
| }) | |||||
| } | |||||
| func BsonUnpack() { | |||||
| var test BsonTest | |||||
| bson.Unmarshal([]byte(`{"Version":2.0,"Method":"echo","params":["some","params","here"]}`), &test) | |||||
| } | |||||
| @ -0,0 +1,17 @@ | |||||
| package bson | |||||
| import ( | |||||
| "testing" | |||||
| ) | |||||
| func BenchmarkBsonPack(b *testing.B) { | |||||
| for n := 0; n < b.N; n++ { | |||||
| BsonPack() | |||||
| } | |||||
| } | |||||
| func BenchmarkBsonUnpack(b *testing.B) { | |||||
| for n := 0; n < b.N; n++ { | |||||
| BsonUnpack() | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,28 @@ | |||||
| package json | |||||
| import ( | |||||
| "encoding/json" | |||||
| ) | |||||
| type JsonTest struct { | |||||
| Version float32 | |||||
| Method string | |||||
| Params []string | |||||
| } | |||||
| func JsonPack() { | |||||
| json.Marshal(&JsonTest{ | |||||
| Version: 2.0, | |||||
| Method: "echo", | |||||
| Params: []string{ | |||||
| "some", | |||||
| "params", | |||||
| "here", | |||||
| }, | |||||
| }) | |||||
| } | |||||
| func JsonUnpack() { | |||||
| var test JsonTest | |||||
| json.Unmarshal([]byte(`{"Version":2.0,"Method":"echo","params":["some","params","here"]}`), &test) | |||||
| } | |||||
| @ -0,0 +1,17 @@ | |||||
| package json | |||||
| import ( | |||||
| "testing" | |||||
| ) | |||||
| func BenchmarkJsonPack(b *testing.B) { | |||||
| for n := 0; n < b.N; n++ { | |||||
| JsonPack() | |||||
| } | |||||
| } | |||||
| func BenchmarkJsonUnpack(b *testing.B) { | |||||
| for n := 0; n < b.N; n++ { | |||||
| JsonUnpack() | |||||
| } | |||||
| } | |||||
| @ -0,0 +1,44 @@ | |||||
| package main | |||||
| import ( | |||||
| "encoding/json" | |||||
| "fmt" | |||||
| "github.com/vmihailenco/msgpack" | |||||
| "labix.org/v2/mgo/bson" | |||||
| "unsafe" | |||||
| ) | |||||
| type Request struct { | |||||
| Version float32 | |||||
| Method string | |||||
| Params []string | |||||
| } | |||||
| func main() { | |||||
| var req = Request{ | |||||
| Version: 2.0, | |||||
| Method: "echo", | |||||
| Params: []string{ | |||||
| "some", | |||||
| "params", | |||||
| "here", | |||||
| }, | |||||
| } | |||||
| fmt.Printf("Struct Size: %d\r\n", unsafe.Sizeof(req)) | |||||
| bson_str, _ := bson.Marshal(&req) | |||||
| fmt.Printf("BSON Size: %d\r\n", unsafe.Sizeof(bson_str)) | |||||
| fmt.Printf("BSON Length: %d\r\n", len(bson_str)) | |||||
| fmt.Printf("%s\r\n", bson_str) | |||||
| json_str, _ := json.Marshal(&req) | |||||
| fmt.Printf("JSON Size: %d\r\n", unsafe.Sizeof(json_str)) | |||||
| fmt.Printf("JSON Length: %d\r\n", len(json_str)) | |||||
| fmt.Printf("%s\r\n", json_str) | |||||
| msgpack_str, _ := msgpack.Marshal(&req) | |||||
| fmt.Printf("MSGPACK Size: %d\r\n", unsafe.Sizeof(msgpack_str)) | |||||
| fmt.Printf("MSGPACK Length: %d\r\n", len(msgpack_str)) | |||||
| fmt.Printf("%s\r\n", msgpack_str) | |||||
| } | |||||
| @ -0,0 +1,28 @@ | |||||
| package msgpack | |||||
| import ( | |||||
| "github.com/vmihailenco/msgpack" | |||||
| ) | |||||
| type MsgpackTest struct { | |||||
| Version float32 | |||||
| Method string | |||||
| Params []string | |||||
| } | |||||
| func MsgpackPack() { | |||||
| msgpack.Marshal(&MsgpackTest{ | |||||
| Version: 2.0, | |||||
| Method: "echo", | |||||
| Params: []string{ | |||||
| "some", | |||||
| "params", | |||||
| "here", | |||||
| }, | |||||
| }) | |||||
| } | |||||
| func MsgpackUnpack() { | |||||
| var test MsgpackTest | |||||
| msgpack.Unmarshal([]byte(`{"Version":2.0,"Method":"echo","params":["some","params","here"]}`), &test) | |||||
| } | |||||
| @ -0,0 +1,17 @@ | |||||
| package msgpack | |||||
| import ( | |||||
| "testing" | |||||
| ) | |||||
| func BenchmarkMsgpackPack(b *testing.B) { | |||||
| for n := 0; n < b.N; n++ { | |||||
| MsgpackPack() | |||||
| } | |||||
| } | |||||
| func BenchmarkMsgpackUnpack(b *testing.B) { | |||||
| for n := 0; n < b.N; n++ { | |||||
| MsgpackUnpack() | |||||
| } | |||||
| } | |||||