如何设计一个日访问量千万级别的系统,谈oracle的高级设计和开发(1)

假如要开发一个日访问量百万级别、甚至千万级别访问量的互联网平台,性能和安全是首要考虑的因素。单从性能上讲,主要从以下几个方面考虑:

1)       硬件及网络设备;

2)       分布式、集群、读写分离、CDN加速等;

3)       使用优秀的开发框架,充分利用缓存机制;

4)       良好的数据库设计规划,包括数据库集群,关系型数据库+非关系型数据库结合;

5)       高性能的开发语言编程,特别是数据库部分的编程;

等等。

建设一个中大型互联网平台,是有技术含金量的,抛开硬件、网络环境不说,系统的性能很大程度上取决于系统构建是否合理,系统的设计是否优良,其中数据库端的设计和开发又是关键中的关键。

本人一直从事互联网平台的开发,也经常参与公司技术人员面试工作,针对数据库(oracle)部分我通常会问对方二个问题:

1)       请说明char(10)、varchar2(10)和nvarchar2(10)的区别;

2)       请说出十种以上对性能优化有影响的做法。

面试下来的结果往往让人失望,真正能将这两个问题回答比较好的凤毛麟角,这主要是因为即使是有很多工作经验的开发人员,能有机会接触大一点的互联网平台的机会并不多,更多的是做一些企业管理系统,几十个,几百个使用用户的平台,现在的服务器性能完全可以弥补设计上性能缺陷的不足。

为了能向高手们学习,针对oracle的设计及开发领域,本人将十来年互联网项目建设经验和大家分享,不当之处,请指出,大家相互交流学习。

开篇之前,先简要回答上面两个问题。

问题1)char(10)、varchar2(10)、nchar(10)和nvarchar2(10)的区别?

Char类型是定长的,不管你是存3个字母还是9个字母,char(10)都是存储10个字节,不够的部分用空格补充;varchar2(10)类型变长,存3个字母就是占三个字节。

错误观点:varchar2类型完全可以替代char,能有效节省数据的存储空间。

纠正:虽然从存储空间的角度考虑,varchar2确实比char合理,但系统在处理变长类型时,需要额外的资源开销,当然这种开销是非常微小的,可以忽略,但当数据量大,需要处理的数据多时,累积的开销就不能忽略了。因此,当业务明确字段长度时,应该明确定义为char类型,如邮政编码char(6)、性别char(1)[F表示女,M表示男]。

Nvarchar类型是针对不同字符集存储的字节数不同而产生的。假如要存放最多10个中文,那么就应该定义为Nvarchar2(10),而不是varchar2(20),因为在UNICODE下一个中文由2个字节表示,但编码为UTF-8时,很可能是3个字节,导致varchar2(20)无法存储10个中文。当需要存放中文内容的时候,建议定义为nchar或nvarchar2类型。

问题2)请说出十种以上对性能优化有影响的做法。

A)有效定义索引

B)普通表数据对应的表空间和索引表对应的数据表空间分离

C)数据量大的表做分区表设计

D)数据量大的表,依据业务实际情况分拆为当前表和历史数据表

E)字段多的大表依据业务实际情况分拆成多个表

F)合理的字段设计,如能char(2)的就不要定义为char(4),能number(6)明确定义的就不要定义为number或number(10),要记住1000万条记录的表,一个多一个字节就是多10M

G)合理利用oracle的缓存区,如将频繁访问的基础表数据加载到内存中

H)尽量减小事务的粒度

I)合理使用物化视图

J)必要时可以考虑表的压缩属性

待续。。。

时间: 2024-10-14 18:36:58

如何设计一个日访问量千万级别的系统,谈oracle的高级设计和开发(1)的相关文章

连载:告诉你如何设计一个日访问量千万级别的系统,谈oracle的高级设计和开发(2)

接下来正式开篇讲解在实际中大型项目中oracle的高级设计及开发的内容,以下讲解的oracle内容以及示例程序都是基于oracle11R2. 为了防止脱离实际地搞一堆理论,本人尽量用实际工作中的例子来说明问题,当然一些必要的理论有时候还是需要讲解,因为说的内容是高级设计及开发,入门级的SQL以及数据库概念将不会做详细讲解. 绝大多数IT项目,都是围绕数据库进行各种业务的,所以也有人将这类项目称为数据库项目,也就是说数据库是重点,有过项目设计经验的都知道,好的数据库设计,可以让开发和维护变得简单,

设计一个可扩展的用户登录系统

在Web系统中,用户登录是最基本的功能.如何设计一个可扩展的用户登录系统呢?本文结合实际案例对用户登录系统设计进行多维度的讲解,帮助各设计者在应用中将复杂变得简单. 来源:廖雪峰的官方网站,作者:廖雪峰. [一] 在Web系统中,用户登录是最基本的功能.要实现用户名+密码登录,很多同学的第一想法就是直接创建一个Users表,包含username和password两列,这样,就可以实现登录了: id | username | password | name等其他字段 ----+----------

系统设计题:如何设计一个电商平台积分兑换系统!

1.拉开差距的一类面试题 现在面试经常会遇到一类问题,面试官让你现场设计出某个业务场景下的一个系统,这个系统往往在业务或者技术上有一定难度,主要考察的是你多年积淀下来的系统设计的能力以及技术思维的能力. 类似的这类系统设计题目很多,比如: 请你设计一个秒杀系统 请你设计一个支撑百万用户的IM消息系统 请你设计一个微信红包系统 请你设计一个电商平台积分兑换系统 这些题目本身都是开放式命题,没有固定答案.遇到这种问题,一定不要慌,关键是在现场要思路清楚,有理有据,慢慢分析. 本文就其中一个问题:设计

goweb-如何设计一个Web框架

如何设计一个Web框架 前面十二章介绍了如何通过Go来开发Web应用,介绍了很多基础知识.开发工具和开发技巧,那么我们这一章通过这些知识来实现一个简易的Web框架.通过Go语言来实现一个完整的框架设计,这框架中主要内容有第一小节介绍的Web框架的结构规划,例如采用MVC模式来进行开发,程序的执行流程设计等内容:第二小节介绍框架的第一个功能:路由,如何让访问的URL映射到相应的处理逻辑:第三小节介绍处理逻辑,如何设计一个公共的controller,对象继承之后处理函数中如何处理response和r

mysql集群ndb和drdb那个比较好一些,我数据日访问量500w数据,数据达到T级别。

mysql集群ndb和drdb那个比较好一些,我数据日访问量500w数据,数据达到T级别 http://zhidao.baidu.com/link?url=dbpH5rI2o-XcscD8beSZrDvQxyG4vkUYFIRf58ARc-vKuuSA3ACvBYM3ewnazqqFEyeB2ZRPCAo3Rl0XUfcptq ndb是一种存储引擎,通常在mysql cluster中使用,MySQL Cluster 是一个基于NDB Cluster 存储引擎的完整的分布式数据库系统. 和Orac

程序员修仙之路--优雅快速的统计千万级别uv

菜菜,咱们网站现在有多少PV和UV了? Y总,咱们没有统计pv和uv的系统,预估大约有一千万uv吧 写一个统计uv和pv的系统吧 网上有现成的,直接接入一个不行吗? 别人的不太放心,毕竟自己写的,自己拥有主动权.给你两天时间,系统性能不要太差呀 好吧~~~ 定义PV是page view的缩写,即页面浏览量,通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标.网页浏览数是评价网站流量最常用的指标之一,简称为PV UV是unique visitor的简写,是指通过互联网访问.浏览这个网页的自

优雅快速的统计千万级别uv

定义 PV是page view的缩写,即页面浏览量,通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标.网页浏览数是评价网站流量最常用的指标之一,简称为PV UV是unique visitor的简写,是指通过互联网访问.浏览这个网页的自然人. 通过以上的概念,可以清晰的看出pv是比较好设计的,网站的每一次被访问,pv都会增加,但是uv就不一定会增加了,uv本质上记录的是按照某个标准划分的自然人,这个标准其实我们可以自己去定义,比如:可以定义同一个IP的访问者为同一个UV,这也是最常见的u

千万用户级别应用系统背后的SOA组件化容器

背景 在<我们的应用系统是如何支撑千万级别用户的>随笔中已经从“宏观”角度去介绍了整个应用系统的布局.组件化是整个系统由头到尾都始终坚持的一个设计原则,其中“SOA组件化容器”也是我们应用系统比较特别的一点.好东西肯定要分享,当然,这个好还只停留在自恋当中. 主题 上图为整个SOA容器(即WEB容器)的透析图.其中各个(黄色)组件的执行流程就是整条业务线程的执行流程.例如在我们应用系统中主要包括会话组件.安全拦截组件.业务验证组件.业务解析组件.业务服务组件.业务响应组件.日志组件等.也就是这

如何搭建千万级别用户的应用系统

基本情况 l AWS覆盖全世界12个国家区域 1. 每个区域都对应着世界上的一个物理位置,每个位置都有弹性计算云提供多个可用区域(Availability Zones),这些区域包含北美.南美.欧洲.中东.非洲.亚太等地区. 2. 每个可用区域(AZ)实质上是单个数据中心,尽管它可由多个数据中心构造. 3. 每个可用区域都拥有很强的隔离性,他们各自拥有独立的电源和网络. 4. 可用区域之间只能通过低延迟网络互相连接,它们可以相距5或15英里,但网络的速度相当快以至于你的应用程序像在同一个数据中心