如何选择分布式数据库? 几种分布式数据库的优缺点列表
1 .为什么选择分布式数据库?
优点如下。
)1)具有灵活的体系结构
(2)对应分散型管理控制机构
)3)经济性好
)4)系统可靠性高,可用性好
5 )局部APP应用响应速度快
)6)可扩展性强,易于集成现有系统。
2 .相关技术概念介绍
2.1什么是分布式数据库?
一般的分布式系统
a )支持持久存储的分布式存储系统;
b )以计算为重点的分布式计算框架
c )分布式消息队列
根据不同的APP应用领域,对上述分类进行了细分,将典型的分布式存储系统分为以下几类:
1 .分布式协作系统(分布式日志复制) ) )。
2 .分布式任务调度框架
3 .流计算框架
4 .分布式文件/目标系统
5 .分布式NoSQL存储
6 .分布式关系数据库(OLAP、OLTP;
7 .各种消息队列mq
一般大多数人使用ETCD的是分布式协同系统(日志复制系统),实际上是paxos算法及其变体的实现。 通常只存储少量的元数据信息,因此存储大型文件并使用ETCD读取是不合适的。
2.2不同的分布式数据库如何区分?
1.Key-value NoSQL
例如Redis Riak等;
2.columnfamilynosql (widecolumnstore )。
典型地为Hbase Cassandra;
3 .文档no SQL
典型的是mongodb
3 .需要什么数据库
1 .支持数据持续、数据丢弃、异常备份、高并发、大数据量存储。
2 .支持频繁读写数据
3 .分布式、多节点并行
4 .不与以前的数据库冲突
4 .可选方法及其特点
根据上述要求,适合分布式数据库、大数据存储、支持频繁读写的数据库有以下几种,下面简要说明它们的特点。
1 .电子搜索数据库
1 .电子搜索简介
的分布式实时文件存储,每个字段被索引,可搜索,分布式实时分析搜索引擎
可扩展到数百台服务器以处理Pb级结构化或非结构化数据
2 .电子搜索APP场景
分布式搜索引擎和数据分析引擎,全文搜索,结构化搜索,数据分析
海量数据的近实时处理、站内搜索(电子商务、招聘、门户等)、IT系统搜索)、CRM、ERP等)、数据分析
3 .电子搜索的优缺点
缺点:没有用户验证和权限控制,没有事务概念,不支持回滚,错误删除无法恢复,需要java环境
优点:可以将您的文档划分为不同的容器或分片,并且可以存在单个节点或多个节点
复制每个分片以备份数据,从而避免因硬件问题导致的数据丢失。 路由群集中任何节点的交叉请求,以确保需要获取的数据。 4.Elasticsearch持久化方案,用于在群集添加或重新分配分片时,在不停机的情况下恢复新节点上丢失的节点片数据
gateway表示elasticsearch索引的持久化存储方法,elasticsearch默认将索引保存在内存中,并在内存已满时持久化到硬盘中。 当此elasticsearch群集关闭或重新启动时,将从网关读取索引数据。 elasticsearch支持多种类型的网关,包括本地文件系统(默认)、分布式文件系统、Hadoop的HDFS和亚马逊的s3云存储服务。
ElasticSearch将索引的内容存储在内存中,并在内存不足时将索引永久存储在硬盘上。 另一个队列会在系统空闲时自动将索引写入硬盘。
2.Redis数据库
1.Redis介绍
redis是一个高级开源BSD许可证密钥对值存储系统(NoSQL ),可以存储字符串、kwdhb结构、链表和集合。 因此,它经常被用来提供数据结构服务。 redis支持数据持久性,可以将内存中的数据保存到磁盘,并在重新启动时重新加载和使用。 支持简单的密钥值类型的数据,还提供list、set、zset、hash等数据结构的存储。 Redis支持数据备份,也就是主模式的数据备份。
2.Redis应用场景
a )正常计数:粉丝数、微博数
b )更改用户信息
c )缓存处理,作为mysql的缓存
d )排队系统、优先级排队系统和日志收集系统
3.Redis的优缺点
优点: (1)高速。 因为数据存在于内存中,所以与HashMap相似。 HashMap的优点是检索和操作的时间复杂度为o ) 1
)2)支持丰富的数据类型,支持字符串、列表、集、源集、散列
)3)支助事务
操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
缺点:
(1)Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复
(2)主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性
(3)redis的主从复制采用全量复制,复制过程中主机会fork出一个子进程对内存做一份快照,并将子进程的内存快照保存为文件发送给从机,这一过程需要确保主机有足够多的空余内存。若快照文件较大,对集群的服务能力会产生较大的影响,而且复制过程是在从机新加入集群或者从机和主机网络断开重连时都会进行,也就是网络波动都会造成主机和从机间的一次全量的数据复制,这对实际的系统运营造成了不小的麻烦
(4)Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。
4.Redis的持久化方案
redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
3.Mongodb数据库
1.Mongodb简介
MongoDB本身是一种非关系型数据库。它的每一条记录是一个Document,每个Document有一组键值对组成。MongoDB中的Document与JSON对象相似。 Document中字段的值可能包括其他Document,数组等。
2.Mongodb应用场景
mongodb的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(丰富的功能)架起一座桥梁,集两者的优势于一身。mongo适用于以下场景:
a.网站数据:mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
b.缓存:由于性能很高,mongo也适合作为信息基础设施的缓存层。在系统重启之后,由mongo搭建的持久化缓存可以避免下层的数据源过载。
c.大尺寸、低价值的数据:使用传统的关系数据库存储一些数据时可能会比较贵,在此之前,很多程序员往往会选择传统的文件进行存储。
d.高伸缩性的场景:mongo非常适合由数十或者数百台服务器组成的数据库。
e.用于对象及JSON数据的存储:mongo的BSON数据格式非常适合文档格式化的存储及查询。
3.Mongodb的优缺点
优点:
(1) 弱一致性(最终一致),更能保证用户的访问速度
(2) 文档结构的存储方式,能够更便捷的获取数据
(3) 内置GridFS,支持大容量的存储
(4) 在使用场合下,千万级别的文档对象,近10G的数据,对有索引的ID的查询不会比mysql慢,而对非索引字段的查询,则是全面胜出。
缺点:
(1)不支持事物
(2)占用空间过大,会造成磁盘浪费
(3)单机可靠性比较差
(4)大数据量持续插入,写入性能有较大波动
4.Mongodb的持久化方案/异常处理
当执行写操作时,MongoDB创建一个journal来包含确切磁盘位置和改变的字节。因此,如果服务器突然崩溃,启动时,journal会重放崩溃前并没有刷新到磁盘上的任何写操作。
数据文件每隔60s刷新到磁盘上,默认情况下,因此journal只需要持有60s内的写入数据。journal预分配了几个空文件用于此目的,位于/data/db/journal,命名为_j.0,j.1等等。
MongoDB运行很长时间情况下,在journal目录下,你会看到类似于_j.6217,_j.6218和_j.6219文件。这些文件是当前的journal文件,如果MongoDB一直运行,这些数字会持续增加。当正常关闭MongoDB时,这些文件将被清除,因为正常关机不在需要这些日志的。
如果服务器崩溃或kill -9, mongodb再次启动时,会重放journal文件,会输出冗长难懂的检验行,这表明在正常的恢复。
4.Mysql分布式集群
1.Mysql分布式集群简介
MySQL集群是一个无共享的(shared-nothing)、分布式节点架构的存储方案,其目的是提供容错性和高性能。数据更新使用读已提交隔离级别(read-committedisolation)来保证所有节点数据的一致性,使用两阶段提交机制(two-phasedcommit)保证所有节点都有相同的数据(如果任何一个写操作失败,则更新失败)。
无共享的对等节点使得某台服务器上的更新操作在其他服务器上立即可见。传播更新使用一种复杂的通信机制,这一机制专用来提供跨网络的高吞吐量。
通过多个MySQL服务器分配负载,从而最大程序地达到高性能,通过在不同位置存储数据保证高可用性和冗余。
2.Mysql分布式集群应用场景
解决海量存储问题,比如京东B2B就用的Mysql分布式集群。
适用几十亿的PV对DB的访问。
3.Mysql分布式集群的优缺点
优点:
a) 高可用性
b)快速的自动失效切换
c)灵活的分布式体系结构,没有单点故障
d)高吞吐量和低延迟
e)可扩展性强,支持在线扩容
缺点:
a)存在很多限制,比如:不支持外键
b)部署、管理、配置很复杂
c)占用磁盘空间大,内存大
d)备份和恢复不方便
e)重启的时候,数据节点将数据load到内存需要很长时间
4.Mysql分布式集群的持久化方案
负载均衡。
管理节点备份。