数据存储选型 - Wangxiaoman/tech-note GitHub Wiki

常用的数据存储方案

以下所有性能为大体估测,实际还需要考虑数据的存储结构,数据量,机器性能等这种复合因素

关系型数据库

  1. Mysql - Mysql常见优化方案
  • 存储方式:磁盘型
  • 性能:K(简单查询也能到W)
  • 数据结构:表 → 列
  • 持久化:支持
  • 主从:支持,binlog方式
  • 集群方案:业务来分,TiDB,OceanBase(阿里)

KV

  1. Redis - Redis常见问题
  • 存储方式:内存型
  • 性能:10W+
  • 数据结构:database(基本不用,默认为0) → KV (string、set、list、zset、hash)
  • 持久化:支持
  • 集群方案:Redis cluster(官方),Codis(豌豆荚)
  1. RockDB(存储引擎)
  • 存储方式:磁盘型
  • 性能:W,基于LSMTree,性能次于Redis(一般使用SSD)
  • 数据结构:ColumnFamily → KV
  • 持久化:支持
  • 集群方案:tair、自己实现
  • 说明:rocksdb只是一个存储引擎,有现成的方案可以使用,比如pika,或者facebook基于rocksdb引擎的mysql版本
  1. Memcached
  • 存储方式:内存型
  • 性能:10W+
  • 数据结构:KV
  • 持久化:不支持
  • 集群方案:自己实现(微博实现过)

文档型

  1. MongoDB
  • 存储方式:内存/磁盘
  • 性能:W
  • 数据结构:文档型,可以认为存储的内容为JSON,相对关系型数据库,就是列可以非常灵活的写入
  • 持久化:支持

搜素型

  1. ElasticSearch
  • 存储方式:磁盘性
  • 性能:K
  • 持久化:支持
  • 集群方案:天然支持
  • 特点:底层为lucene,tf-idf,倒排索引
  1. Neo4j(图数据库)
  • 存储方式:磁盘性
  • 持久化:支持
  • 集群方案:暂时不支持
  • 特点:通过Lucene支持索引,遵循图数据模型

选择

  • 关系型数据库:如果数据格式很确定,满足关系型,而且必须持久化,那么Mysql、PostgreSql、Oracle都是比较好的选择,Oracle是付费的,PostgreSql相对小众,所以首推Mysql
  • KV型:如果对于性能要求较高,现在Redis是比较通用的方案,数据结构丰富,并且持久化方案很规范,3.0之后集群功能也逐步完善。如果是数据存储量较大,不要求非常高的性能,可以考虑RocksDB