FlatBuffers去年发布,最近看了1下,与同是出自Google之手的Protocol Buffers非常类似。在官网上介绍,FlatBuffers(简称FB)主要针对game development和对性能有要求的利用。相对Protocol Buffers(简称PB),FB不需要解析,只通过序列化后的2进制buffer便可完成数据访问。
FB的主要特点有:
1)数据访问不需要解析
将数据序列化成2进制buffer,以后的数据访问直接读取这个buffer,所以读取的效力很高。
2)内存高效、速度快
– 数据访问只在序列化后的2进制buffer,不需额外的内存分配。
– 数据访问速度接近原生的struct,只多了1次解援用(根据起始地址和偏移量,然后取值)
3)弹性
都是可选字段,支持向前、向后兼容
4)生成的代码量小
只需依赖1个头文件
5)强类型
编译时检测毛病
6)易于使用
可以解析schema和json文本
7)跨平台
C++/Java/Go不需额外依赖
FB的实现原理:
通过FB序列化后的数据就是1个2进制buffer,内部包括各种objects(structs,tables,vectors),通过offset组织。所以数据可以in-place访问(起始地址+偏移量),就像数组或struct访问。
FB中table代表1个数据结构,这个table会对应1个vtable,用于唆使各个字段在buffer中的偏移量。接下来,在访问某个字段时,直接根据偏移量就能够找到该字段。 由于FB直接访问raw buffer,所以在数据破坏时,会得到脏数据。FB通过Verifier确保不可信buffer数据是正确的。
下面测试了PB和FB,做性能对照,测试场景很简单,构造N个对象,序列化,写入文件,然后再反序列化。测试的对象结构以下:
required int32 id = 1;
required string name = 2;
required int32 ip = 3;
repeated int32 addr_list = 4;
}
测试结果以下:
记录个数
|
FlatBuffers
|
Protocol Buffers
|
10000
|
0.197 / 4.4M / 0.02
|
0.166 / 3.0M / 0.08
|
20000
|
0.383 / 8.8M / 0.03
|
0.248 / 6.4M / 0.168
|
30000
|
0.534 / 13M / 0.05
|
0.378 / 10M / 0.26
|
100000
|
1.937 / 44M / 0.144
|
1.314 / 38M / 0.8
|
200000
|
3.9 / 88M / 0.276
|
2.66 / 67M / 1.542
|
1000000
|
17.59 / 439M / 1.396
|
13.355 / 397M / 8.012
|
X / Y / Z3个数据,分别对应,序列化总时间 / 文件大小 / 反序列时间,其中包括读写文件的时间。可以看到,PB在序列化的时间和大小都要优于FB,序列化要快30%左右,序列化数据大小要小20%左右。而FB由于不需要解析,反序列化异常快。
虽然FB的反序列化超级快,但是数据大小还是蛮大的(可能的缘由是不需要解析,直接访问binary buffer,所以不能对数据进行紧缩),带来的传输或存储开消,可能会抵过1部份反序列化的时间。感觉上,FB的使用处景上还是很受限,在移动端多是1个利用场景。
测试代码为了简单,对每一个对象都会调用write或read,统计的时间也包括这些时间。由于要对PB和FB对照,此部份开消基本1致。具体代码见github
波比源码 » FlatBuffers vs Protocol Buffers
purchase levaquin pills levofloxacin price
aldactone online buy valtrex 500mg pills diflucan 100mg over the counter
buy ampicillin 500mg online cheap erythromycin 250mg canada order erythromycin 500mg generic
buy fildena 50mg sale robaxin 500mg canada methocarbamol online order
buy suhagra order sildenafil 100mg generic estrace 2mg us
purchase lamictal pills prazosin 1mg sale order tretinoin cream online cheap
tadalis 20mg drug tadacip for sale buy voltaren 100mg
indocin generic generic lamisil trimox brand
anastrozole 1mg cost buy biaxin 500mg online viagra sildenafil 100mg
tadalafil sans ordonnance en france viagra 25mg en ligne sildenafil 25mg comprimГ©
order generic prednisone 2009 print ad for cialis buy sildenafil generic
original cialis 10mg rezeptfrei sicher kaufen tadalafil fГјr frauen viagra 200mg kaufen generika
order provigil 100mg for sale order diamox 250mg online acetazolamide 250 mg tablet
doxycycline price buy levitra 20mg generic lasix order
buy buspar online cheap buy phenytoin pills buy oxybutynin
buy terazosin 1mg purchase sulfasalazine online sulfasalazine over the counter
order benicar 10mg generic purchase divalproex online cheap buy diamox 250mg pills
buy generic imdur imuran cost buy micardis 20mg online
bupropion for sale cetirizine ca order seroquel for sale
zoloft 100mg over the counter order kamagra 100mg generic oral viagra
salbutamol 100 mcg brand order generic sildenafil 50mg purchase viagra for sale
order revia online cheap order revia 50mg sale order aripiprazole 30mg for sale
dapsone cost order avlosulfon 100 mg without prescription perindopril 4mg generic
order medroxyprogesterone 10mg sale buy provera 5mg generic order cyproheptadine without prescription
order modafinil 100mg generic order stromectol 3mg sale buy ivermectin 6mg online
brand isotretinoin 40mg deltasone 20mg brand deltasone 5mg canada
tadalafil 40mg pill order tadalafil generic cheap sildenafil generic
order tadalafil 10mg without prescription order generic cialis 5mg clomipramine brand
norvasc 10mg cheap tadalafil online cialis mail order
generic clozapine 100mg purchase ipratropium sale decadron pill
viagra drug brand viagra 50mg purchase lisinopril sale
prilosec 10mg without prescription poker online game internet roulette
order lopressor 50mg generic buy tenormin generic buy levitra 10mg
speechwriters world poker online free slots games
how to write an about me essay paper writer order viagra 50mg pill
clomid usa order clomid 100mg pill casino blackjack
triamcinolone 10mg uk desloratadine uk order clarinex 5mg sale
buy priligy 90mg online cheap buy misoprostol 200mcg online buy levothyroxine online cheap
buy allopurinol 300mg sale order zyloprim 100mg without prescription order zetia 10mg generic
purchase motilium online cyclobenzaprine over the counter purchase flexeril without prescription
buy cozaar online cheap buy esomeprazole 20mg generic topamax 100mg pills
baclofen 10mg brand buy toradol 10mg pills buy toradol for sale
order imitrex 25mg buy levaquin without prescription order avodart for sale
buy colchicine generic order colchicine 0.5mg without prescription real money slot machines
purchase ranitidine pill zantac 150mg sale order celecoxib 200mg online cheap
tamsulosin 0.2mg without prescription buy spironolactone 100mg for sale order generic spironolactone 25mg
buy tadalafil pills order ciprofloxacin 1000mg for sale oral ciprofloxacin 1000mg
flagyl 200mg without prescription bactrim 960mg over the counter cost bactrim 480mg
fluconazole over the counter viagra sildenafil 100mg viagra 100mg drug
sildenafil 20mg order sildenafil 50mg for sale buy generic cialis 20mg
ceftin 250mg oral methocarbamol 500mg us robaxin over the counter
money slots parx casino online cialis 40mg drug