网站建设-数据库纵向扩展

时间:2021-08-07 03:31:04

    对于大型的网站建设,我们之前已经说了如何根据服务器负载量来横向扩展数据库。抛开关于面向服务(SOA)和面向资源(ROA)概念的争论,深入了解它们的基本前提就会发现,至少它们都有一个共同点,都要求架构师和程序员考虑架构中的职责拆分。大体上就是采用动词(服务)和名词(资源)的概念来实现拆分。

    首先,我们先看看怎么用动词拆分网站。如果我们的网站是相对简单的电子商务网站,那么可以用动词吧它拆分为注册,登录,搜索,浏览,查看,加入购物车,购买。在这些事务中,每一个事务所需要的数据可能都与其他事务需要的大不相同。例如,注册和登录需要的数据是一样的,但是其实它们都需要一些不同的数据。例如,在网站建设时,经常在实现用户注册时需要检查用户ID和邮箱是否已经被其他人注册了,而登录时则不需要。注册时可能要把大量数据写入持久化数据存储中,而登录则是用户身份的单一读取。

    网站建设时在研究搜索和登录这两种截然不同功能时,依据动词拆分的扩展方法的不同之处以及带来的好处就更加明显了。在登录时,我们关心的通常是验证用户身份,可能会建立某些会话。而对于网站建设者来说,必须清楚的是,登录功能关心的是用户,因此需要缓存用户数据并与之进行交互操作。另一方面,搜索关心的是查找数据项,而最重要的是用户意图以及我们存储的数据,属性,参数等。拆分这些数据集,可以使我们在系统有限的内存中缓存更多的数据。而且,由此产生的高缓存命中率也会加快事务的处理。在后端的持久性系统中拆分数据,就能够在这些系统中分配更多的专用内存,加速对客户请求的响应。由于更好的利用了资源,这两个系统都会相应的更快。显然,这是纵向扩展数据库最容易的方法,受内存限制也少。

网站建设-数据库纵向扩展

按事务拆分数据库

    但是,如果我们把用户和产品信息合并在一起,例如向客户推荐产品,又该怎么办呢,这是另外一种需要拆分数据和事务的情况。网站建设时,我们经常会加入一种推荐服务,根据用户过去的购买行为,与具有相似购买行为的用户进行异步评估。这样可能会把数据移植到登录功能或搜索功能。或者也可能是用户浏览器发出的一个单独同步调用,显示在专门分配给这个推荐调用的区域。

    现在我们可以考虑如何用名词来拆分了。还是拿电子商务的网站建设例子来说,我们可以标识一些最终会对其进行操作的资源。我们可以认为电子商务网站是由产品目录,产品库存清单,用户帐户信息,市场营销信息等构成的。采用名词拆分的方法,可以根据这些分类进行拆分数据,然后定义一套高级函数,如创建,读,更新和删除等,对这些元数据进行操作。

    在较复杂的网站建设时,这样的纵向拆分不仅适用于扩展数据库,还适用于扩展代码库。由于服务和资源被拆分了,那么执行的操作和执行它们所必需的代码也会被拆分。这样的做法与云计算的分布式计算网络很类似。这就意味着可以把开发复杂网站系统的大型编程小组拆分成各个子系统,程序员不用再担心自己必须是系统每一部分的全能专家了。当然,由于可以拆分服务,所以扩展事务也就相当容易了。