Protobufs和对象Java

时间:2013-05-28 19:33:19

标签: java serialization protocol-buffers

我目前正在用Java实现一个小型客户端服务器数据库。

我使用Java Objects建模事务。每个事务都包含许多语句和一些元数据。这些是从客户端传递到服务器并使用套接字和java序列化返回。然后在数据库中操作它们(例如:它们的元数据更新等)

我观察到本机java序列化当前是瓶颈,因此我想摆脱它。在考虑了Kryo和手动基准测试后,我认为Protobufs是替换序列化的好方法。

系统现在将事务和语句定义为protobuffers。

我的问题是:在收到服务器端的protobuffer后,创建常规事务对象,修改和操作它,然后填充新的protobuf以发送回客户端,或者更高效是否最好直接在protobuf上操作(我在服务器上对事务执行的操作涉及更新列表等)。

或者,最好是将Kryo用于这种用例吗?

1 个答案:

答案 0 :(得分:0)

我怀疑从长远来看,你会发现拥有自己的业务对象,你的代码主要用于工作,并保持在inteface代码中的protobufs最适合你。

这是我的经历。为什么呢?

首先,您不会在业务对象中得到任何protobuf特定类或工件。这使得在业务代码出现问题时更容易调试,因为您可以排除由不存在的protobuf代码引起的任何错误。此外,这些业务类不会导入任何使事情更简单的protobuf东西。

其次,在进行转入和转出传输时,用于转换到protobufs和从protobufs转换的代码变成了一小部分代码可以转换的东西。您可能需要业务方面的复杂对象图,但只需要传输方的参考。例如,您可能在业务逻辑中将完整的客户对象附加到发票。这有时候很方便。但是当转出时,您可能只想放置客户ID(如果其他系统具有客户数据库访问权限),或者您可能只想为面向Web的系统添加名称,电话和邮政编码,只需将其显示为用户。

这些都可以归结为更好地分离关注点,更好地隔离系统组件和更好的封装。