http://timyang.net/data/friendfeed-mysql-schema-less/

这是一篇2009年初的资料How FriendFeed uses MySQL to store schema-less data,相信大部分人已经看过了。如Fenng的中文介绍FriendFeed 使用 MySQL 的经验。本文从不同的角度再补充下。作者几个月前也曾经在广州技术沙龙作过一次Key value store漫谈的演讲,许多参会人员对key value方向存在强烈的使用意愿,但同时也对完全抛弃MySQL存在疑虑,本文介绍的方案也可以给这些人员一些架构参考。

需求

250M entities, entities表共有2.5亿条记录,当然是分库的。

典型解决方案:RDBMS

问题:由于业务需要不定期更改表结构,但是在2.5亿记录的表上增删字段、修改索引需要锁表,最长需要1小时到1天以上。

Key value方案

评估Document类型数据库,如CouchDB
CouchDB问题: Performance? 广泛使用? 稳定性? 抗压性?

MySQL方案

MySQL相比Document store优点:

  • 不用担心丢数据或数据损坏
  • Replication
  • 非常熟悉它的特性及不足,知道如何解决

结论

综合取舍,使用MySQL来存储key/value(schema-less)数据,value中可以放:
Python dict
JSON object

实际friendfeed存放的是zlib压缩的Python dict数据,当然这种绑定一种语言的做法具有争议性。

表结构及Index设计模式

feed数据基本上都存在entities表中,它的结构为

mysql> desc entities;
+----------+------------+------+-----+-------------------+----------------+
| Field    | Type       | Null | Key | Default           | Extra          |
+----------+------------+------+-----+-------------------+----------------+
| added_id | int(11)    | NO   | PRI | NULL              | auto_increment |
| id       | binary(16) | NO   | UNI |                   |                |
| updated  | timestamp  | YES  | MUL | CURRENT_TIMESTAMP |                |
| body     | mediumblob | YES  |     | NULL              |                |
+----------+------------+------+-----+-------------------+----------------+

假如里面存的数据如下

{
"id": "71f0c4d2291844cca2df6f486e96e37c",
"user_id": "f48b0440ca0c4f66991c4d5f6a078eaf",
"feed_id": "f48b0440ca0c4f66991c4d5f6a078eaf",
"title": "We just launched a new backend system for FriendFeed!",
"link": "http://friendfeed.com/e/71f0c4d2-2918-44cc-a2df-6f486e96e37c",
"published": 1235697046,
"updated": 1235697046,
}

如果要对link字段进行索引,则用另外一个表来存储。

mysql> desc index_link;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| link      | varchar(255) | NO   | PRI |         |       |
| entity_id | binary(16)   | NO   | PRI |         |       |
+-----------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

优点是

  • 增加索引时候只需要 1. CREATE TABLE,2.更新程序
  • 删除索引时候只需要 1. 程序停止写索引表(实际就是一个普通表),2. DROP TABLE 索引表

这种索引方式也是一种值得借鉴的设计模式,特别是key value类型的数据需要索引其中的内容时。

Friendfeed的MySQL key/value存储【转】相关推荐

  1. mysql+存key+value_Friendfeed的MySQL key/value存储

    这是一篇2009年初的资料 How FriendFeed uses MySQL to store schema-less data ,相信大部分人已经看过了.如Fenng的中文介绍 FriendFee ...

  2. MySQL key/value存储方案(转)

    需求 250M entities, entities表共有2.5亿条记录,当然是分库的. 典型解决方案:RDBMS 问题:由于业务需要不定期更改表结构,但是在2.5亿记录的表上增删字段.修改索引需要锁 ...

  3. mysql存储value_MySQL key/value存储方案(转)

    需求 250M entities, entities表共有2.5亿条记录,当然是分库的. 典型解决方案:RDBMS 问题:由于业务需要不定期更改表结构,但是在2.5亿记录的表上增删字段.修改索引需要锁 ...

  4. 解读FriendFeed对MySQL的使用

    作者:老王 如何才能规避MySQL中DDL的堵塞问题?FriendFeed给出了答案:How FriendFeed uses MySQL to store schema-less data. DDL指 ...

  5. mysql longtext可以存储多少文字_MySQL 四万字精华总结 + 面试100 问,和面试官扯皮绰绰有余(收藏系列)

    作者:派大新 链接:https://juejin.im/post/5f0d4fadf265da22f3250eaa 写在之前:不建议那种上来就是各种面试题罗列,然后背书式的去记忆,对技术的提升帮助很小 ...

  6. mysql的常用存储引擎_MySQL常见的三种存储引擎

    Ok,我们知道了,引擎就是一个程序的核心组件. 简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式. 存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有O ...

  7. mysql 存储 结构,mysql目录与存储结构(一)

    mysql索引与存储结构(一) 首先从一个问题说起. 问题现象: 查询语句如下: -- sql1 SELECT w.wid, w.rid FROM warestock w JOIN product p ...

  8. mysql递归查询所有上下节点_【转】MySQL之Spider存储引擎原理详解

    一.概述 Spider是为MySQL/MariaDB开发的一个特殊引擎,具有内嵌分片功能.MariaDB从10.0.4开始支持Spider.作为MariaDB的一个新的主要特性.Spider的主要功能 ...

  9. MySQL事务与存储引擎相关设置

    MySQL事务与存储引擎 一.事务的ACID特点 1.原子性 2.一致性 3.隔离性 4.持久性 二.事务之间的互相影响 三.事务的四大隔离 四.事务控制语句 示例 1.开启.提交事务 2.事务回滚 ...

最新文章

  1. My view towards Machine Learning
  2. 当AI实现多任务学习,它究竟能做什么?
  3. TensorFlow2快速模型构建及tensorboard初体验
  4. HP Instant Information
  5. iOS Appstore 版本更新
  6. 19什么情况下会帮助他人
  7. acm java 类库_ACM java入门和基本技巧
  8. 大数据_Flink_Java版_状态管理(2)_算子状态---Flink工作笔记0061
  9. Leetcode309. Best time to sell stock with cooldown
  10. LOJ#2343. 「JOI 2016 Final」集邮比赛 2
  11. leveldb学习:DBimpl
  12. 人生七大纲要——道、德、仁、义礼、智、信
  13. 开源版权 项目 字体
  14. mql5计算机语言函数库,MQL5 函数列表 - MQL5参考 - 参考MetaTrader 5的算法/自动交易语言...
  15. 基于vue2 + Muse-ui 开发的移动端轻社区项目 F-Rent
  16. s5pv210_gpio驱动及其在android2.3.1下jni调用
  17. 学习数据分析、数据挖掘、大数据ETL工程师到什么程度可以找工作?
  18. SV中program module
  19. ​CES已是技术创新的风向标  2019年哪项技术独领风骚?
  20. 无线网络边缘“遇上”分布式机器学习讲座:Machine Learning at the Wireless Edge

热门文章

  1. A5133 5.8GHz RFIC收发器
  2. QT多线程网络编程程序崩溃问题与解决
  3. IDEA下运行Web项目 页面出现中文乱码
  4. edge运行html显示乱码,Win10系统使用edge浏览器浏览网页出现字体乱码
  5. 海洋地球物理十年个人总结
  6. 妖怪手帐获取服务器信息失败,妖怪手帐妖怪全获取途径详解分享
  7. 重生之javaSE_for循环
  8. 奇异值分解(SVD)与PCA(主成分分析)
  9. 语音翻译文字怎么操作
  10. python机器学习入门