Linux + Nginx + mysql + python 平台。
每天有1000万小组话题,1600万组照片,200G结构化数据,800G文本,10T图片,2T日志,6T音乐,2T各种备份数据。
针对这些数据,我们需要考虑。
1、 可靠性。(持久性,一致性)
2、 可用性。
3、 伸缩性。
4、 性能。
5、 成本。
将这些数据再进行分类,可以分为结构化数据(关系,广播等),小文件(图片,文章,音乐等),大文件(备份,日志等)。
一、结构化数据。
(一)、特点。
1、结构固定。
2、可按条件查询
3、记录小而且多。
4、数据之间有关联。
5、可以批量查询。
(二)管理。采用mysql管理。
1、结构化存储。
2、多索引。
3、支持事务等。
(三)mysql实践一。
1、使用InnoDB引擎。
2、使用基本查询,外部join。(将join放在逻辑层去处理,这样大大提高了mysql查询的效率。)
3、通过memcache降低服务器端压力。
4、分库,分表(垂直分表)。
5、分离文本字段。
(四)mysql实践二
1、Master(RW) ßà Master(备份) à Slave(容错)
2、双SCSI硬盘做Raid0
3、半自动Fail Over
4、多实例混合部署。
二、小文件处理。
(一)、特点
1、访问方式:get set delete
2、高可用。Fail-Over
3、大空间:10K-5M 增长快。
4、用户数据,很重要。
5、基本无修改,一致性要求低。
6、随机访问,高并发,大量IO操作。
(二)单机存储。
1、reiserfs。
2、本地,远程,WEBDAV,NFS
3、目录结构。
4、用rsync备份即可。
(三)多级存储。
1、MogileFS
2、瓶颈是 Tracker(Mysql)
3、数据迁移比较慢。
(四)BeansDB
1、Hash存储,不需要中心节点。
3、每个区间对应多个节点。
4、复制:客户端写多次。
5、依次读取,直到有数据。
6、Hash Tree ,快速同步。