11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

FriendFeed 实现基于 MySQL 的无模式存储

  • 2009-04-04
  • 本文字数:1113 字

    阅读完需:约 4 分钟

对于迅速增长的网站所遇到的问题——“用灵活的模式存储数据、即时创建新的索引”, FriendFeed 的 Bret Taylor 介绍了一种“无模式的解决方案” 。问题本身源自一些需求:需要不断增加新功能,不断更新底层的数据库结构和数据库中存储的数百万条已有记录,还要同时支持新旧功能。FriendFeed 的办法是基于 MySQL 建立一个无模式的解决方案,而不是迁移到别的技术基础上去。Bret 描述了基本问题:

尤其是有一两千万行数据的时候,每次修改模式、往数据库中添加索引都会数小时完全锁定数据库。删除旧索引也需要同样长的时间,但不删除又会影响性能,因为数据库在每次执行 INSERT 操作时都会继续读写这些不用的块,而重要的块却没有足够的内存。经过一些复杂的操作过程可以克服以上困难(比如在从机上创建新索引,然后调换从机和主机),但这些操作过程都很容易出错,也都是重量级的,因此会使我们因为害怕改变模式 / 索引而不敢增加新功能。由于我们的数据库都是严重分片的,像 JOIN 这些 MySQL 的关系型功能对我们毫无用处,所以我们决定看看 RDBMS 之外的领域。

研究了几个可行的解决方案后,他们决定基于 MySQL 的自定义一种“无模式”持久化方案,而不是彻底改换门庭。

他们的解决方案是把主要数据和这些数据的索引分离开来。“我们的数据存储储存了无模式的属性包……我们在单独的 MySQL 表中存储索引,从而在这些实体中索引数据。”这是以容量来换效率。

结果我们比以前多了很多的表,但添加和删除索引却很容易。我们大力优化了填充新索引的进程(我们称之为“Cleaner”),以便该进程能快速填充新索引,而不会让站点中断。

分离数据和索引引起了一致性和原子性问题。他们没有建立严格的事务规则,而是把数据库表推到最简,索引只用来引用,发生实际的数据库读操作的时候才施加数据过滤。他们改进了持续更新表的自动化进程,让这个“Cleaner”进程不停地对优先级高的被更新实体进行更新和索引修正。尽管可能出现不一致,但消除不一致的时间平均不到两秒钟。

Bret 用平均页面延迟这一指标描述了以下走向。

  • 整体来说——尽管有增加的趋势,但还是有显著的减少。
  • 过去二十四小时——即使在高峰时段也保持稳定。
  • 前一周——明显减少。

Bret 的帖子有很多回复。有一种观点认为“对于模式演变,现代的RDBMS 不像MySQL 局限那么大”,这种观点忽略了选择背后的成本问题。其它读者则回复了更多种不同的解决办法。

有意思的是,并没有人指出FriendFeed 的解决方案与古老的ISAM 技术(Indexed Sequential Access Method,索引顺序存取法)之间的相似性。ISAM 用的是同样的基本架构——分离数据和索引,同时在数据发生变化时自动更新索引。

查看英文原文: FriendFeed Implements Schema-less Storage Atop MySQL

2009-04-04 20:073318
用户头像

发布了 151 篇内容, 共 56.7 次阅读, 收获喜欢 17 次。

关注

评论

发布
暂无评论
发现更多内容

关于帮助中心,你需要知道的一切

小炮

自从用了这个APP,我的身体状况....

IT蜗壳-Tango

极客时间 IT蜗壳

python 列表 remove()函数使用详解,最新手淘Python高级面试题及答案

程序媛可鸥

Python 程序员 面试

TcaplusDB君 · 行业新闻汇编(二)

tcaplus

微软云对象存储攻防

火线安全

云原生 云原生应用 云安全攻防 云安全研究

腾讯云COS对象存储攻防

火线安全

云原生 云安全 云原生应用

【TcaplusDB知识库】如何申请数据(按进程)屏蔽备份

tcaplus

TcaplusDB君 · 行业新闻汇编(三)

tcaplus

Cloud RedTeam视角下元数据服务攻防实践

火线安全

云原生 云安全

golang并发控制设计中的“流式模型”

不登山的小鲁

golang

网络安全 kali Web安全之CSRF攻击

学神来啦

网络安全 CSRF WEB安全 kali kali Linux

使用APICloud平台实现朋友圈功能

APICloud

html5 css3 APP开发 APICloud JavaScrip

阿里云 OSS对象存储攻防

火线安全

云安全 阿里云;

红黑树的原理以及实现

Linux服务器开发

数据结构 B+树 红黑树 Linux服务器开发 Linux后台开发

Python 实现 ZeroMQ 的三种基本工作模式,贼好用的Python学习路线集合

程序媛可鸥

Python 程序员 面试

低代码如何助力化学材料行业数字化升级?

TOBESOFT特碧软件

低代码 数字化转型 MES系统 制造业 TOBESOFT

2022年,人工智能和数据发展呈现哪五大趋势?

澳鹏Appen

人工智能 机器学习 深度学习 训练数据

2022“年度最佳移动游戏”《宝可梦大集结》海外版的可靠伙伴-TcaplusDB数据库

tcaplus

数据库 腾讯云 TcaplusDB

【TcaplusDB知识库】【TcaplusDB知识库】如何审核数据备份单据

tcaplus

TcaplusDB君 · 行业新闻汇编(一)

tcaplus

TcaplusDB君 · 行业新闻汇编(四)

tcaplus

Python 实现七大排序算法,面试竟然被这31道Python基础题难倒了

程序媛可鸥

Python 程序员 面试

TcaplusDB君 · 行业新闻汇编(五)

tcaplus

FriendFeed实现基于MySQL的无模式存储_MySQL_Dave West_InfoQ精选文章