在C ++中实现客户端持久性管理器

时间:2013-10-04 14:52:26

标签: java c++ orm persistence intersystems-cache

我有一个2层应用程序(一个用C ++编写的重客户端连接到面向对象的数据库)。数据库本身是InterSystems Cache',它实际上是 数据库应用程序服务器 Cache'也是MUMPS解释器。)

出于性能原因,我想设计一个客户端缓存(或者更常见的是持久性管理器)。

InterSystems Cache'确实有像ODBC / JDBC这样的“快速”接口,但我正在处理许多遗留客户端代码,这些代码已经使用Object Binding多年了。所以我无法改变客户端的架构,但必须加快协议的速度。协议本身最初是非常详细:所有类/方法/属性名称都是逐字发送的,因此,例如,创建单个对象服务器端会“花费”50k流量。

服务器端的类支持继承,并且可以具有属性和方法。因此,使用缓存'对象绑定意味着我可以:

  1. 创建和删除对象,
  2. 读取和更新属性,
  3. 致电方法。
  4. 这里重要的是,服务器端方法调用通常执行代码,其性质是客户端未知的。由于此代码可能会改变数据库中对象的状态,因此在方法调用之后可能需要使客户端缓存无效。这与常规CRUD操作不同,客户端可以跟踪对对象所做的更改,并相应地更新缓存。

    问题:

    1. 哪些Java持久性管理器值得关注,以便我可以接受这个想法并重新发明轮子?我在考虑J2EE实体bean,JPA和内存网格,例如Coherence
    2. 哪些C ++持久性管理器可以适应使用InterSystems API?特别是,Protocol Buffers适合我的任务吗?
    3. 哪些方法可用于“压缩”最初在线上非常详细的协议?我的第一个调用是压缩流量和散列(编码)类/方法/属性名称(以便通过网络发送包含整数而不是名称的TLV结构)。还有其他想法吗?
    4. 您可以建议哪些适用于我的案例的企业模式(特别是C ++)阅读?

1 个答案:

答案 0 :(得分:1)

ORM框架(Wt :: Dbo)似乎做了这个工作:

http://www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html

Wt看起来像是一个用C ++实现现代Web应用程序的非常有趣的工具。