内存计算

如果说云计算这个新瓶装的是虚拟化+ SOA/网格计算+SaaS(软件即服务)的老酒,那么内存计算则重点是释放了计算这一部分的能量。

但是对内存计算经常有一些误解:

1、大容量内存很贵

2、 内存计算不会持久化:实际上几乎所有的内存计算中间件都提供多种内存备份、持久存储备份以及基于磁盘的swap空间溢出的策略。

3、内存计算要取代数据仓库:内存计算的目的是要改善那些需要OLTP和OLAP混合处理的可操作数据集(Operational Dataset)的计算,而非历史数据集(Historical dataset)。简言之,内存计算不是要把企业的所有数据都放进内存。

4、闪存已经足够快了:内存计算不是要达到2-3倍的边际效应提升(Marginal Effect),而是10-100倍的提升,使之前那些不可行的业务和服务成为可能。

5、内存计算等于内存数据库:首先,内存计算是一种技术而不是某种产品。其次,内存数据库只是目前内存计算触手可及的成果,内存计算长期的发展还是在流式处理(Stream Processing)上。此外,内存计算与传统内存数据库的区别是:内存计算是为分布式、弹性环境以及内存数据处理而设计的。

一、内存计算产品分类 

根据内存计算技术的发展顺序,内存计算大致可以分为三类产品:

1、 分布式缓存(Memcached/Redis):主要使用场景就是将频繁访问的数据保存在内存中避免磁盘加载。多数产品都是分布式内存key/value存储,并提供简单的put和get方法。随着不断成熟,与后端的read/write-through,ACID事务,复制和分区,eviction策略等也逐渐加入到产品中,这些特性也成为了后来出现的IMDG/IMCG产品的基础。

2、内存数据/计算网格(IMDG/IMCG, GemFire/Hazelcast/GridGain):数据网格的显著特性是co-location计算,将计算过程发送到数据本地执行。这是数据/计算网格的关键创新点,在数据量不断增长的情况下再加数据抓取过来执行计算已经变得不现实了。这种创新也不仅使内存计算从简单的缓存产品进化,也激发了后来IMDB的诞生。

3、分布式内存数据库(IMDB, VoltDB/Impala):分布式内存数据库的显著特性是增加了基于标准SQL或MapReduce的MPP(大规模并行处理)能力。如果说数据网格的核心是解决数据量不断增长下计算的困境,那么分布式内存数据库就是解决计算复杂度不断增长的困境。它提供了分布式SQL、复杂(分布式共享)索引、MapReduce处理等工具。

值得注意的是,随着技术的发展,有些界限不再那样清晰。像现在很多IMDG产品已经具有IMDB的特性,能够提供复杂的分布式SQL和MapReduce计算能力。不管怎样,这些产品中的核心技术和算法都是不变的,所以学习时不必过分纠结某个产品到底属于那一类。

二、应用场景 

以上提到的各种内存计算产品可以应用到大数据处理的各个环节上,如下图所示,其中涉及内存计算的技术标成红色

1)事务处理:主要分为Cache(Memcached, Redis, GemFire)、RDBMS、NewSQL(以VoltDB为首的)三部分,缓存和NewSQL数据库是关注的重点。

2)流式处理:Storm本身只是计算的框架,而Spark-Streaming才实现了内存计算式的流处理。

3)分析阶段的对比:

通用处理:MapReduce,Spark

查询:Hive,Pig,Spark-Shark

数据挖掘:Mahout,Spark-MLLib,Spark-GraphX

从上可以看出,Spark生态圈的子项目以及Impala都是值得关注的重点。

三、核心技术

因为内存计算主要释放了云计算中的计算部分的能量,所以它主要涉及并行/分布式计算和内存数据管理这两大方面的技术体系:

1、并行/分布式计算:网络拓扑、RPC通信、系统同步、持久化、日志。

2、内存数据管理:字典编码、数据压缩、内存中数据格式、数据操作、内存索引、内存中并发控制和事务。

以下简单列举了内存计算主流产品中涉及到的技术点:

(1)Memcached/Redis:一致性哈希。

(2)GridGain:DHT、refresh-ahead、off-heap、continuous query。

(3)Infinispan:LIRS eviction。

(4)Spark(LMAX):immutable model(RDD)。

(5)VoltDB:single-threaded。

(6)Impala(Dremel):LLVM optimizing、nested record、MPP

时间: 2024-11-07 04:51:39

内存计算的相关文章

C++ sizeof的内存计算(1)

文章来自NoAlGo博客原创:C++ sizeof的内存计算(1) 内存控制是程序设计过程中非常关键的一环,C/C++中使用sizeof计算数据占用的内存大小是一个常见的手段,但是这个问题涉及到很多基础的编程细节,能够很好地反映一个程序员的基本功,成为了笔试面试常见的问题之一.这里总结了一些常见的问题,鉴于篇幅问题,分成两部分进行,这里主要介绍比较基础的第一部分. C++ sizeof的内存计算(1) C++ sizeof的内存计算(2) 一 sizeof定义 在C++中sizeof的使用方法看

C++ sizeof的内存计算(2)

文章来自NoAlGo博客原创 :C++ sizeof的内存计算(2) 内存控制是程序设计过程中非常关键的一环,C/C++中使用sizeof计算数据占用的内存大小是一个常见的手段,但是这个问题涉及到很多基础的编程细节,能够很好地反映一个程序员的基本功,成为了笔试面试常见的问题之一.这里总结了一些常见的问题,鉴于篇幅问题,分成两部分进行,这里主要介绍稍微进阶的第二部分. C++ sizeof的内存计算(1) C++ sizeof的内存计算(2) 三 复合类型 对于基本的数据类型,如char.int.

zw版_Halcon图像数据交换和全内存计算.TXT

Halcon由于效率和其他原因,内部图像采用了很多自有格式,提高运行速度,但在数据交换方面非常麻烦. 特别是基于com.net控件模式的二次开发,无论是c,vb,还是delphi,目前都没有一种理想的解决方案. 目前,一般采用的以下两种方式进行转换: hobject桥接模式,内存拷贝,通道分离 外部硬盘文件交换 hobject桥接模式,参见:zw版[转发·台湾nvp系列Delphi例程]HALCON HImage与Bitmap格式转换 http://www.cnblogs.com/ziwang/

“非易失性内存”嫁接“内存计算”——高速安全的大数据时代来临

“非易失性内存”嫁接“内存计算” ——高速安全的大数据时代来临 题记 数据库奠基人Jim Gray:“磁带已经死了,磁盘已经落伍,闪存成为存储,内存才是王道”.“不管磁盘是否消融,闪存都是将来的一个趋势.” 石油一直直接影响着世累经济的发展速度和发展水平,现在,信息将发挥同样的作用.<经济学人>表示:“数据和信息日益成为商业的新能源,是一种与资本.劳动力并列的新经济元素”. 数据保护 大数据时代的机遇和挑战 大数据“风华正茂” 大数据时代,每两天的数据量就达到2ZB,相当于20世纪前人类文明所

这些组件分别处理Spark Core提供内存计算框架

Spark不仅支持Scala编写应用程序,而且支持Java和Python等语言进行编写,特别是Scala是一种高效.可拓展的语言,能够用简洁的代码处理较为复杂的处理工作. l通用性强 Spark生态圈即BDAS(伯克利数据分析栈)包含了Spark Core.Spark SQL.Spark Streaming.MLLib和GraphX等组件,这些组件分别处理Spark Core提供内存计算框架.SparkStreaming的实时处理应用.Spark SQL的即席查询.MLlib或MLbase的机器

弹性分布式数据集:一个支持容错的集群内存计算的抽象

注:本文章是翻译自:Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing 概要     我们提出了弹性分布式数据集(Resilient Distributed Datasets,简称RDDs)的概念,这是一个分布式内存的抽象,允许编程在大规模集群 上编写出以内存计算为基础的程序,并且该模型支持容错.RDD概念的提出主要启发于这样一种现象:有两种类型的应用程序,使用现

NOIP真题做题经历——MLE之内存计算

noip中,试题会有程序运行内存上限(MLE),这个内存上限指的是什么,怎样才能知道自己程序的运行内存? 下面就让我这个今天上午刚刚MLE的鸡来分析一下. 内存上限就是指程序运行时消耗的内存.如果你声明的是静态的(数组.普通变量等),那内存计算就是单位数*每个单位所用的字节数之和.(动态的东西,我们这里不做研究) #define ll long long ll a[400000] ; 定义 我们定义了一个ll类型的a数组.一个ll占8个字节,那么这个数组就占了400000 * 8 = 32000

MYSQL使用内存计算

MySQL内存占用计算: global buffer+all thread buffer global buffer= innodb_buffer_pool_size 缓存表数据和索引数据,加速查询,并且使查询结果集保存在内以供重用,一般设置到主机内存的70%以下 +innodb_additional_mem_pool_size 存放数据字典信息以及一些内部数据结构,如果数据库的对象过多的话,该值可能需要调整,一般不做调整 +innodb_log_buffer_size 事务日志所使用的缓冲区,

JVM内存计算问题

-Xmx10240m:代表最大堆 -Xms10240m:代表最小堆 -Xmn5120m:代表新生代 -XXSurvivorRatio=3:代表Eden:Survivor = 3    根据Generation-Collection算法(目前大部分JVM采用的算法),一般根据对象的生存周期将堆内存分为若干不同的区域,一般情况将新生代分为Eden ,两块Survivor:    计算Survivor大小, Eden:Survivor = 3,总大小为5120,3x+x+x=5120  x=1024