今天粗略地看了
Apache Avro的资料, 这是一种类似于Thrift和ProtocolBuffer的数据序列化工具,看起来不错。主要特点是:有schema定义以及动态类型。
schema定义的好处是能减少数据大小,如果没有schema定义,那么协议处理器不可能知道下一个遇到的类型是什么,只好通过每个数据的头部知道,这样头部的大小会占比较可观的比例, 比如每个整数四个字节,就要有一个字节说明这个数据的类型, 利用率只能有80%. 典型这样的协议有AMF, BSON, Erlang Node protocol, python语言的pickle, mashal等; 有了schema 定义,则处理器在数据收到的时候就知道数据的格式,从CORBA到Thrift到PB还有诸多游戏网络引擎采用这个模式。一般先用预处理器将schema/spec/protocol翻译成实现语言(c/c++/java等)的桩(stub)这样对于开发和部署都存在不方便, 而对于动态语言, 传统的方式和处理静态语言没有什么区别. 实际上以动态语言的脚本生成能力,完全不需要提前生成桩, 完全可以当schema改变的时候编译一遍(eval或者compile) 以后就直接使用编译生成的脚本,一切都可以由机制自动完成, 对于应用开发者来说是透明的,这样应用开发何部署更容易一些。
记得大约4,5年前,工作内容是为一个网络游戏的引擎VCE写动态语言的接口,我曾经用过这种动态编译的方法,对于ruby/python/perl语言的程序,可以自动生成处理器脚本,接口的相应变化都会立即反应到脚本生成。但是超出了当时的需求,最终没有发布。
而Avro的模式,是在客户端服务器连接的开始就互换各种schema信息,并生成相应的处理器。schema用方便快捷的JSON来定义, 也提供了几种语言的接口, 看起来不错。
分享到:
相关推荐
在实际应用中,可能需要优化RMI性能,如减少远程调用次数,使用批量调用,或者采用Java序列化之外的更高效的数据交换格式,如protobuf或JSON。 **RMI的局限性** 尽管RMI强大,但也有其局限性,比如只支持Java,跨...
PB Socket范例中的关键知识点主要包括以下几个方面: 1. Protocol Buffers(PB)基础: - **数据定义**:首先,你需要理解PB的.proto文件,这是定义数据结构的地方,包括消息类型、字段类型、字段编号等。 - **...
10. **分布式系统**:通过LabVIEW的LVDM(LabVIEW Distributed System Manager),可以构建分布式系统,将多个计算节点连接在一起,实现数据共享和协同工作。 通过学习和实践这些《LabVIEW2009程序设计》的范例源...
- LabVIEW的XI(eXtended Interface)框架允许开发分布式系统,可以将应用程序部署到多个计算节点上,提高系统性能和可靠性。 8. **测试测量**: - LabVIEW广泛应用于测试测量领域,提供了一整套解决方案,包括...
ZeroMQ 是一个高性能的轻量级消息中间件,它提供了多种类型的套接字,使得开发者可以轻松地构建分布式计算系统。ZeroMQ 不仅仅是一个网络库,它还抽象出了一种高级的消息模式,如请求-响应模式、发布-订阅模式、推送...
1. **序列化与反序列化**:在cRPC中,参数和返回值需要在网络上传输,因此必须转换成可传输的格式,如二进制或JSON。这通常涉及到数据的序列化和反序列化过程,确保原始数据结构能在接收端正确恢复。 2. **协议定义...
数据在发送前进行序列化,接收后进行反序列化,确保数据的完整性和一致性。 5. **错误处理**:DQMH提供了内置的错误处理机制,可以检测和报告通信过程中的任何问题,帮助开发者快速定位和解决故障。 6. **安全与...
Hadoop基于Google的GFS和MapReduce理念,提供了一种分布式计算和存储的解决方案。 【详细内容】: 1. **Hadoop的起源与背景** Hadoop最初源自Doug Cutting领导的Nutch搜索引擎项目,该项目基于Lucene。201X年,...
这包括开发分布式文件系统、能效优化存储、计算融入存储、去冗余技术和低成本存储方案。非关系型数据库(NoSQL)如键值数据库、列存数据库、图存数据库和文档数据库,与关系型数据库共同提供多样化的数据管理。同时...
10. **测试自动化**:LabVIEW的TestStand集成测试管理软件,用于构建、执行和管理自动化测试序列。 11. **社区和范例**:LabVIEW拥有活跃的用户社区,用户可以分享和学习各种范例程序,加速学习进程。 12. **教学...
2. **函数库**:LabVIEW拥有庞大的内置函数库,涵盖了信号处理、数学计算、通信、控制、图像处理等众多领域,这些函数以图标的形式存在,便于直观使用。 3. **G语言**:LabVIEW的编程语言称为G语言,它是一种基于...
开发可靠的分布式文件系统(DFS)、能效优化的存储、计算融入存储、大数据的去冗余及高效低成本的大数据存储技术;突破分布式非关系型大数据管理与处理技术,异构数据的数据融合技术,数据组织技术,研究大数据建模...
数据挖掘任务包括分类、聚类、关联规则、序列模式发现等,而机器学习方法涵盖归纳学习、基于范例学习、神经网络等。分析技术还包括用户兴趣分析、网络行为分析和情感语义分析。可视化分析则让数据结果更易理解,而...
1.5 个人计算、分布式计算与客户/服务器计算 3 1.6 机器语言、汇编语言和高级语言 4 1.7 Visual Basic的历史 5 1.8 其他高级语言 5 1.9 结构化编程 6 1.10 什么是Visual Basic 6 1.11 关于Visual Basic和本书的一般...
BCI-Framework由一个图形用户界面(GUI)组成,该图形用户界面(GUI)具有一组单独的计算过程(分布式或在单个计算机中),这些过程可提供可视化效果,提供刺激信息,处理采集,存储数据或流式传输前一个过程(离线...
云计算不仅能够提供强大的计算能力,而且通过其分布式和可扩展的特性,能够处理多样化的数据挖掘任务,无论是在数据量还是在数据类型的多样性方面。 总的来说,文档详细阐述了云计算背景下Web数据挖掘的理论基础和...
- **序列化**:介绍了Hadoop中序列化框架的作用,以及它们如何简化对象的传输和存储。 - **基于文件的数据结构**:讲解了Hadoop中如何使用特定的数据结构来优化数据的读写操作。 #### 六、MapReduce应用开发 - **...
通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...