赞
踩
为了更好的理解冷热分离的概念,我们先了解下什么是热数据,什么是冷数据。
热数据指的是需要即时对用户进行分发的数据,即从数据源抓取之后经过数据处理,需要即时存储到可快速分发的存储介质供API或直接面向用户的系统使用。
热数据需要重点保障服务质量和稳定性,为了保证数据的时效性,在数据处理上也是优先级高的数据。
冷数据指的是不需要即时发给用户的数据。
这些数不会原样分发给用户,它们需要经过长期的积累,使我们可以从中得到基于此更高层次的分析。
冷热分离指的是在处理数据时将数据库分为冷库和热库,冷库指用于存放走到了终态的数据(冷数据)的数据库,热库用于存放还需要修改的数据(热数据)的数据库。
工作中,随着数据库表数据量的增大,我们会发现,对表数据的读写操作会变得越来越慢,有时候查询一条数据会耗费几十秒或几分钟才查出结果,甚至多点击几次查询还会出现宕机。
这个时候,我们可能首先会想到通过对表结构、业务代码、索引、SQL语句等方面进行优化,以此来提高读写操作响应速度。然而,对于表数据量相对较大的情况,我们发现优化效果有限,并未达到预期效果。
此时,我们可以考虑是否可以通冷热分离来提升读写、查询效率。
HBase 是一个面向列式存储的分布式数据库,其设计思想来源于 Google 的 BigTable 论文。HBase 底层存储基于 HDFS 实现,集群的管理基于 ZooKeeper 实现。HBase 良好的分布式架构设计为海量数据的快速存储、随机访问提供了可能,基于数据副本机制和分区机制可以轻松实现在线扩容、缩容和数据容灾,是大数据领域中 Key-Value 数据结构存储最常用的数据库方案。
HBase 可以将数据存储在本地文件系统,也可以存储在 HDFS 文件系统。在生产环境中,HBase 一般运行在 HDFS 上,以 HDFS 作为基础的存储设施。HBase 通过 HBase Client 提供的 Java API 来访问 HBase 数据库,以完成数据的写入和读取。HBase 集群主由HMaster、Region Server 和 ZooKeeper 组成
关系型数据天然就是表格式的,因此存储在数据表的行和列中,结构化存储。
非关系型数据通常存储在数据集中,就像文档、键值对、列存储、图结构。
在基于web的结构中,关系型数据库是最难以横向拓展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库没有办法像web Server那样简单的通过添加更多的硬件和服务节点来拓展性能和负载能力。通常要优化机器性能。
而非关系型数据存储天然就是分布式的,NoSQL数据库是横向扩展的,可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。
NoSQL数据库是最终一致性,一般不保证ACID的数据存储系统,具有极高的并发读写性能,真正闪亮的价值是在操作的扩展性和大数据量处理方面。
elasticsearch简写es,es是一个高扩展、开源的全文检索和分析引擎,它可以准实时地快速存储、搜索、分析海量的数据,拓展性强,需要拓展时添加多个节点即可
解决了传统的关系型数据库每次搜索都要进行全表搜索,速度慢,而且当数据的体量过大时搜索速度就会变慢难以维护扩展
像其他的NOSQL数据存储一样,ES是不支持事务的,如果要事务机制,还是考虑使用其他的数据库做真实库
需要高可用和可扩展,需要在极短的时间内存储、搜索和分析大量的数据
Redis 是一个高性能的key-value数据库,将数据存储在内存中,将需要多次查询的数据存起来,每次需要访问相同的数据时就从内存读取,从而实现极快的速度查询到数据,非关系型数据库
解决了传统数据库查询多次查询相同数据时的缓慢问题
[1] 缓存雪崩
指缓存由于某些原因(比如 宕机、cache服务挂了或者不响应)整体失效了,导致大量请求到达后端数据库,从而导致数据库崩溃,整个系统崩溃,发生灾难.
[2] 缓存击穿
缓存击穿是指缓存中没有但数据库中有的数据.如果一些key被高并发访问**,恰好在这个时间点某个key缓存过期,从而导致了大量请求达到数据库**,,这就导致数据库中并发的去执行了很多不必要的查询操作,从而导致巨大冲击和压力.
[3] 缓存穿透
是指缓存和数据库中都没有的数据,而用户不断发起请求,导致请求都打到了数据库上,导致数据库异常.
在需要大规模的重复数据查询时,如果继续使用数据库的化,可能会导致数据库查询速度缓慢甚至崩溃,这时可以将一次查询出来的结果存在redis缓存中,下次再来查询这个数据时只需要在缓存中查询即可,因为缓存时位于内存中的,所以查询速度很快
分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表拆分成若干数据表组成,使单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。
解决由于数据量过大而导致数据库性能降低的问题
由于分库分表后把数据分布在不同库甚至不同的服务器,数据库原有的单库的数据库事务就会失效,不同的数据库实例完成同一个事物可能会失败从而带来分布式事务问题。
主要有以下几种情况:
主要有以下几种情况:
将需要多次访问的数据存储到本地,使下次访问的速度提升
常用中间件:Varnish,Ngnix,Squid,Memcache,Redis,Ehcache等
本地缓存保存在客户端,不会占用服务器资源
服务器缓存是保管在服务器端的,每个用户都会产生一个缓存键,值。加入并发的用户非常多,会产生大量的缓存,消耗大量的内存资源。
缓存的击穿、穿透、雪崩
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据
可以作为消息系统,当用户的客户端不在线时,可以将消息存在kafka上,当用户的客户端上线后在将用户错过的这些消息发送到用户的客户端上
综合下来kafka的优势是多于其他中间件的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。