高性能的大型系统经验 -- 将数据分类、并缓存

    对大多数大型系统而言,数据库往往是最容易出现瓶颈的地方,而通过使用恰当的缓存技术可以非常有效地减轻数据库的负载。
    
    将系统中用到的所有数据进行分类,分别对待不同种类的数据而不是一视同仁,有利于正确地做出缓存哪些数据、以及如何缓存的决策。

    我通常将系统中用到的数据分为四类:恒定不变的数据,只发生增量的数据,偶尔改变的数据,经常改变的数据。

(1)对于恒定不变的数据,采用普通的恒定缓存,即这种缓存在系统启动后初始化一次就不再改变了。
(2)对于只发生增量的数据,采用智能式的增量缓存,如果所要的数据在这种缓存中不存在,则该缓存会从其它地方(如数据库)自动加载目标对象并缓存起来。
(3)对于偶尔改变的(但不是十分敏感的)数据,采用定时刷新的缓存,如每隔10分钟刷新一次。
(4)对于经常改变的数据,则又可以进一步细分:
       将数据中变动部分和非变动部分区分开来,而非变动部分又可以封装为单独的对象,从而对该“部分”对象采用上述三种方式之一进行缓存。

    如此,便可最大程度的利用缓存,从而可以有效提高系统性能,并明显减轻数据库和网络负载。

时间: 2024-10-03 16:13:08

高性能的大型系统经验 -- 将数据分类、并缓存的相关文章

高性能的大型系统经验 -- 数据查询与分页

     本文讨论针对大型数据表(记录数2千万以上)进行数据查找与分页的可行的高效方案.      首先,恰当的索引是必须的.      没有索引的支持,在大数据表中进行查询是不可思议的.关键点在于如何创建索引? 1.建立正确的聚集索引(clustered index).由于聚集索引的叶子节点就是记录本身,所以选择哪个索引为聚集索引非常关键.通过聚集索引扫描记录更快. 2.根据你的系统的需求总结常用的单个查询条件或综合性的查询条件,对于常用的单个查询条件建立单列索引,对常用的综合性查询条件建立联

亿级流量电商详情页系统的大型高并发与高可用缓存架构实战

对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中最常见的一种应用技术.然而,行业里很多朋友对缓存技术的了解与掌握,仅仅停留在掌握redis/memcached等缓存技术的基础使用,最多了解一些集群相关的知识,大部分人都可以对缓存技术掌握到这个程度.然而,仅仅对缓存相关的技术掌握到这种程度,无论是对于开发复杂的高并发系统,或者是在往Java高级工程师.Java资深工程师.Java架构师这些高阶的职位发展的过程中,都是完全不够用的.技术成长出现瓶颈,在自己

为什么我们要开源自己研发的高性能容器编排系统 Eru2

本文讲的是为什么我们要开源自己研发的高性能容器编排系统 Eru2[编者的话]原则上来说 Eru 只是将 Docker 作为容器最小单元引擎,并不做过强的耦合和依赖.通过架构层面上的设计和优化,使得 Eru 可以支持上千甚至上万台物理机器集群,满足小型到大型公司平台层面的调度编排需求. [烧脑式Kubernetes实战训练营]本次培训理论结合实践,主要包括:Kubernetes架构和资源调度原理.Kubernetes DNS与服务发现.基于Kubernetes和Jenkins的持续部署方案 .Ku

如何设计一个高性能的日志系统

问题描述 如何设计一个高性能的日志系统 需求: 1.系统采用B/S架构,要求能够记录客户端的任何事件,比如单击了某个按钮或者链接: 2.要求能够记录用户每次操作时后台代码使用到的SQL和参数,比如添加数据时的SQL语句和具体的Parameter: 3.将1和2串联或者合并起来,意思就是我在分析日志时,能够在查询客户端事件时也能看到后台的SQL语句和参数: 4.2年内数据达到20亿条记录,采用什么样的数据库比较合适,非关系行的MongoDB还是关系型的Oracle: 解决方案 4.什么数据库都没关

中大型系统架构组合之EF4.1+ASP.NET MVC+JQuery

EF4.1已经推出有一段时间了,它给人的第一吸引力就是比LINQ TO SQL更加适合大型项目,它的封装更加紧密,操作也更加灵活,而且弥补了LINQ To SQL的最大不足,可以支持多种数据库.   EF4.1+ASP.NET MVC+JQuery 第一先说一下EF4.1: 我们数据层OR/Mapping采用EF4.1来实现数据的持久化 我们必须要对EF4.1进行一个封装,把对数据的操作限制在DATA层,不能向上一层暴露太多实现的细节,这样作是安全的,层次分明的. 对数据操作有一个泛型接口来实现

高性能服务器架构(三):分布式缓存

原文链接:http://mp.weixin.qq.com/s/BxQB44DQZhDQr1dYU3qTIA 在分布式程序架构中,如果我们需要整个体系有更高的稳定性,能够对进程容灾或者动态扩容提供支持,那么最难解决的问题,就是每个进程中的内存状态.因为进程一旦毁灭,内存中的状态会消失,这就很难不影响提供的服务.所以我们需要一种方法,让进程的内存状态,不太影响整体服务,甚至最好能变成"无状态"的服务.当然"状态"如果不写入磁盘,始终还是需要某些进程来承载的.在现在流行的

win7系统怎么清除360浏览器缓存

  win7系统怎么清除360浏览器缓存 1.打开360浏览器,点击主页的工具栏->选择清除上网痕迹; 2.在弹出的对话框中选择清除时间和所要清除的记录,勾选退出浏览器时完全清楚勾选的痕迹,点击立即清理; 3.清理完毕时显示出的界面如图. 解决方法二: 1.打开360浏览器->打开最右边的工具栏->选择工具->internet选项; 2.在弹出的internet属性对话框中选择常规->浏览历史记录->选择删除; 3.在弹出的浏览历史记录的对话框中选择所要清除的记录,点击

Win8系统怎么删除应用商店缓存垃圾?

  Win8系统怎么删除应用商店缓存垃圾?         具体方法如下: 1.按Win键+Q键,开启搜索(应用),输入WSReset,直接按回车就可以了,系统会自动清理; 2.很快就清理完成可以进入商店主页了. 补充说明:不建议用户使用第三方的软件来清理应用商店缓存,这样会对系统造成一定的错误.

xp系统如何开启cpu二级缓存?

  xp系统如何开启cpu二级缓存?          方法一: Windows优化大师打开二级缓存的操作步骤: 1.启动Windows优化大师,选择"系统性能优化"; 软件名称: Windows优化大师 V7.99 Build 13.0604 绿色去广告特别版 软件大小: 5.64MB 更新时间: 2013-06-07 2.在"文件系统优化"中,最上面就是关于CPU二级缓存的设置项. 3.拖动滑块到相应的位置后,保存设置并重新启动计算机. 方法二: 注册表法打开二