Protocol buffers 数据库访问系统技术
我目前正在设计一个允许访问数据库的系统。假设如下:Protocol buffers 数据库访问系统技术,protocol-buffers,thrift,ice,Protocol Buffers,Thrift,Ice,我目前正在设计一个允许访问数据库的系统。假设如下: 数据库应具有访问层。访问层应该提供表示数据库表的对象。(这将使用一些ORM框架来完成) 要从数据库中获取数据的客户端,应该首先从访问层获取对象,然后使用这些对象获取数据 客户端可以使用Python、java或C++。李> 访问层是基于Java的 不会有太多的客户,但他们将使用大量的数据 对我来说很难的问题是,应该使用什么技术在访问层和客户端之间传递对象。我考虑使用ZoOC ICE、Apache节约或谷歌协议缓冲区。 有人认为哪一个值得使用吗
- 数据库应具有访问层。访问层应该提供表示数据库表的对象。(这将使用一些ORM框架来完成)
- 要从数据库中获取数据的客户端,应该首先从访问层获取对象,然后使用这些对象获取数据
- 访问层是基于Java的李>
- 不会有太多的客户,但他们将使用大量的数据
- 使用简单,易于启动
- 有据可查
- 高度优化
- 用类java语言定义对象数据结构
- 为Python、Java和C自动生成setter和getter的实现以及构建方法++
- 其他语言的开源投标
- 对象可以在不影响应用程序旧版本的情况下进行扩展
- 有许多开源RpcChanel和RpcController实现(未经测试)
- 需要实现对象传输
- 对象结构必须在使用前定义,因此我们不能动态添加一些字段(更新:有可能这样做,请参阅注释)
- 如果需要读取一个对象的字段,我们必须解析整个文件(相反,在XML中,我们可以忽略所选的标记)
- 如果我们想使用RPC调用对象方法,我们需要定义服务并交付RpcChanel和RpcController实现
- 提供为支持的语言(类,所有重要的东西)生成源代码的编译器
- 允许在结构中定义可选字段(当我们不在字段上设置值时,传输数据的大小较小)
- enable指出一些“单向”的方法(调用后不返回任何内容,客户端不等待服务器关于查询完成处理的回答)
- 支持集合(映射、列表、集)、对象、原语序列化(反序列化)、常量、枚举、异常
- 大多数问题、错误都得到了解决和解释
- 提供不同的序列化方法:(TBinaryProtocol…)和不同的数据交换方法:(TBufferedTransport,TZlibTransport…)
- 编译器为解冻语言生成类(结构),我们可以通过添加一些新方法进行扩展
- 可以向协议(服务器和客户端)添加字段并删除其他-旧代码和新代码可以正确交互(更新中的一些规则)
- 启用异步调用
- 易于使用
- 文档-包含一些错误,有时很难了解问题的根源
- 并不是所有的问题都有很好的标记(当我们在互联网上寻找解决方案时)
- 不支持服务方法的重载
- 教程仅介绍节俭使用的简单示例
- 很难开始
问题是:冰是否比铅慢得多、效率低得多?显示出一些努力。你为什么要考虑ZeroC?你认为谷歌协议缓冲区的优势是什么?为什么您认为Apache Thrift非常适合?协议缓冲区相对于Thrift的一个优势是第三方实用程序要多得多。我认为为协议缓冲区编写实用程序比编写Thrift要容易得多,因为proto定义可以转换为协议缓冲区消息,并且协议缓冲区具有动态消息。(我最近没有检查thrift,所以这可能已经改变)“因此我们不能动态添加一些字段”是不正确的;许多PB API支持扩展字段。我发现,ICE可以使用ProtocolBuffers:。这是ICE的优势。protobuf还启用可选字段。