Pinterest 数据切分:解惑快速扩展 MySQL 的数据量

这是一个探讨怎样在多个MySQL服务器之间切分数据的技术问题。早在2012年我们就完成了这样分片方案,我们现在仍在使用这套方案存储核心数据。
在讨论怎样切分数据之前,我们不妨先与数据亲密接触。机舱里的灯光,附在草莓上的巧克力,星际迷航开始..
Pinterest是一个发现引擎,寻找所有你所感兴趣的(入门基础教程qkxue.net)。从数据的角度来看,Pinterest是世界上一大型的人类构建的的兴趣图。有超过500亿的Pin被Pin友保存到10亿的板块上,用户再次Pin,喜欢其它人的Pin(简单的浅拷贝),关注其它Pin友、板块和兴趣,然后查看主页上所订阅Pin友的所有资讯、画板和他们关注的兴趣。太棒了,现在来拓展吧。

成长的痛

2011年我们公司获得大家的认同。 在一些评估里,我们的发展比先前任何初创公司都要快(手机app开发ty300.com)。大约在2011年9月份,我们的基础设施都超过负载。一些NoSQL技术导致灾难性的后果,同时大量用于读的MySQL从属服务器,产生了大量令人恼火的Bug,特别是缓存。我们重新架构了整个存储模型。令人欣喜的是,新架构还是比较有效果的,基本满足了我们的要求。
业务需求

系统总体要非常稳定,便于操作,便于拓展。我们想让数据库能从开始小存储量,能随着业务发展而拓展
Pin友生成的内容必须能永久访问
(支持)请求的N个Pin在板块中以确定的顺序(像按照创建时间倒序,或是按照用户特定的排序)(显示)。对于喜欢的Pin友,发Pin的Pin友列表等,也必须以特定的顺序.
为了简单,更新一般而言要保证最好的性能,为了获取最终一致性,需要额外的东西,如分布式事物日志。这是一个有趣(但不太容易)的事情!

设计原理与笔记

由于我们想要的这些数据是横跨多个数据库的,我们不能使用数据库的join,外键或者收集所有数据的索引,不过他们可以被用于不能横跨数据库的子查询。
我们也需要支持负载均衡我们的数据。我们厌恶来回移动数据,尤其是逐项移动,因为容易出错,也容易让系统变得不必要的复杂。如果我们必须移动数据,最好移动一整个虚拟节点到物理节点。
为了实现快速成型,我们需要一个简单可用的解决方案,并且在我们的分布式数据平台上,节点要非常稳定。
所有的数据都需要被备份到从节点进行高可用,并为 MapReduce 转存到 S3。 在生产中,我们只与主节点交互。在生产中,你不能在从节点上读/写。从节点是滞后的,它会引发奇怪的bug。如果你共享数据,一般来说在生产中与从节点交互是没有优势的。
最终,我们需要一个好的方式来生成一个统一且唯一的ID(UUID)分配给所有我们的对象。

无论我们如何构建我们的系统,都需要满足我们的业务要求并保证系统稳定,具有高性能,易于维护。换言之,我们需要我们的系统不糟糕 ,因此我们选择成熟的技术,MySQL作为我们构建系统的基础。我们有意避免使用具有自动扩展功能的新技术,例如MongoDB,Cassandra 和Membase等,因为他们还不够成熟(并且他们会以无法预知的方式崩溃)。
悄悄话:我依旧建议初创公司避免使用花哨的新事物——尝试使用完全能够正常运行的MySQL.相信我,我有很多错误的实践(创伤)来证明这一点。

时间: 2024-08-17 12:51:53

Pinterest 数据切分:解惑快速扩展 MySQL 的数据量的相关文章

数据切分——Atlas读写分离Mysql集群的搭建

关于数据切分的原理可以参见博客: http://blog.csdn.net/jhq0113/article/details/44226789 关于Atlas的介绍可以参见博客: http://blog.csdn.net/jhq0113/article/details/44239823 Atlas源代码用C语言编写,它对于Web Server相当于是DB,相对于DB相当于是Client,如果把Atlas的逻辑放到Web Server程序里去处理,这样会大大增加Web Server程序的复杂度,同时

mysql数据表最快速迁移,mysql的存储引擎为:myisam

本文链接:http://blog.csdn.net/u010670689/article/details/41346689 需求: 开发产品过程中,有个项目分支,数据库需要带数据拷贝,但是表的数据很大,用传统的insert into .... select * ...非常慢!! 过程: 1.进入的mysql在linux上的文件目录 在/etc/my.cnf中可以找到mysql数据文件的地址 [[email protected] etc]# cat /etc/my.cnf [mysqld] dat

大数据通过PHP快速插入MYSQL的方法

如果您的mysql是通过brew安装的,那么请 vi /usr/local/Cellar/mysql/5.6.23/my.cnf 将 max_allowed_packet = 64M 写入保存并重启mysql,然后进入mysql cli运行 show variables like 'max_allowed_packet'; 可以看到刚才的改动是否成功,最后编写php文件: $sql= “insert into biao (column_name) values”; for ($i = 0; $i

MySQL性能调优与架构设计——第 14 章 可扩展性设计之数据切分

第 14 章 可扩展性设计之数据切分 前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈.这时候,我们就必须许找其他技术手段来解决这个瓶颈,那就是我们这一章所要介绍恶的数据切分技术. 14.1 何谓数据切分 可能很多读者朋友在网上或者杂志上面都已经多次见到关于数据切分的相关文章了,只不过在有些文章中称之为数据的 Sharding.其实不管是称之为数据的 Shard

MySQL数据切分的相关概念和原理详解

对于数据切分,我们可能还不是很熟悉,但是它对于MySQL数据库来说也是相当重要的一门技术,本文我们就详细介绍一下MySQL数据库的数据切分的相关知识,接下来就让我们一起来了解一下这部分内容. 什么是数据切分 "Shard" 这个词英文的意思是"碎片",而作为数据库相关的技术用语,似乎最早见于大型多人在线角色扮演游戏中."Sharding" 姑且称之为"分片".Sharding 不是一门新技术,而是一个相对简朴的软件理念.众所周

mysql 的数据文件

mysql的数据文件 由于mysql的数据文件结构主要跟mysql的存储引擎相关,这里不做过多解释,具体查看各个引擎章节的内容 .首先上一段小辉老师的教程; 在MySQL 中每一个数据库都会在定义好(或者默认)的数据目录下存在一个以数据库名字命名的文件夹,用来存放该数据库中各种表数据文件. 1.“.frm”文件 与表相关的元数据(meta)信息都存放在“.frm”文件中,包括表结构的定义信息等.不论是什么存储引擎,每一个表都会有一个以表名命名的“.frm”文件. 2.“.MYD”文件 “.MYD

Excel如何快速选定所需数据区域

在使用Excel处理数据时,快速选定所需数据区域的一些小技巧. 第一种方法:(选定指定区域) Ctrl+G调出定位对话框,在[引用位置]处输入A1:E5000,点击[确定]即可.  第二种方法:(选定指定区域) 在程序左上角的[名称框]处输入A1:E5000,然后回车即可.  第三种方法:(选定全部) 在单元格区域中选中任意一个单元格,按Ctrl+Shift+*即可选定单元格所在整个区域.  第四种方法:(选定指定区域) 按Ctrl+End跳转到区域最右下角单元格,用鼠标选中:然后拉动滚动条回到

重装系统后,如何调用之前mysql的数据

前提是:必须保留之前的数据库数据 在介绍此方法之前,提醒各位最好的转移数据的方法为: 在原来MYSQL服务器导出SQL文件,然后再在新的MYSQL服务器导入数据. 先说下MYSQL存储数据的原理: MYSQL存储数据不是按照SQLSERVER一样(一个数据文件,一个日志文件)的.MYSQL新建一个数据库时,为该数据库在DATA文件夹下创建一个以该数据库名为名的文件夹,注意,此文件夹只是存放数据库的表结构的,并没把数据也存进去.数据在哪儿呢?在DATA文件夹下面有个ibdata1,看看这个文件的大

蔡先生论道大数据之二 , 国外互联网公司的大数据应用

第一章我阐述了大数据的前世今生,今天我们来看看国外大公司如何利用和布局大数据的. IBM IBM是商业分析和大数据技术的最活跃厂商之一.早在大数据概念进入媒体视野之前,IBM就提出"智慧地球"的说法,其核心是把"智慧"嵌入系统和流程之中,使服务的交付.产品开发.制造.采购和销售得以实现,使亿万人生活和工作的方式变得更加智慧.现在,大数据技术为IBM提供了一种实现途径.近年来,IBM先后投资了SPSS.Clarity.penPages.i2.Algorithmics等