数据损毁!250 亿美金的 Pinterest,在数据库选型上的翻车经历

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

原文链接

Pinterest 是一个以图片为主的社交网络,用户可以将图片保存或 "钉 / pin" 在自己的图板上。Pinterest 在 2019 年上市,目前市值 250 亿美金。本文内容主要根据 2012 年 Scaling Pinterest 的分享。

file

2012 年 1 月,Pinterest 的月独立用户数量达到 1170 万,而当时只有 6 名工程师。 Pinterest 于 2010 年 3 月推出,是当时月活用户突破 1000 万最快的公司。

扩展 Pinterest 的经验教训

  • 使用已知的成熟技术。Pinterest 当时涉足较新的技术,导致了数据损坏等问题。
  • 保持简单。(反复出现的主题!)
  • 不要太有创意。团队采用的架构可以增加更多相同的节点来扩大规模。
  • 限制选项。
  • 数据库分片 > 集群。这减少了跨节点的数据传输,是件好事。
  • 享受乐趣!新工程师能够在第一周内贡献代码。

2010 年 3 月:Closed beta 发布,1 名工程师

Pinterest 于 2010 年 3 月推出,当时只有一个小型 MySQL 数据库、一个小型 web server 和一名工程师(还有两位联合创始人)。

file

2011 年 1 月:10,000 名用户,2 名工程师

九个月后的 2011 年 1 月,Pinterest 的架构已经发展到可以处理更多用户。当时他们仍然只接受邀请,只有两名工程师。

他们拥有:

  • 基本的 web server 技术栈(亚马逊 EC2、S3 和 CloudFront)
  • 用于后端的 Django(Python)
  • 4 台 web server 作为冗余
  • NGINX 作为反向代理和负载均衡。
  • 1 个 MySQL 主数据库 + 1 个只读数据库
  • 用于计数的 MongoDB
  • 1 个任务队列和 2 个任务处理器,用于异步任务

file

2011 年 10 月:320 万用户,3 名工程师

从 2011 年 1 月到 2011 年 10 月,Pinterest 的增长速度极快,用户数量每隔一个半月就翻一番。

他们在 2011 年 3 月推出的 iPhone 应用程序是推动这一增长的因素之一。

当事物快速发展时,技术出现问题的频率会超出你的预期。

这时Pinterest 犯了一个错误:他们把架构弄得过于复杂了。

他们只有 3 名工程师,但却采用了 5 种不同的数据库技术来存放数据。

他们既要手动对 MySQL 数据库进行分片,又要使用 Cassandra 和 Membase(现在的 Couchbase)对数据进行集群。

他们「过于复杂的技术栈」:

  • Web server 栈(EC2 + S3 + CloudFront)
  • Pinterest 开始使用 Flask(Python)作为后端服务器
  • 16 台 web server
  • 2 个 API 引擎
  • 2 个 NGINX 代理服务器
  • 5 个手动分片的 MySQL DB + 9 个只读
  • 4 个 Cassandra 节点
  • 15 个 Membase 节点(3 个独立集群)
  • 8 个 Memcache 节点
  • 10 个 Redis 节点
  • 3 个任务路由器 + 4 个任务处理器
  • 4 个 Elastic Search 节点
  • 3 个 Mongo 集群

file

⚠️ 集群崩了

数据库集群 (Database Clustering) 是将多个数据库服务器连接起来作为一个系统共同工作的过程。

从理论上讲,集群可以自动扩展数据存储、提供高可用性、自由负载平衡,并且不会出现单点故障。

遗憾的是,在实践中,集群过于复杂,升级机制困难,而且存在一个大的单点故障 (SPOF)。

file

每个 DB 都有一个集群管理算法,在 DB 之间进行路由。

当一个数据库出现问题时,就会添加一个新的数据库来替代它。

理论上,集群管理算法应该可以很好地处理这个问题。

但实际上,Pinterest 的集群管理算法中存在一个 bug,破坏了所有节点上的数据,破坏了数据该如何重新平衡,并产生了一些无法修复的问题。

file

Pinterest 的解决方案是什么?

从系统中移除所有集群技术(Cassandra、Membase)。全面采用 MySQL + Memcached(更成熟)。

MySQL 和 Memcached 都是久经考验的技术。Facebook 利用这两种技术创建了世界上最大的 Memcached 系统,每秒轻松处理数十亿次请求。

2012 年 1 月:1100 万用户,6 名工程师

2012 年 1 月,Pinterest 的月活跃用户约为 1100 万,日活跃用户在 1200 万到 2100 万之间。

此时,Pinterest 已经花时间简化了他们的架构。

他们删除了当时不太成熟的方案,如集群和 Cassandra,取而代之的是成熟的方案,如 MySQL、Memcache 和分片。

他们简化后的技术栈:

  • 亚马逊 EC2 + S3 + Akamai(取代 CloudFront)
  • AWS ELB(弹性负载平衡)
  • 90 个 web servers + 50 个 API 引擎(使用 Flask)
  • 66 个 MySQL DB + 66 个只读
  • 59 个 Redis 实例
  • 51 个 Memcache 实例
  • 1 个 Redis 任务管理器 + 25 个任务处理器
  • 分片式 Apache Solr(取代 Elasticsearch)
  • 移除 Cassanda、Membase、Elasticsearch、MongoDB、NGINX

file

Pinterest 如何手动分片数据库

数据库分片 (Database Sharding) 是一种将单个数据集分割成多个数据库的方法。 优点:高可用性、负载平衡、数据放置算法简单、易于拆分数据库以增加容量、易于定位数据

Pinterest 首次对数据库进行分片时,需要冻结新功能发布。在几个月的时间里,他们以渐进和手动的方式对数据库进行了分片:

file

团队删除了数据库层中的表 Join 和复杂查询。他们添加了大量缓存。

由于跨数据库维护唯一约束需要额外的工作,他们将用户名和电子邮件等数据保存在一个巨大的、未分片的数据库中。

这个数据库下的所有表都存在于所有分片中。

手动分片的一个小例子

由于他们有数十亿个 "pin",他们的数据库索引会耗尽内存。

他们会将数据库中最大的表转移到自己的数据库中。

然后,当数据库空间耗尽时,他们就会将其分片。

2012 年 10 月:2200 万用户,40 名工程师

2012 年 10 月,Pinterest 的月度用户约为 2200 万,但他们的工程团队却翻了两番,达到了 40 名工程师。

架构是一样的。他们只是增加了更多相同的系统。

  • 亚马逊 EC2 + S3 + CDN(EdgeCast、Akamai、Level 3)
  • 180 台 web servers + 240 个 API 引擎(使用 Flask)
  • 88 个 MySQL DB + 88 个只读
  • 110 个 Redis 实例
  • 200 个 Memcache 实例
  • 4 个 Redis 任务管理器 + 80 个任务处理器
  • 分片式 Apache Solr

file

他们开始从 HDD 转向固态硬盘 SSD。

一个重要的教训是:有限的、经过验证的选择是件好事。

坚持使用 EC2 和 S3 意味着他们只有有限的配置可供选择,从而减少了麻烦,提高了简便性。

与此同时,新实例可以在几秒钟内准备就绪。这意味着他们可以在几分钟内添加 10 个 Memcache 实例。

Pinterest 的数据库结构 ID

和 Instagram 一样,Pinterest 也有一个独特的 ID 结构,因为他们有分片数据库。

他们的 64 位 ID 看起来像

file

分区 ID:哪个分区(16 位) 类型:对象类型,如针(10 位) 本地 ID:在表中的位置(38 位)

这些 ID 的查找结构是一个简单的 Python 字典。

数据库表

它们有对象表和映射表。

对象表适用于 pin、板块、评论、用户等。它们有一个映射到 MySQL blob(如 JSON)的本地 ID。

映射表用于对象之间的关系数据,如将板块映射到用户或将赞映射到 pin。它们有一个映射到完整 ID 和一个时间戳的完整 ID。

为了提高效率,所有查询都使用 PK(主键)或索引查找。他们删除了所有 JOIN。

译者语,Pinterest 高速发展的时期正好也出现了各种新数据库系统。尤其是 NoSQL 这块,除了 Pinterest 提到过的这些,还有 Riak, Tokyo Cabinet, Voldemort 等。 还是那句话,我们应该采用无聊的技术去构建创新的产品,而不是倒过来。


💡 更多资讯,请关注 Bytebase 公号:Bytebase

基于ESP32-C3的物联网硬件设计:从免费工具链到PCB打样全流程实战 在物联网和嵌入式开发领域,硬件设计是连接软件逻辑与物理世界的关键环节。其核心原理在于通过电路设计将微控制器、传感器、通信模块等电子元件有机整合,实现特定功能。掌握硬件设计能力的技术价值在于能够自主实现产品原型,优化成本与性能,并深入理解系统底层运作。常见的应用场景包括智能家居节点、环境监测设备、工业传感终端等。本文以热门的ESP32-C3 RISC-V物联网芯片和广泛使用的KiCad免费EDA工具为例,详细解析了从核心器件选型、射频电路布局、PCB设计规则到Gerber文件生产的完整流程,并分享了在嘉立创平 阅读详情

相关推荐

GDI文字绘制和windows下opengl文字绘制小结

GDI绘制文字,要设置文字的属性,主要就是通过设置DC中的font对象来实现的。 font对象的创建可以由createfont()、createfontIndirect()来实现。 HFONT CreateFont( int nHeight, // height of font int nWidth, // average

T_W_S的专栏 5323

【Python】-熟悉哪些网站使用Django框架

Django是用于构建Web应用程序的MVT Web框架。巨大的Django网络框架附带了如此多的“电池”,使开发人员常常对所有东西如何协同工作感到惊讶。添加这么多电池的原理是在框架本身中具有通用的Web功能,而不是将后者作为单独的库添加。 Django框架受欢迎的主要原因之一是庞大的Django社区。这个社区是如此之大,以至于有一个专门的网站供各个方面的开发人员开发第三方软件包,其中包括身份验...

rong11417的博客 5681

Cadence psspxf实战:手把手教你仿真250MHz环形VCO的电源抑制比(附Verilog代码)

本文详细介绍了使用Cadence psspxf仿真器对250MHz环形VCO的电源抑制比(PSRR)进行仿真的全流程。从环形VCO的设计原理、Verilog代码实现,到Cadence环境配置、仿真参数设置,再到结果分析与优化技巧,提供了完整的实战指南。特别适合电路设计工程师学习如何评估和优化VCO的抗电源噪声能力。

weixin_42567752的博客 415

为什么 Django 能持续统治 Python 开发世界

对于 Python 开发者来说,web 开发框架真可谓玲琅满目。然而 Django , 毋庸置疑的成为最受青睐的 web 框架。通过本篇博客,我来为大家讲解下为什么相比 Flask、Pyramid、Tornado、Bottle、Diesel、Pecan、Falcon 这些流行的 Python web 框架,Python 开发者更倾向于选择 Django。 再大肆宣扬Django之前,让我们简单了...

a289237642的博客 470

从零构建工业级SPI-CAN网关:CH347与CH9431的软硬件协同设计实战

本文详细介绍了基于CH347和CH9431芯片构建工业级SPI-CAN网关的完整方案。通过硬件架构设计、Linux驱动定制、并发处理优化和EMC抗干扰测试,实现高可靠性通信网关,适用于工业自动化和汽车电子等严苛环境。

spark7igniter的博客 633

新版本大疆智图4.5 永久许可摄影测量建模软件

大疆智图支持常见格式的成果输出,包括 TIFF 正射影像和高程模型、LAS 格式点云,以及 B3DM、OSGB、OBJ 等六种常用格式的三维模型,还包括 DXF 和 SHP 等格式的等高线。大疆智图 DJI Terra是领先的三维重建软件,提供先进的技术和简单的操作,一站式解决方案,从航线规划到数据的获取,以及模型重建、数据分析等都提供独一无二的支持,优化项目工程,提供自动化优势,获得更有效智能的决策和行动,最终用户可以获得理想的结果,减轻工作压力,提高作业效率。质量报告和剖面查看功能有助于分析点云质量。

qq_62821232的博客 6910

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 475

不用Root!这些隐藏代码能一键开启安卓诊断端口(小米/OPPO/魅族机型实测)

本文提供了一份无需Root权限即可开启安卓手机诊断端口的实用指南。通过拨号盘输入特定隐藏代码,小米、OPPO、魅族等机型的用户可以一键激活此工程模式,从而连接电脑进行基带数据备份(如QCN文件)或故障排查。文章详细列出了各品牌指令、操作验证步骤,并强调了备份IMEI等关键数据的重要性与操作风险,旨在帮助用户在紧急情况下修复网络问题。

weixin_29260291的博客 273

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 425

别再瞎调了!STM32 Systick延时函数避坑指南(正点原子、野火、慧净代码对比)

本文深入解析STM32 Systick延时函数的实现差异与优化策略,对比正点原子、野火、慧净等主流方案的优缺点。针对us和ms级延时精度问题,提供避坑指南和高级优化技巧,帮助开发者根据项目需求选择最佳方案,提升嵌入式系统的定时控制精度。

weixin_28717807的博客 341

智慧加油站小程序数据库设计文档

【代码】智慧加油站小程序数据库设计文档。

低代码布道师的博客 1404

【基于 WebSocket 的多用户网页五子棋】—— 数据管理模块

但行好事,莫问前程

qq_42996461的博客 243

用 SE84 反查 SAP 消息号:弹窗一闪而过也能抓到 Message ID 和 Number 的小技巧

SAP开发技巧:通过消息文本反查Message ID和编号 在SAP开发中,经常遇到系统只显示错误消息文本而缺少技术信息的情况。本文介绍两种实用方法: 使用SE84工具:通过输入带通配符的短文本(如"错误文本")反向查找消息类和编号 直接查询T100表:利用消息文本在T100表中检索完整的消息技术信息 这些技巧特别适用于处理弹窗消息、框架层错误等无法直接获取技术细节的场景。掌握消息ID和编号后,开发者可以更高效地进行问题定位、代码调试和错误处理,尤其在SAP Gateway、RAP等现代

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 375

C++算法(七)

C++ stack算法题和一些客观题

2503_94479566的博客 378

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

OpenClaw 深度调查:把 AI 助手做成你自己的控制平面

对 openclaw/openclaw 的完整技术尽调:Gateway 架构、Agent 运行时、工具与沙箱、30 个消息通道、181 个插件、安全信任边界、工程代价与采用建议。17 章 / 10 张图,全部数字标注口径,数据截至 2026-10-31。

厚积薄发 262

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

不用再为文本搜索单独维护一套系统!全文检索深度解析

为了给商品、客服工单或者企业知识库增加一个搜索框,企业往往需要在业务数据库之外,再部署一套Elasticsearch。数据库保存商品、订单和用户等真实业务数据,搜索引擎保存另一份文本索引;两套系统之间,还需要通过CDC、消息队列或者同步程序持续传输数据。一个看似简单的搜索需求,最后可能变成两套集群、两份数据和一条必须保持稳定的数据链路。由此产生的问题并不少:数据库已经完成更新,搜索结果却可能尚未同步;业务查询同时涉及文本、库存、权限和订单状态时,应用需要在两个系统之间来回组合结果;

TiDB 社区干货传送门 309

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 174

TransactionInactiveError:await 之后事务已经不活跃了

TransactionInactiveError 出现于 IndexedDB 事务已结束(非 active 状态)时调用 put、get 等操作。常见于 await 后或 setTimeout 中执行请求,因任务已完成,事务已提交或进入 finished 状态。请求必须在创建事务的同一任务中挂起,否则无效。解决方法:在 onsuccess 回调内同步发起后续操作,或提前将所有请求挂入事务。避免在异步上下文中使用事务操作,确保请求在事务活跃期内完成。

qq_40822000的博客 158

云计算课程小组PPT汇报任务书

36人分为6组,每组6人;形式:生活案例调研 + 理论解读;汇报时长7‑9min;PPT建议10‑14页。

Michelle8023的博客 198

市场调查与统计分析专业大学期间考证怎么安排?

市场调查与统计分析专业的考证规划,适合从一份完整的调查报告倒推:能不能设计问卷、判断样本是否合理、清洗数据,再把分析结果转化为业务建议?围绕这条能力链安排证书,比单纯按“热门程度”报名更有针对性。结合2026年的学习安排,并为2027年的实习、升学和求职预留时间,大学期间可以重点考虑六类证书:全国计算机等级考试证书、大学英语四级或六级成绩报告单、CDA数据分析师、初级统计专业技术资格证书、微软办公软件国际认证中的Excel相关证书,以及软考数据库系统工程师资格证书。

cc572502653的博客 166

软件项目交付时,源代码之外还应该交付哪些技术资料?

软件项目交付时,除可运行程序外,还应核对源代码、数据库结构、接口文档、部署运维、测试验收和账号资产。本文从实际交付环节拆解完整资料清单,并说明合同如何约定交付范围、知识产权与维护边界。

chengduyoushu的博客 298

大表 ALTER TABLE 怎么做?NineData OnlineDDL 配置与执行实践

介绍NineData OnlineDDL大表变更实践,涵盖执行策略、切表控制、拷贝批次与可视化进度追踪。

dbasenewbie的博客 293

MySQL报Too many open files?句柄耗尽的排查与参数配置

文章讲清 max_connections 与 open_files_limit 两个额度、句柄被谁占走、分区表为什么最容易踩,给出从 error log 到 /proc/pid/limits 的定位顺序与句柄预算算法。

「一个在数据库赛道上边学边分享的学妹」——聚焦国产数据库/信创方向、分享学习笔记、踩坑经验和行业观察。 325

Agent 安全实战:间接提示注入的四个攻击面与防御体系

当 Agent 从 "生成内容" 走向 "执行动作",安全边界就从内容合规变成了权限越界。本文拆解间接提示注入在网页抓取、工具返回值、MCP 连接器、长期记忆四个位置的真实攻击路径,对照 Claude、GPT、Gemini 在工具调用权限模型上的设计差异,给出可直接落地的五层防御体系。

阡陌数智,专注大模型网关与 LLM 工程落地 269

Redis 入门详解:核心特性、重要文件与全局命令实战

本文系统介绍了Redis的核心特性、重要文件及全局命令。Redis凭借内存存储、C语言实现和单线程设计,具备极高的读写性能;支持持久化(RDB/AOF)、主从复制与集群架构,适用于缓存、排行榜、计数器等场景,但不适合存储海量冷数据。文中还解析了常见面试题,如为何快速、单线程原理、持久化机制、KEYS *禁用原因及过期键处理策略,强调其在高并发场景下的优势与局限。

2303_77004089的博客 204

【FDE前沿部署工程师实战教程】第62章:Enterprise AI Developer Platform——企业级 AI 开发者平台与低代码 AI 应用工厂

企业从AI能力平台迈向AI应用生产平台,需构建统一的企业级AI开发者平台,将模型、RAG、Agent、Workflow等能力封装为可视化、可复用的开发工具。通过PromptIDE、AgentBuilder、WorkflowBuilder等模块,实现低代码与专业代码协同,降低开发门槛。平台覆盖应用全生命周期管理,集成测试评估、安全治理与CI/CD发布体系,推动AI应用规模化、标准化交付。最终形成“需求→设计→开发→测试→发布→运营”的企业AI应用工厂模式,助力制造等行业的智能化转型。

IT古董 312
上一篇: 守正出奇,穿越周期 - Bytebase 的 2023
下一篇: 数据损毁!250 亿美金的 Pinterest,在数据库选型上的翻车经历
Bytebase
博客等级 码龄5年 1348粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值