0

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

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

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

系统现在采用定义为 protobuffers 的事务和语句。

我的问题是:在服务器端收到 protobuffer 后,创建一个常规的 Transaction Object,修改和操作它,然后填充一个新的 protobuf 以发送回客户端是否更有效,还是更可取直接对protobuf进行操作(我对服务器中事务的操作涉及更新列表等)

或者,在这样的用例中使用 Kryo 会更好吗?

4

1 回答 1

0

我怀疑从长远来看,您会发现拥有自己的业务对象,您的代码主要处理这些对象并将 protobufs 保留在接口代码中最适合您。

这是我的经验。为什么?

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

其次,在进行输入和输出传输时,您用来与 protobufs 相互转换的代码变成了一小段代码可以转换事物的地方。您可能需要业务方面的复杂对象图,而只是传输方面的参考。例如,您可能有一个完整的客户对象附加到业务逻辑中的发票。这有时很方便。但是在转出时,您可能只想输入客户 ID(在其他系统具有客户 DB 访问权限的情况下),或者您可能只想输入面向 Web 的系统的姓名、电话和邮政编码,该系统仅将其显示到用户。

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

于 2013-05-29T17:22:10.793 回答