Web系统中的数据库系统

来源:互联网 发布:java水晶塔防 编辑:程序博客网 时间:2024/06/01 10:05

<!-- /* Font Definitions */ @font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:"Cambria Math";panose-1:2 4 5 3 5 4 6 3 2 4;mso-font-charset:0;mso-generic-font-family:roman;mso-font-pitch:variable;mso-font-signature:-1610611985 1107304683 0 0 159 0;}@font-face{font-family:Cambria;panose-1:2 4 5 3 5 4 6 3 2 4;mso-font-charset:0;mso-generic-font-family:roman;mso-font-pitch:variable;mso-font-signature:-1610611985 1073741899 0 0 159 0;}@font-face{font-family:Calibri;panose-1:2 15 5 2 2 2 4 3 2 4;mso-font-charset:0;mso-generic-font-family:swiss;mso-font-pitch:variable;mso-font-signature:-1610611985 1073750139 0 0 159 0;}@font-face{font-family:"/@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-unhide:no;mso-style-qformat:yes;mso-style-parent:"";margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;mso-pagination:none;font-size:10.5pt;mso-bidi-font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;mso-font-kerning:1.0pt;}p.MsoTitle, li.MsoTitle, div.MsoTitle{mso-style-priority:10;mso-style-unhide:no;mso-style-qformat:yes;mso-style-link:"标题 Char";mso-style-next:正文;margin-top:12.0pt;margin-right:0cm;margin-bottom:3.0pt;margin-left:0cm;text-align:center;mso-pagination:none;mso-outline-level:1;font-size:16.0pt;font-family:"Cambria","serif";mso-ascii-font-family:Cambria;mso-ascii-theme-font:major-latin;mso-fareast-font-family:宋体;mso-hansi-font-family:Cambria;mso-hansi-theme-font:major-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:major-bidi;mso-font-kerning:1.0pt;font-weight:bold;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph{mso-style-priority:34;mso-style-unhide:no;mso-style-qformat:yes;margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;text-indent:21.0pt;mso-char-indent-count:2.0;mso-pagination:none;font-size:10.5pt;mso-bidi-font-size:11.0pt;font-family:"Calibri","sans-serif";mso-ascii-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-fareast-font-family:宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:Calibri;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;mso-font-kerning:1.0pt;}span.Char{mso-style-name:"标题 Char";mso-style-priority:10;mso-style-unhide:no;mso-style-locked:yes;mso-style-link:标题;mso-ansi-font-size:16.0pt;mso-bidi-font-size:16.0pt;font-family:"Cambria","serif";mso-ascii-font-family:Cambria;mso-ascii-theme-font:major-latin;mso-fareast-font-family:宋体;mso-hansi-font-family:Cambria;mso-hansi-theme-font:major-latin;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:major-bidi;font-weight:bold;}.MsoChpDefault{mso-style-type:export-only;mso-default-props:yes;mso-bidi-font-family:"Times New Roman";mso-bidi-theme-font:minor-bidi;} /* Page Definitions */ @page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:595.3pt 841.9pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:42.55pt;mso-footer-margin:49.6pt;mso-paper-source:0;layout-grid:15.6pt;}div.Section1{page:Section1;} /* List Definitions */ @list l0{mso-list-id:338507074;mso-list-type:hybrid;mso-list-template-ids:2024149974 -1610186476 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}@list l0:level1{mso-level-tab-stop:none;mso-level-number-position:left;margin-left:39.0pt;text-indent:-18.0pt;}@list l1{mso-list-id:739059978;mso-list-type:hybrid;mso-list-template-ids:2069531506 1723494014 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}@list l1:level1{mso-level-tab-stop:none;mso-level-number-position:left;text-indent:-18.0pt;}ol{margin-bottom:0cm;}ul{margin-bottom:0cm;}-->

Web系统中的数据库系统

         对于大型Web应用中,数据库系统必然会发展为数据库集群,差别只在于这个集群是手工维护,还是自动维护(开发数据库集群系统)。还有一些海量数据、海量访问的Web应用不仅仅只使用数据库作为唯一的数据存储模型,而是数据库系统、特型数据系统、Cache系统需要共同配合,这样的一个分布式系统如何保证数据的分布性和一致性。                                                                                            

1.      数据库集群解决什么问题?

2.      分布式系统中的分布、同步问题

 

假设有一个论坛系统,数据库中至少有Forum/Thread/Post表,设计如下

Forum

id

Int

Auto increase

name

Char(64)

 

creater

 

 

Create_time

 

 

…..

 

 

 

Thread

Id

Int

Auto increase

Forum

Int

Foreign key

Title

Char(64)

 

Creater

 

 

Create_time

 

 

…..

 

 

 

Post

id

Int

Auto increase

Forum

Int

Foreign key

Thread

Int

Foreign key

name

Char(64)

 

creater

 

 

Create_time

 

 

…..

 

 

 

假设随着产品流量增长、数据量的增长,数据库系统可能发生的变迁如下图:

最初为单机单数据库,再演化为多机多数据库(此时的数据库是同质的),再继续演化、数据库内部表的拆分(这里方法很多,比如1.数据库中不同表的拆分2.同一个表的拆分等等 3.相同数据的不同冗余方式)。

 

在单机单数据库演化为多机多数据库,主要目的解决读写均衡问题,此时读请求多于写请求,采用一注多从模式,将读请求分发到从库,写请求分发到主库,主从之间进行同步。

 

进行表的拆分目的有,1.单表压力过大,比如Forum可以按照Forum id 取模拆分等。2.业务需求导致某些表压力不均衡,比如:Thread表、Post表压力都比较大,可以分布在不同的机器上。3.其他。

 

细心的读者获取会发现,至此是依据性能需求,调整数据库的拆分部署、表的拆分部署等等工作,如果我们有这样一个数据库集群软件,他能智能地根据应用的需求变化调整机器数量、调整数据库的部署,当然还应具备单点恢复、宕机冗余、灾难恢复、统一接入等等功能,其实这就是云存储(数据库的云存储模型)。坦言,目前接触的一些大型互联网公司,mysql的集群系统还没有真正形成。

 

继续向前发展,数据库性能不够时,会产生Cache来承载数据库的性能瓶颈。此时存在这样问题:(这些问题暂时不讨论,在Cache部分讨论)

1.      Cache时效性。如何与数据库数据同步,过期数据等等。

2.      Cache粒度。最典型的讨论是Cache翻页失效。

3.      其他

 

继续向前发展,是否是所有的数据交给数据库存储就能搞定,当然不是。以论坛为例,假设forum中的thread列表按照最后回复时间排序,某fourm中的thread数量过亿,此时怎么处理?1.历史存档区(这是产品设计上的处理方式)。技术上呢?拆表?因为该forum下的thread都需要参与排序,将thread列表拆成多个表来存储也不是很合适。此时,我想说明的问题是,在极端情况下,通用系统不能满足产品需求(数据库即是通用系统),必须有开发特型系统。百度贴吧、搜狐的论坛在thread列表处采用特殊开发的数据存储系统。问题来了,此时该如何同步数据?

方法一,以数据库为主,同步到特型系统

方法二,同步机制的系统

在大型Web应用中采用更多的是方法二,因为该同步机制自我开发,功能会更丰富和全面,可控性更强,后端数据系统仅仅承担数据的存储角色。方法一,主要依附于数据库的同步机制,可控性较差,数据库不仅承担数据的存储角色还承担了同步角色。自主开发同步机制系统时,也有一些开源软件可以借鉴。(其中定义Group概念,相同Group下的组件需要保持状态一致)。

到这儿,我们在讨论什么?其实我们在讨论分布式系统,我们通过分布式提高系统的承载量,同时又需要提供保证数据一致性的机制。

原创粉丝点击