一些数据库学习的小结
一些数据库学习的小结:
SQL: 遵循ACID原则。支持Transaction。适合在线交易处理(OLTP),不适合在线分析处理(OLAP)。例子有
MySQL 读写效率 单机约1KQPS
POSTGRESQL
NoSQL: 遵循BASE原则。不支持Transaction。例子有
DynamoDB - Amazon Key-Value
BigTable - Google
MongoDB - 读写效率 单机约10QPS
Cassandra - 读写效率 单机约10QPS
Redis - 内存数据库 Key-Value 读写效率 单机约100KQPS。注意:Redis的设计是用来做缓存的,它是一个内存数据库,不过因为其某些特性适合用来充当队列(Redis的List数据结构比较适合做MQ),所以也多被用于做简单的消息队列。
Memcached - 内存数据库 单机约1MQPS ?
NoSQL 有四种类型
- Document Stores: Document以JSON,XML, PDF或OFFICE Document等格式存储,称为BLOB。例子有MongoDB, CouchDB。
- Graph Databases: Neo4j, VertexDB
- Key-Value Stores: Key存在Hash-table里面。支持通常的CRUD操作,不支持JOIN和AGGREATE操作 (因为Hash函数不支持Range Query的操作)。键值数据库主要运行在内存,实现定期向硬盘读写数据的策略。例子有Redis, Memcached, Riak(是DynamoDB的开源实现), DynamoDB, RocksDB。
- Columnar Databases: 适合在线分析处理(OLAP),不适合在线交易处理(OLTP)。适合Range Query? MariaDB, Cassandra (开源), HBase, Vertica
下面这些帖子讲的不错。
https://devpress.csdn.net/awstech/64e730eaa3cccc782cc5672e.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTI0ODc4MCwiZXhwIjoxNzAxNDE5Mjk3LCJpYXQiOjE3MDA4MTQ0OTcsInVzZXJuYW1lIjoicm91Zm9vIn0.OEngDhSlFpKn1WbVxkceyS8kl3lY3KBG7Qk5U_LVGG8
https://www.sohu.com/a/348809104_315839
关于索引
MySQL - 基于B+树
MongoDB - 基于B树