`
Qieqie
  • 浏览: 338178 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

设计的一个考虑点:区分数据的常变部分和不常变部分

阅读更多
做系统时,开始阶段设计领域类时,除了从数据结构、对象模拟的角度出发,特别是访问量大的时,还应该考虑数据的实际应用场景,区分数据的常变部分(或称瞬时状态)和不常变部分。将常变部分和不常变部分剥离,能更好为其制定适当、高效的访问策略。

我以陶宝商品为例子。陶宝商品的不常变部分是:商品的基本信息、状态;常变部分是:商品浏览次数。
一般的设计:
用户每次浏览某个商品时,服务器总是准备好上面的所有数据,一次向浏览器flush显示出来。

可是,陶宝不是这样做:陶宝的一个商品页面并不是一次由服务器准备好,统一向浏览器flush完成的。
它把页面分为若干块,不同块的数据从不同的服务器请求:
图片有图片服务器(这没什么特别的,不是本贴的主要说明点)
样式有样式服务器(这没什么特别的,不是本贴的主要说明点)
基本信息有基本信息服务器(Web服务器)
商品浏览次数有“次数服务器”(可能是另外的Web服务器)
商店店主有店主在线状态服务器
。。。

这里作为常变数据的商品浏览数据并不是随商品数据合为一块发送到浏览器的。
OK。这样做到:各部分可以很好利用各部分的特性,做扩展、做缓存、做即时性的不同承诺。

不常变数据可以充分利用缓存(考虑本地缓存) + 即时持久化,常变数据可以使用集中数据缓存器 + 隔时段持久化。特别是一些瞬时状态,如在线状态的,基本上就不需要持久化。
像商品浏览次数这种每次只要用户浏览就需要变更的,只需要update常变数据服务器,而不用立即持久化。
这样,那些不常变数据的缓存的作用和效果将极其明显。

页面在达到用户浏览器时,再通过ajax技术,从常变数据服务器获取那些常变数据。
(这个时间段,该数据将显示空白,不过这一点也不影响用户体验):

在设计表时,不必一定要把“浏览次数”列设计在基本信息表里。“浏览次数”之类的数据可以是单独的服务器,以商品Id作为其身份证异步地从浏览器发起向那个单独服务器去取。
同样,店主表基本上也可以不需要在线状态的字段。

--------------------
只要把缓存作为一项高级决策来做,不要因为缓存中间件提供简单的API,就想用就用,不想用就不用,一般就不会太失望。




  • 描述: 陶宝ajax请求“商品浏览量”服务器瞬间该数据是空白的,但不一会该数据就很快到达显示出来
  • 大小: 152.6 KB
分享到:
评论
5 楼 bloodrate 2008-06-11  
把不变的信息放到缓存里那要多大得内存才够啊,分布式缓存。。
确实成本比较高,那你说本论坛得“性别”“积分”“来自”不怎么变,文章数经常变,那么分别存储么,分别存储可能带来多表查询啊,如果是小并发量,还真看不出区别
4 楼 laiseeme 2008-05-19  
taobao是用什么东西去映射这些在不同的服务器上面的数据的呢?
3 楼 jbon 2008-05-19  
不错的设计,耦合度明显比将两者设计在一起要来得低
2 楼 javachs 2008-05-05  
所有的设计模式要达到的目的,就是为了解决你那个变与不变的问题。
1 楼 xly_971223 2007-07-24  
对于海量数据的应用确实是一个不错的解决办法 但是成本将会很高 能这样做的公司都是些门户网站之类的

相关推荐

    软件设计规范

    软件项目的3个部分:(把3个阶段由纵向横过来,进行统筹) 分解文档,集成平台,可维护性要求。 软件设计必须有自说明特性。不能对文档产生依赖性。软件代码中合适的地方,需要对文档进行恰如其分说明。原则是,每...

    数据库基础理论模型(共53张PPT).pptx

    1. 数据库系统的设计和开发离不开数据模型。 2. 数据模型的设计直接影响到数据库的性能、可扩展性和可维护性。 3. 数据模型是数据库系统的核心部分,它描述了数据的结构、组织和关系。 数据库基础理论模型是数据库...

    软件项目文档全套模板-数据库设计.doc

    安全保密设计:说明在数据库的设计中,将如何通过区分不同的访问者、不同的访问类型和不同的数据对象,进行分别对待而获得的数据库安全保密的设计考虑。 本文档提供了一个完整的数据库设计方案,涵盖了数据库设计的...

    基于记录的应用程序设计

     提出当前的问题:一个问题可以有一行或多行文本组成,这些文本可以用字符串表示;  从学生处获取答案:答案也可以由字符串表示。  查看为该问题准备的一系列答案:如果学生的答案在上述答案中列出,则参考...

    基于记录应用程序设计

     提出当前的问题:一个问题可以有一行或多行文本组成,这些文本可以用字符串表示;  从学生处获取答案:答案也可以由字符串表示。  查看为该问题准备的一系列答案:如果学生的答案在上述答案中列出,则参考...

    大屏数据可视化源码-建议收藏!数据可视化大屏设计必备步骤.pdf

    可进⾏分辨率减半设计 ⼤屏系统⽰意图 所以,⼀般我们也不建议⼤屏⽤⾃适应⽅式,如果是⾃适应,系统就会按各⾃模块的宽⾼⽐先计算实际值,⼀旦⼤屏内容布局较多或指标计 算复杂,则会⾮常影响⼤屏计算性能和实时...

    数据库系统概论第四版答案

    根据模型应用的不同目的,可以将模型分成两类或者说两个层次:一类 是概念模型,是按用户的观点来对数据和信息建模,用于信息世界的建模,强调语义表达能 力,概念简单清晰;另一类是数据模型,是按计算机系统的观点...

    PCB高速设计信号完整性5个经验

    通常每个电路设计中射频电路均被认为是最重要的部分,然而一些比射频更高频率的数字电路设计反而忽视了阻抗和终端匹配。由于阻抗失配产生的几种对数字电路致命的影响,参见下图: a.数字信号将会在接收设备输入端...

    一份平平无奇的web端表格设计需求文档说明.docx

    Web 端表格设计需求文档...本文档旨在为产品经理提供一份详细的 Web 端表格设计需求文档说明,涵盖了表格功能的 PRD、交互和 UI 说明、其他考虑因素等多个方面的内容,旨在帮助产品经理更好地撰写关于表格的需求文档。

    会议信息管理系统详细设计

    在开发这个软件系统的漫长过程中,面对着极其错综复杂的问题,人的主观认识不可能完全符合客观现实,在本次设计过程中,我采用循环测试法,力求在每个阶段结束之前通过严格技术审查,即每完成一个功能,就进行测试,...

    区分服务Diffserv在高性能路由器中的实现.pdf

    Diffserv的架构主要包括三个部分:数据包分类机制、流量控制机制和路由机制。数据包分类机制负责将网络流量分类为不同的服务类别,而流量控制机制负责控制和管理网络流量,确保关键应用程序的优先权。路由机制负责...

    电商系统之订单设计篇.docx

    订单设计时包含几个大的方向需要考虑,这些内容决定了订单系统的稳定性和可持续性。订单的多样性特点主要由来源和操作的多样导致了订单多样性点。 订单字段订单字段包含了订单中需要记录的信息,他的作用主要用于...

    面向对象设计-面向对象设计系统用户界面设计-移动App软件GUI设计.pptx

    此外,移动终端设备的运行资源(CPU、内存)是有限的,对于一个需求较多数据处理的App应用来说,设计一个快速运行的App用户界面具有较大挑战性。 移动应用市场正在快速变化,创新性与创造力使这个生态系统高度活跃...

    数据库系统基本知识点整理.docx

    数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文中区分“数据库系统”和“数据库”,不要引起混淆。 ( ...

    什么是VLAN

    是指为了适应特别的VLAN网络,根据具体的网络用户的特别要求来定义和设计VLAN,而且可以让非VLAN群体用户访问VLAN,但是需要提供用户密码,在得到VLAN管理的认证后才可以加入一个VLAN。  * 以上划分VLAN的方式中,...

    实时数据库系统的设计浅谈.docx

    本系统采用面向对象的设计思想,采用4种数据结构来表示上述8种数据类型,并且使用类中的一个成员变量来区分是 IO 变量还是内存变量。 实时数据库系统的设计浅谈全文共3页,当前为第2页。 实时数据库系统的设计浅谈...

    班级管理信息系统数据库设计说明书.doc

    4.2安全保密设计 如何通过区分不同的访问者、不同的访问类型和不同的数据对象,进行分别对待而获得 的数据库安全保密的设计考虑。 ----------------------- 班级管理信息系统数据库设计说明书全文共2页,当前为第1...

    基于Django的智能题库系统设计.pdf

    本文的主要贡献是设计了一个智能题库系统,实现了自动组卷、批量录入试题和reports分析功能。该系统可以帮助教师更好地管理试卷和题库,提高教学质量和效率。 本文的结论是智能题库系统的设计和实现对于提高教学...

    DES数据加密

    利用rsa公钥,使用rsa算法加密这个密钥‘12345’,并把它放在要加密的数据的前面(可能后面跟着一个分割符或文件长度,以区分数据和密钥),然后,使用对称加密算法加密正文,使用的密钥就是‘12345’。当对方收到时...

Global site tag (gtag.js) - Google Analytics