本文主要是介绍思维导图:数据库选型决策,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思维导图:数据库选型决策
MySQL、ElasticSearch、MondoDB、Redis、HBase、Cassandra、ScyllaDB,以及Spark和Flink的简单对比
文字版:
数据库选型决策作者路飞的纯白世界MySQL引擎种类InnoDB支持事务支持外键聚集索引必须有主键辅助索引绑定在主键索引的叶子索引上根据主键索引查询最快,只需一次检索根据辅助索引查询需要两次检索不记录表的总行数,需要全表扫描才可知总行数最小的锁粒度是行锁MyISAM不支持事务不支持外键非聚集索引主键索引和辅助索引各自独立会记录表的总行数最小的锁粒度是表锁选择默认且推荐使用InnoDB不需要事务的表可考虑MyISAM适用场景严格事务需求优势CAP的CA强一致性可用性局部查询性能优越索引和分区能解决大部分查询性能问题InnoDB对事务支持好性能瓶颈全表扫描性能差多表关联查询性能差原理索引B+树只有叶子节点具有data非叶子节点没有data,一次IO可读出更多的索引值,利于减少IO次数利于范围查询时间复杂度O(log n)B-树所有节点都有data最快一次命中索引ElasticSearch(8)适用场景OLAP全文搜索人类自然语言地理位置搜索和计算通常作为其他数据库的辅助(数据主要存储在其他数据库上)优势天生分布式扩容方便集群自动增删索引或节点强大的聚合和分析能力常见问题冲突问题重要的文档需要并发控制,通常使用version比对的乐观控制机制分页问题from越大,协调节点的整体排序越耗时原理倒排索引通常情况下,是对文档id建索引,要找到关键词所在的文档,需要将每个文档内容都检索一遍而倒排索引是根据关键词建索引,通过关键词直接查询到所在文档以及出现次数分布式检索分片查询阶段分别查询排序、再整体排序分片取回阶段取回完整文档并返回格式类型类json文档型使用方式Restful APIMongoDB(5)适用场景满足1个以上就可以使用,满足越多越适用无事务?需求在变?数据模型不确定?想快速迭代开发?需要2000或更高的QPS?需要TB甚至PB级别的数据存储?快速水平扩展?优势灵活文档类型高可用复制集可扩展分片集群性能极高复杂查询位置查询数据可冷热分离Redis适用场景缓存队列访问统计分布式session分布式锁优势快!纯内存访问数据类型丰富内存优化内存回收策略定时删除惰性删除内存优化缩短键值对象的长度共享对象池字符串优化控制键的数量原理分布式方案集群方案Redis Cluster集群内节点互相通讯支持16384个虚拟槽分区分片方案客户端分片一致性哈希算法中间件分片CodisProxy集群内节点无需相互通讯支持1024个虚拟槽分区TwemProxy数据持久化RDB快照方式恢复快持久化效率高存在数据丢失风险AOF实时追加日志方式实时安全持久化效率低HBase(23)适用场景建立在HDFS上通常由大数据部门维护快速随机读写大数据容量强一致性优势CAP中的CP强一致性和分区容错性Cassandra(11)适用场景轻松运维和扩容快速随机读写更像数据库通常由dba维护高并发读写写多读少为写吞吐做了优化大数据容量优势CAP中的AP可用性和分区容错性可配置为最终一致性对比HBase性能比HBase好,因为直接存取磁盘,而不是通过HDFS文件系统功能比HBase丰富,如CQL、类型Cassandra是无中心架构,没有单点故障线性扩容、运维简单可用率100%HBase是主从架构,主挂了需要重新选举灵活的数据存储结构化半结构化非结构化事务支持原子性一致性隔离持久性快速写入被设计成可在廉价机器上运行存储数百T数据,而不牺牲读取效率ScyllaDB(102)Cassandra的C++版本优势性能是Cassandra的十倍意味着成本也降低了十倍亚毫秒级劣势不稳定重启耗时超长,或启动失败https://www.zhihu.com/question/35956679/answer/418001368数据丢失风险Spark和FlinkSpark适用场景离线批处理简单机器学习优势批处理模拟流处理通过微批模拟内置机器学习库支持丰富的数据源劣势实时性不及Flink窗口支持不及Flink只支持处理时间不支持精确一次故障恢复会重复处理Flink适用场景实时流处理数据管道ETL事件驱动型应用优势实时流处理模拟批处理低延时高吞吐量容错和精确一次计算保证状态快照是异步获取和存储的发生故障时可通过状态快照恢复窗口方式滑动滚动会话窗口优势支持窗口种类多支持时间窗口支持消息数量窗口支持时间种类多事件时间产生这个消息的时间、或者消息的某某时间字段处理时间flink算子处理到这个消息的系统时间注入时间刚进入flink source的时间时间类型优势事件时间事件本身自带的时间能保证结果的准确性和一致性处理时间处理时引擎时钟的时间适合低延时,能容忍近似结果的流处理应用读取时间读取到事件时记录的时间事件时间和自由度极高的定制化窗口逻辑应用场景事件驱动型应用提供的支持有事件时间和自由度极高的定制化窗口逻辑内置ProcessFunction支持细粒度时间控制复杂事件处理库(CEP)savepoint一致性的状态印象完成一次savepoint后,可放心对应用升级或扩容还可启动多个版本进行a/b测试典型事件驱动型场景反欺诈异常检测基于规则的预警业务流程监控web应用数据分析应用类型流式分析批量分析方式提供统一的高级SQL语义也可做更低层的控制flink DataStream apiflink DataSet api典型数据分析场景电信网络质量监控消费者技术中的数据实时即席分析大规模图分析电信故障关联强度分析数据管道应用数据管道和ETL典型数据管道场景实时查询索引构建持续ETL
这篇关于思维导图:数据库选型决策的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!