需求

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类型的数据需要索引其中的内容时。

MySQL数据库Raid存储方案

作为一名DBA,选择自己的数据存储在什么上面,应该是最基本的事情了.但是很多DBA却容易忽略了这一点,我就是其中一个.之前对raid了解的并不多,本文就记录下学习的raid相关知识. 一.RAID的基 ...

日均数据量千万级,MySQL、TiDB两种存储方案的落地对比

http://mp.weixin.qq.com/s?__biz=MzIzNjUxMzk2NQ==&mid=2247484743&idx=1&sn=04337e020d268a9 ...

Redis百亿级Key存储方案(转)

1 需求背景 该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关系,还包括了supperi ...

Redis百亿级Key存储方案

1 需求背景 该应用场景为DMP缓存存储需求,DMP需要管理非常多的第三方id数据,其中包括各媒体cookie与自身cookie(以下统称supperid)的mapping关系,还包括了supperi ...

优秀后端架构师必会知识:史上最全MySQL大表优化方案总结

本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/1190000006158186 1.引言   MySQL作为开源技术的代表作之一,是 ...

MySQL 大表优化方案(长文)

当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

MySQL两种存储引擎: MyISAM和InnoDB

MySQL两种存储引擎: MyISAM和InnoDB 简单总结   MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Me ...

MySQL最全存储引擎、索引使用及SQL优化的实践

1 MySQL的体系结构概述 整个MySQL Server由以下组成 :Connection Pool :连接池组件Management Services & Utilities :管理服务和 ...

MySQL的多存储引擎架构

支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一.如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心基础架构.本文将 ...

随机推荐

rsync同步

本地同步: rsync -avz /boot /test C/S架构: 远程同步:rsync+ssh 远程浏览器目录文件:rsync  用户@192.168.0.250:/boot 下行:rsync ...

sublime text3 之snippet编写代码片段

sublime text 3 中有个强大的功能就是可以编写各种文件类型的snippet代码片段,可以节省大量的时间. 文件名为:jekyll-top.sublime-snippet(.sublime- ...

LabVIEW系列——生产现场故障邮件通知

第一步.建立邮件服务器,winmail做邮件服务器是个不错的选择.不过在使用前需要注册. 第二步.创建修改域名.这里创建的域名不是真正的域名,只能用于局域网内.假设:lhy.com.cn 第三步.创建 ...

如何获取网站icon

获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon(

一个简单的文本编辑器。(是在DEV C++下写的)

//头文件// main.h #define CM_FILE_SAVEAS 9072 #define CM_FILE_EXIT 9071 #define CM_FILE_OPEN 9070 #defi ...

Javascript学习1 - Javascript中的类型对象

原文:Javascript学习1 - Javascript中的类型对象 1.1关于Numbers对象. 常用的方法:number.toString() 不用具体介绍,把数字转换为字符串,相应的还有一个 ...

Layer 中自定义属性的动画

原文:http://objccn.io/issue-12-2/ Layer 中自定义属性的动画     默认情况下,CALayer 及其子类的绝大部分标准属性都可以执行动画,无论是添加一个 CAAni ...

Go语言内存管理(一)内存分配

Go语言内存管理(一)内存分配 golang作为一种"高级语言",也提供了自己的内存管理机制.这样一方面可以简化编码的流程,降低因内存使用导致出现问题的频率(C语言使用者尤其是初学 ...

Linux系统安装Docker

1.安装Linux系统 2.查看centos内核版本.Docker要求centos的内核版本必须高于3.10.使用命令:uname -r 查看内核版本.如果低于3.10,使用命令:yum update ...

100度享乐电商网 html

mysql存储value_MySQL key/value存储方案(转)相关推荐

  1. HBase实战 | 从MySQL到HBase:数据存储方案转型的演进

    作者介绍 杨宏志,知乎首页架构负责人,主要负责首页工程化建设.工程架构优化.性能提升等工作.知乎专栏:https://zhuanlan.zhihu.com/c_195355141 本文转载自dbapl ...

  2. mysql docker还是rds_容器化RDS:计算存储分离还是本地存储?

    随着交流机会的增多(集中在金融行业,规模都在各自领域数一数二),发现大家对 Docker + Kubernetes 的接受程度超乎想象, 并极有兴趣将这套架构应用到 RDS 领域.数据库服务的需求可以 ...

  3. 《MySQL技术内幕:InnoDB存储引擎》第2版笔记

    第1章 MySQL体系结构和存储引擎 1.1 定义数据库和实例 在MySQL数据库中,数据库文件可以是fm.MYD.MYI.ibd结尾的文件. MySQL数据库由后台线程以及一个共享内存区组成. My ...

  4. MySQL教程——3 中级篇(存储引擎、优化SQL步骤、索引的使用)

    Mysql高级-day02 1. Mysql的体系结构概览 整个MySQL Server由以下组成 Connection Pool : 连接池组件 Management Services & ...

  5. MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)

    MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的"存储引擎"(storage_engine)呢?有时候面试题中也会问道MySQL几种常用的存储引 ...

  6. 查看mysql当前表使用的存储引擎(转)

    说明: 当我们创建表 "test"表时 CREATE TABLE test ( id INT(11) default NULL auto_increment, s char(60) ...

  7. mysql标准化存储结构_Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结  mysql...

    Atitit.自定义存储引擎的接口设计api标准化attilax总结mysql 1.图16.1:MySQL体系结构 存储引擎负责管理数据存储,以及MySQL的索引管理.通过定义的API,MySQL服务 ...

  8. MySQL学习笔记之五:存储引擎和查询缓存

    一.存储引擎 1.InnoDB ⑴InnoDB是基于聚簇索引建立的,基于主键索引查询时,性能较好:它的辅助索引中必须包含主键列:因此,若表上的索引较多,为节约空间,主键应尽可能小 ⑵InnoDB支持自 ...

  9. innodb和my查询速度_吃透MySQL:MyISAM和InnoDB存储引擎详细介绍

    一,MySQL基本架构 MySQL基础架构可以分为两大类:Server层和存储引擎层. Server层: Server层涵盖了MySQL大部分核心业务功能,并且所有存储引擎的功能都在这一层实现. 存储 ...

最新文章

  1. 一个苹果证书供多台电脑开发使用——导出p12文件
  2. JVM内存管理及GC机制
  3. HTML 转 PDF 新姿势
  4. Qt控制台输出QString
  5. 嵌入式设备web服务器比较
  6. 1003. [ZJOI2006]物流运输【区间DP+最短路】
  7. 趣学python3(15)-f-string字符串
  8. hdu 4291 矩阵幂 循环节
  9. linux内核的冒险md来源释义# 14raid5非条块读
  10. Linux环境下Flume的安装
  11. 5 个 IDEA 必备插件,让效率成为习惯
  12. 深入解析物联网操作系统(架构/功能/实例分析)
  13. symbol lookup error: undefined symbol:PySlice_Unpack
  14. NoSQL之HBase
  15. 关于ie浏览器的问题
  16. Visio 2003 Professional 安装序列号
  17. 怎样使用计算机解方程,【教程】用计算器解方程(牛顿法)
  18. 科罗拉多州立大学计算机科学,科罗拉多州立大学
  19. Android城市公交查询系统,书签基于android平台的实时公交查询系统
  20. C#wmp.dll自动注册失败

热门文章

  1. 触摸菜单:纸质菜单终结者
  2. OBS 基础 14 视频信息设置
  3. 人工智能领域计算机应用的研究与探索,人工智能的研究领域与应用领域
  4. CentOS7 扩容任何目录(包括 /boot)小白都可以学会,每一步都有详细截图引导
  5. 企业中是如何运用二八定律?
  6. 浅谈Android高通(Qualcomm)和联发科(MTK)平台
  7. tensorflow 使用 TFRecord 读取图片(二)
  8. Linux基础 (安装JDK MySQL 安装Tomcat)
  9. eclipse导包快捷键
  10. python将音频转换成声谱图_每张图片自带BGM?牛津小哥开源神器,实现任意图像转换声谱图...