接上一篇的磁盘存储设备,这一篇来说内存存储设备。
2.内存存储设备
内存存储设备用于提供高性能数据存储和处理能力,通常采用RAM。RAM的处理能力不断提升,成本不断降低,再加上固态硬盘的读写速度不断提高,使基于内存的数据存储解决方案成为可能。
将数据存储在内存中消除了磁盘I/O过程中的延迟,避免了主内存和硬盘之间数据传输等待,加快了数据处理速度。可通过在内存存储设备中横向扩充集群来显著提升内存存储设备的数据处理能力,这适用于大数据应用场景。相对于磁盘存储,内存存储设备支持更快的数据传输和接入,这大大缩短了大数据分析的执行时间,使实时大数据分析成为可能。
上述文字可总结为下图:
书中实例:
图中所示,从内存存储设备中读取数据要比从磁盘存储设备中读取数据快约80倍。
大数据解决方案中的内存存储通常通过集群方式部署,保证高可用性和冗余性。这种集群方式可通过增加物理节点或增加内存的方式实现,但一个物理节点中可扩展的内存数目是有限的,当内存存储数目达到上限时,则通过扩展物理节点的方式部署。
相对于磁盘存储设备,内存存储设备的成本更高,通常用于存储较新的或更为重要的数据。
适用内存存储设备的场景:(注:括号中的部分是小编的个人理解。。与原著无关。。)
a)数据快速产生,要求实时分析或流处理;(这点毋庸置疑,内存处理,为“快速”而生)
b)要求连续的或永远在线的分析;(接入快,处理快,当然要选我)
c)要求交互查询处理和实时数据可视化,包括假设分析和下钻操作;(实时,在线,内存设备处理的强项)
d)多个数据处理任务同时对同一个数据集进行操作;(接入快,处理快,再多任务都不怕)
e)进行探索式数据分析,在算法模型改变时无需重新从硬盘加载数据;(当然要舍远取近)
f)需要反复接入同一数据集,例如执行基于图像的算法时;(放内存里,随时用随时拿)
g)要求ACID事务支持的低延迟大数据解决方案。(实时,快速,省时)
不适用内存存储设备的场景:
a)包含批处理任务的数据处理过程;(数据量太太太大时,内存还是有限的)
b)需要长时间在内存存储设备中存储大量数据用于深度分析;(内存贵啊,用来放新的重要的数据,你长时间占用,我hold不住啊。。)
c)需要接入大量数据并包含批处理任务的战略性BI或战略性分析;(内存有限,有限。。数据量太太太大时,你还是去找硬盘老兄吧。。)
d)数据集非常大,现有内存装不下;(臣妾做不到。。)
e)公司预算有限。(内存存储设备比硬盘存储设备贵,费银子)
内存存储设备可通过两种方式部署:
a)内存数据网格(In-Memory Data Grid,IMDG)
b)内存数据库(In-Memory Database,IMDB)
区别是:数据在内存存储设备中存储的方式不同。
1)内存数据网格(IMDG)
IMDG将数据以键值对的方式存储在多个节点中,键值以序列化的也就是串行的形式存储。IMDG支持半结构化和非结构化数据存储,数据接入通过API完成。
如图:
步骤1:图像、XML数据、用户对象首先被序列化引擎转化为序列化形式;
步骤2:这些数据在IMDG中被以键值对的方式存储;
步骤3:终端用户通过key来请求获取用户对象;
步骤4:用户对象的value被IMDG以序列化形式返回;
步骤5:终端用户采用序列化引擎对该value进行解序列化操作,得到用户对象;
步骤6:对该用户对象进行所需的操作。
IMDG中的各个节点保持同步,提供高可用性、容错性和一致性。相对于磁盘存储设备中NoSQL数据库的最终一致性,内存存储设备IMDG支持立即一致性。
IMDG通过数据分区和数据复制来进行横向扩充,通过在其他节点复制数据来确保数据的可靠性。当其中某个节点发生故障后,可从其他节点复制还原先前的数据。
从功能性角度来看,IMDG像是分布式内存,提供基于内存的快速频繁的数据接入。但与分布式内存不同的是:IMDG通过对数据的复制支持高可靠性和高可用性。
实时数据处理中,将数据在IMDG中进行处理,在写入磁盘;或者将数据从磁盘中取出,在IMDG中进行处理。这加快了数据处理速度,特别适用于那些多项任务同时操作或同一算法反复操作同一个数据库的场景。同时,IMDG支持基于内存的MapReduce,大大减少了磁盘处理带来的延迟。
IMDG可部署在云端,提供灵活的存储媒介大小,根据所需存储设备容量大小的不同灵活地向内缩小或向外扩展。
部分IMDG支持有限的或全部的SQL操作,例如In-Memory Data Fabric、Hazelcast和Oracle Coherence。
在大数据解决方案中,IMDG通常与磁盘存储设备共同部署,通过下列方式进行:
a)同步读
b)同步写
c)异步写
d)异步刷新
A.同步读
如果所需读取的数据在IMDG中找不到,则需从磁盘存储设备(如NoSQL数据库)中读取,并把读取到的数据存储到IMDG中同时返回给用户。之后连续对该数据的读取可直接在IMDG中进行。这种方式会造成数据读取过程中的延迟。
如图中所示的例子,Client A需要查询key为3的数据,IMDG中无法找到,则从NoSQL数据库中读取,并复制到IMDG中同时返回给Client A,紧接着Client B需要读取key为3的数据,可直接在IMDG中得到。
B.同步写
任何对IMDG的写操作(增/删/改)都需要在磁盘存储设备中进行同步,如果同步失败,IMDG将退回之前的状态。内存存储设备IMDG与磁盘存储设备可达到立即一致性。
如图中所示,Client需要写入key为3的新数据,需要写入IMDG,再写入NoSQL数据库,当两种存储设备中均成功写入该数据时,IMDG才向Client返回写入成功的消息。
由于需要等待两种存储设备均完成对数据的成功写入,这种方式会造成数据写操作过程中的延迟。
C.异步写
任何对IMDG的写操作会以批处理的方式异步传输给磁盘存储设备。
如图中所示:
步骤1:Client A需要更新key为3的数据,则该数据在IMDG中进行更新并由IMDG发送消息队列给NoSQL数据库;
步骤2:当NoSQL数据库尚未收到该数据更新消息队列时,其存储的key为3的数据是旧数据,此时,Client B需要向NoSQL数据库读取该数据;
步骤3:Client B得到的是旧数据;
步骤4:经过一段时间,消息队列到达NoSQL数据库;
步骤5:在NoSQL数据库中对key为3的数据进行更新;
步骤6:Client C向需要向NoSQL数据库读取该数据;
步骤7:Client C获取key为3的更新后的数据。
这种方式消除了前两种方式中数据读取和写入操作中的延迟,但造成了数据在一定时间内的不一致性,上面的例子中Client B与Client C获取的同一条数据就不一致。
D.异步刷新
在异步刷新方式中,IMDG中的数据有有效期,在有效期时间超出时,IMDG删除该数据。当数据在IMDG中被删除后,对该数据的读取会在硬盘存储设备中进行,同时将该数据再次写入IMDG直到有效期结束时将该数据删除。
这种方式适用于有效期时间范围内对同一条数据的频繁读取。
IMDG适用场景:
a)要求最小化数据接入延迟;
b)数据以半结构化或非结构化方式存储;
c)与磁盘存储设备共同部署;
d)数据存储设备已无法替换但数据接入层仍可被修改;
e)非关系型数据存储场景。
2.内存数据库(IMDB)
顾名思义,IMDB即是将数据库技术应用于内存存储设备的数据库,利用RAM的高性能来减少磁盘存储设备在数据操作中的延迟。
如图所示,IMDB不需要IMDG中的序列化引擎,没有对数据序列化和解序列化的过程,用户通过SQL语句在IMDB中查询数据,IMDB返回结果。
IMDB中可存储关系型数据和非关系型数据,支持结构化、半结构化、非结构化数据的存储。
与IMDG不同的是,IMDB通常不需要与硬盘存储设备共同部署,可以更快更便捷的建立数据内存存储数据库。在大数据解决方案实现过程中,IMDG可与现有的磁盘存储设备共同部署,而IMDB通常需要替换现有的磁盘存储设备。
IMDB的可扩展性通常不如IMDG,需要通过多节点集群的方式进行分布式部署。
IMDB的例子有:Aerospike、MemSQL、Altibase HDB、eXtreme DB和Pivotal GemFire XD。
适用IMDB的场景:
a)需要将关系型数据存储在内存中,并支持ACID;
b)需要在现有的大数据解决方案中增加对实时性操作的支持;
c)现有的磁盘存储设备可被替换;
d)需要最小化对数据接入层的改造,例如接入层需要支持SQL语句,IMDB支持SQL查询;
e)需要支持关系型数据存储。
领取专属 10元无门槛券
私享最新 技术干货