使用 MySQL 存储 schema-less 数据的探索

更新日期: 2018-02-06 阅读次数: 6190 分类: MySQL

table design:

表结构做成 id, key, value 还是 key, value 比较好。

按照 Bret Taylor 的分享,比较好的设计是

  • added_id -> INT NOT NULL AUTO_INCREMENT PRIMARY KEY
  • id -> UNIQUE KEY
  • updated -> KEY
  • body -> json

之所以加上自增的 added_id, 是因为 Mysql InnoDB 是按照主键顺序在磁盘上顺序存储 数据的。这样就能保证新数据总是能写在旧数据的后面,因为新数据读取的频率总会高于 旧数据,磁头不会波动太大。

e.g.

CREATE TABLE entities (
    added_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    id CHAR(32) NOT NULL,
    updated DATETIME NOT NULL,
    body MEDIUMBLOB,
    UNIQUE KEY (id),
    KEY (updated)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

notes:

  • id -> uuid4.hex

参考

How FriendFeed uses MySQL to store schema-less data http://backchannel.org/blog/friendfeed-schemaless-mysql

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式