首页 理论教育分布式数据库的对象Client/Server体系结构

分布式数据库的对象Client/Server体系结构

【摘要】:下面推荐两种主要的Client/Server体系结构:对象服务器体系结构和页面服务器体系结构。对象服务器体系结构里不要求服务器逐个将对象发送给客户端,可以成组发送。图15.7所示的是页面服务器体系结构,早期在页面服务器体系上的性能研究要多于对象服务器体系结构的。

下面推荐两种主要的Client/Server体系结构:对象服务器体系结构和页面服务器(page Servers)体系结构。它们之间的区别是在客户端和服务器间转移数据颗粒的不同,既是对象又是页面。

1.对象服务器体系结构

对象服务器体系结构是,客户端从服务器请求“对象”,服务器从数据库中检索到这些对象形态的数据,再将它们返还给提出请求的客户端,如图15.6所示。

由图15.6可知,在客户端和服务器都有一个对象管理器(object manager),它们的名称虽然相同,但功能不同,它们代表客户端与服务器之间的相互交互。

图15.6 对象服务器体系结构

在对象服务器里,服务器承担部分DBMS的服务,客户端基本上负责应用程序执行环境和对象管理功能某个层面的任务。因此,客户端拥有查询接口(query interface)、对象浏览器(object browser)和编程接口(programmatic interface)。服务器上有对象管理器查询优化器(query optimizer)、封锁管理器(lock manager)、存储管理器(storage manager)和页面缓存管理器(page cache manager)等。

对象管理器在客户端和服务器都具有复制功能。首先,它为方法执行提供上下文。在服务器和客户端间,对象管理器的复制功能使得方法能够在两者间执行。在客户端执行的方法可以调用其他方法的执行,这些方法可以随对象迁移到服务器上。其次,对象管理器也处理对象标识(无论是逻辑的、物理的还是虚拟的)的实现和对象的删除问题。在服务器上,对象管理器还提供对对象聚集和存取方法的支持。最后,客户端和服务器的对象管理器可以实现一个对象缓存(此外,在服务器里有一个页面缓存)。对象缓存在客户端借助本地存取改进系统性能。客户端仅当对象不在缓存时才需要访问服务器。用户请求的优化和用户事务的同步都在服务器上实现,结果对象在客户端上接收。

对象服务器体系结构里不要求服务器逐个将对象发送给客户端,可以成组发送。如果客户端不发送任何预取提示,则这样的一组对象与磁盘页面的邻接空间相对应。否则,该分组可能会包含来自多个不同页面的对象。依据分组的击中率,客户端可以动态增加或减小分组大小。在一些系统里,处理复杂对象需要考虑客户端返回更新对象给客户端的情况。这些对象必须安装到相应的数据页(称为主页)。如果服务器里不存在对应的数据页面(例如,服务器已经将之刷新出去了),服务器必须重新将这些对象读入这个主页。(www.chuimin.cn)

2.页面服务器体系结构

另一种组织方式是页面服务器体系结构,其中服务器和客户端传输的单位就是数据的物理单位页面服务器体系结构,如图15.7所示。

图15.7 页面服务器体系结构

此时,服务器和客户端传递的数据单位是页面或段(segment),而不是对象。页面服务器体系结构将对象处理分为客户端和服务器两部分。事实上,服务器不再对对象进一步加工,而是起增值存储管理器的作用。

图15.7所示的是页面服务器体系结构,早期在页面服务器体系上的性能研究要多于对象服务器体系结构的。直观来讲,让服务器而不是客户端理解“对象”概念,对提升性能有很多好处。一方面,服务器可以直接将封锁和日志功能用到对象上,让更多的客户端存取同一页面。当然,前提是对象要比页面小。另外一方面,通过服务器的过滤减少了给客户端的数据传输量。领航问题也是一个大问题。这里,处理领航问题可能是将应用代码转移到服务器,并在那里执行。

页面服务器简化了DBMS的代码,因为服务器和客户端都维护页面缓存,从磁盘到用户接口,对象的表示是一样的。这样,对象的更新只发生在客户端缓存里,当页面从客户端刷新到服务器时再反映到磁盘上。另外,还可以充分发挥客户端工作站的作用。这样服务器变成瓶颈的机会就比较小。服务器实现少量的功能,而为大量客户端服务。可以设计一些系统让服务器和客户端的工作分布由查询优化器来决定。页面服务器也可使用操作系统甚至硬件的功能来处理某些问题,如指针混乱(pointer swizzling),因为操作单位都是一个页面。