海量数据存储与处理

本最佳实践要解决的主要问题是阿里云产品如何满足用户对海量数据存储与处理的需求,如何应对海量数据对关系型数据库的读写压力。
本最佳实践包括如下方面:

1) 数据库分表
分表是分散数据库压力的好方法,分表就是将一个表结构分为多个表。数据库分表分为两个维度,分别为纵向分表及横向分表。

· 纵向分表
纵向分表本质是将冷热数据分离存储,例如根据数据的活跃度将一个表的内容划分为多个表(因为不同活跃的数据,处理方式是不同的),或者使用不同配置的数据库服务器存储冷热数据。
举例:一个会员信息表,存储了用户名、密码、手机号、通讯地址、工作单位、工作职位等,用户需要输入用户名/密码才能登录系统。在这个表中,用户名和密码就是活跃度较高的字段,而其他字段活跃度较低。出于性能的考虑,可以违背数据库第三范式将上表拆分为两个表。将活跃度较高的表存储在较高配置的数据库机器,活跃度较低的表存储到较低的数据库机器。

· 横向分表
将数据量大的表横向切割为同样结构的不同表,表结构是完全一样,但根据某些特定的规则来切分原表,保证新生成的单表容量不会太大,从而来保证单表的数据处理能力。阿里云即将推出DRDS服务帮助用户数据库进行横向分表,支持hash取模以及list两种分表策略。DRDS对应用程序完全透明,兼容MySQL协议。

2) 按业务分区
根据业务场景特点,划分为多个数据库,实现数据资源的有效均衡。每个业务采用一个RDS节点进行存储。单个RDS节点最大可支持24G内存,1T硬盘最大QPS可达10000。

3) 多线程并发处理
单台RDS服务器处理数据库连接请求时可利用多线程机制,同时搭配适当的分库分表操作,这样可以将数据资源的访问进行有效的均衡,尽量减少各个业务数据之间的访问干扰,从而更为有效地利用RDS的多线程机制。

下面我们将一个社交类网站的实际案例来阐述本最佳实践点的实施步骤。该社交类应用是一个需要大量数据库操作的网站,主要包括三个部分:
1)用户登录认证类基本信息数据库
2)用户的个性设置类信息数据库
3)用户发言类数据库

该网站的数据库分类情况如下图所示:

该网站的数据库分类情况

首先根据网站的业务类型将数据库进行业务分区,分为认证模块数据库、用户个性设置类数据库、好友关系数据库以及用户言论活动信息的数据库。
1)认证模块数据库
认证模块主要存储用户的用户名、密码以及注册时的一些基本信息,信息量较小,一个用户只有一条记录,所以将认证模块放在一个单独的RDS即可。
2)用户个性设置数据库
用户个性设置包括设置自己的昵称、个性宣言、个人页面风格皮肤、好友关系以及联系人等等信息,每个用户会有多行记录保存,存储的数据量较大。对于这类应用的数据库可根据用户名hash值进行横向分表,可根据自己的业务量选择多个RDS进行部署。
3)用户言论数据库
用户言论数据库存储用户的一些观点分享、对于某些事件的看法评论信息等等。随着网站的运行,此类数据会越来越多,往往很久之前发布的评论以及观点就很少被访问,而最近刚刚发布的评论观点访问热度就很高。针对此类类型的数据库可按照时间进行纵向分表,将最近一月的热数据存储在配置较高的RDS中,将很久以前的访问频度较低的数据存储到配置较低的RDS中,从而达到支持业务高速发展的同时又能够很好的控制成本。

海量数据存储与处理:等您发表观点呢!

发表评论


快捷键:Ctrl+Enter