我有一个 2 层应用程序(一个用 C++ 编写的重型客户端,它连接到面向对象的数据库)。数据库本身就是InterSystems Cache',它实际上既是数据库又是应用服务器(Cache'也是一个MUMPS解释器)。
出于性能原因,我想设计一个客户端缓存(或更一般地说,一个持久性管理器)。
InterSystems Cache确实具有像 ODBC/JDBC 这样的“快速”接口,但我正在处理许多已经使用对象绑定多年的遗留客户端代码。所以我不能改变客户端的架构,但必须让协议更快。协议本身最初非常冗长:所有类/方法/属性名称都是逐字发送的,因此,例如,创建单个对象服务器端“花费”我 50k 流量。
服务器端的类支持继承,可以有属性和方法。所以使用缓存的对象绑定意味着我可以:
- 创建和删除对象,
- 读取和更新属性,以及
- 调用方法。
这里重要的是,服务器端方法调用通常执行代码,客户端不知道其性质。由于此代码可能会更改数据库中对象的状态,因此可能需要在方法调用后使客户端缓存失效。这与常规 CRUD 操作不同,在常规CRUD操作中,客户端可以跟踪他对对象所做的更改,并相应地更新缓存。
问题:
- 哪些 Java 持久性管理器值得一看,以便我接受这个想法并重新发明轮子?我正在考虑J2EE实体 bean、JPA和内存中的网格(如Coherence)。
- 哪些 C++ 持久性管理器可以适应使用 InterSystems API?特别是,Protocol Buffers是否适合我的任务?
- 哪些方法可以用来“压缩”原本在网络上非常冗长的协议?我的第一个调用是 ZIP 压缩流量和散列(编码)类/方法/属性名称(以便通过网络发送包含整数而不是名称的TLV结构)。还有其他想法吗?
- 您能建议什么关于适用于我的案例的企业模式(特别是 C++)的读物?