ITPub博客

首页 > 数据库 > 数据库开发技术 > 内存数据库

内存数据库

数据库开发技术 作者:germany006 时间:2014-06-16 15:59:14 0 删除 编辑
转载地址:http://zh.wikipedia.org/wiki/%E5%86%85%E5%AD%98%E6%95%B0%E6%8D%AE%E5%BA%93

维基百科:
内存数据库是指一种将全部内容存放在内存中,而非传统数据库那样存放在外部存储器中的数据库。内存数据库指的是所有的数据访问控制都在内存中进行,这是与磁盘数据库相对而言的,磁盘数据库虽然也有一定的缓存机制,但都不能避免从外设到内存的交换,而这种交换过程对性能的损耗是致命的。由于内存的读写速度极快(双通道DDR3-1333可以达到9300 MB/s,一般磁盘约150 MB/s),随机访问时间更是可以纳秒计(一般磁盘约10 ms,双通道DDR3-1333可以达到0.05 ms),所以这种数据库的读写性能很高,主要用在对性能要求极高的环境中,但是在服务器关闭后会立刻丢失全部储存的数据。常见的例子有MySQL的MEMORY存储引擎、eXtremeDB、FastDB、SQLite、Microsoft SQL Server Compact等。


转载地址:http://baike.baidu.com/view/1210875.htm

百度百科:

内存数据库,顾名思义就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。

1简介编辑

同时,内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。内存数据库的最大特点是其“主拷贝”或“工作版本”常驻内存,即活动事务只与实时内存数据库的内存拷贝打交道。
定义:设有数据库系统DBS,DB为DBS中的数据库,DBM(t)为在时刻t,DB在内存的数据集,DBM(t)属于DB。TS为DBS中所有可能的事务构成的集合。AT(t)为在时刻t处于活动状态的事务集,AT(t)属于TS。Dt(T)为事务T在时刻t所操作的数据集,
Dt(T)属于DB。若在任意时刻t,均有:
任意T属于AT(t) Dt(T)属于DBM(t)
成立,则称DBS为一个内存数据库系统,简称为MMDBS;DB为一个内存数据库,简称为MMDB。
常见的例子有MySQL的MEMORY存储引擎、eXtremeDB、TT、FastDB、SQLite、Microsoft SQL Server Compact等

2数据加载编辑

电信的二次批价和实时累账是计费系统中的两个必备功能。所谓二次批价是相对于一次批价来说的。一次批价是按照国家标准资费来进行价格计算,比如: 全球通每分钟本地通话为0.4元,在一次批价完成后,会根据这个用户的套餐进行再一次的计算。以北京全球通用户接听4分钟的电话为例,一次批价完成后,这条话单的价格是1.6元,如果这个用户参加了10元包月接听套餐,那么在二次批价后,这次通话的费用就为0元。一次批价是用于各大运营商之间结算的,而二次批价是针对用户个人的。
实时累账是将用户从每月1号到目前为止的所有费用累加起来,也就是用户目前可以通过10086查到截止到前一天的实时话费。累账值可以帮助用户控制高额话费或是供用户即时查询消费信息。
二次批价和实时累账过程涉及用户资料、用户套餐等与用户相关的信息,电信支撑系统在开始批价时必须加载这些数据。稍大一点的省级运营商的这些数据就会超过1000万条,计费处理模型也由于套餐的组合、产品的组合以及不同的优惠规则变得相当复杂,加载这部分数据对系统而言是一笔不小的开销,这就使得现在的计费处理速度比较慢,而且很难做到对数据的实时更新。内存数据库的引入在一定程度上解决了这个问题。
在计费二次批价过程中数据量最大的是详单数据,这部分数据不用放在内存数据库中,每处理完一个话单文件或达到设定的提交记录数时直接操作磁盘数据库,不会影响系统性能。最急切的是将用户资料、套餐、营业套餐和计费套餐对应关系数据、计费套餐模型数据及用户累计数据放到内存数据库中,这部分数据查询操作远比数据新增和更新操作要频繁。除了这些数据外,当然还有应用需要的其他数据也都可以加载到内存数据库。
在采用内存数据库后,用户通过营业部或客户查询实时话费的时候完全可以做到实时,比目前只能提供查询到前一天的实时话费在业务上有了质的飞跃。因为系统在处理这部分数据时查询流程和以前的完全一样,但系统省去了以往内存中的数据和磁盘数据库数据同步的环节,所以就能做到了实时查询。对于信控来说也同样,以往系统在累完账后要按照一定周期刷新信控数据,这就存在一个时间差,不能够完全做到实时。
而采用内存数据库后,信控可以直接取得内存数据库中的实时话费累计表中的数据,完全实现实时预警、停机。二次批价和累账中采用内存数据库后,对防欺诈、收入保障系统也有相当大的好处,这样能够充分保证运营商的切身利益。
另外,在采用内存数据库后,整体提高了系统批价、累账的处理速度,大大缓解访问磁盘数据库的压力,提高数据查询、修改、删除的效率,也为后付费和预付费的融合提供了可能。

3数据同步编辑

电信营业数据和计费系统中的数据总是在不断的变化中,这就涉及内存数据库中的数据和磁盘数据库数据的同步问题(为了描述清楚,这里的磁盘数据库以Oracle DB为例来说明)。数据同步包括两部分: 从内存数据库到Oracle DB数据同步和从Oracle DB到内存数据库的同步。
Oracle DB到内存数据库同步
这部分数据同步采用增量表的方式,营业系统或CRM新增或更新的数据将生成到Oracle的增量表中,计费后台程序先到这些增量表中查询数据。如果能在这些增量表中查到数据就把这些数据更新到内存数据库对应表中,如果查不到,就直接从内存数据库中直接查询,从而保证了数据的完整性和实时性。由于增量表的数据量一般会很小,所以这部分操作不会影响系统的性能。
内存数据库到Oracle DB同步
由于Oracle的计费后台批价、累账数据几乎都加载到了内存数据库中,所以Oracle数据库对应的数据表将主要用于对内存数据库的数据备份。
用户最新的实时话费等信息都保存在内存数据库中,实时话费查询将直接连接到内存数据库中查询,保证用户得到最新的费用信息。信控也直接从内存数据库查询数据,因此对Oracle中的这部分数据已经没有实时性的要求。这时内存数据库到Oracle的同步可以由应用程序生成文件,定时地往Oracle数据库中同步备份,或者采用Oracle存储过程在系统相对空闲时间段进行数据导入就可以了。
内存数据库与传统数据库的异同
传统的数据库系统是关系型数据库,开发这种数据库的目的,是处理永久、稳定的数据。关系数据库强调维护数据的完整性、一致性,但很难顾及有关数据及其处理的定时限制,不能满足工业生产管理实时应用的需要,因为实时事务要求系统能较准确地预报事务的运行时间。
对磁盘数据库而言,由于磁盘存取、内外存的数据传递、缓冲区管理、排队等待及锁的延迟等使得事务实际平均执行时间与估算的最坏情况执行时间相差很大,如果将整个数据库或其主要的“工作”部分放入内存,使每个事务在执行过程中没有I/O,则为系统较准确估算和安排事务的运行时间,使之具有较好的动态可预报性提供了有力的支持,同时也为实现事务的定时限制打下了基础。这就是内存数据库出现的主要原因。
内存数据库所处理的数据通常是“短暂”的,即有一定的有效时间,过时则有新的数据产生,而当前的决策推导变成无效。所以,实际应用中采用内存数据库来处理实时性强的业务逻辑处理数据。而传统数据库旨在处理永久、稳定的数据,其性能目标是高的系统吞吐量和低的代价,处理数据的实时性就要考虑的相对少一些。实际应用中利用传统数据库这一特性存放相对实时性要求不高的数据。
在实际应用中这两种数据库常常结合使用,而不是以内存数据库替代传统数据库。
而内存数据库也分全内存计算和热内存计算。全内存计算,即数据需要全部装载到内存中进行计算,对硬件要求高,譬如QlikView等产品。热内存计算,部分数据加载到内存中即可以进行计算,硬盘和内存会有数据交换来计算未加载的数据,譬如Yonghong Z-Suite。

4技术特点编辑


  (1)采用复杂的数据模型表示数据结构,数据冗余小,易扩充,实现了数据共享。
  (2)具有较高的数据和程序独立性,数据库的独立性有物理独立性和逻辑独立性。
  (3)内存数据库为用户提供了方便的用户接口。
  (4)内存数据库提供4个方面的数据控制功能,分别是并发控制、恢复、完整性和安全性。数据库中各个应用程序所使用的数据由数据库统一规定,按照一定的数据模型组织和建立,由系统统一管理和集中控制。
  (5)增加了系统的灵活性。[1] 
参考资料
转载地址:http://www.infoq.com/cn/news/2012/06/memsql

MemSQL,号称世界上最快的内存数据库

MemSQL是一款内存数据库,它通过将数据存在内存中,将SQL语句预编译为C++而获得极速执行效率。

从MemSQL官方网站了解到,MemSQL具有以下几大特色:

  • 无可比拟的效率
    MemSQL的执行效率是传统的基于磁盘的数据库的30倍,同时它优于其他内存数据库的数据,因为它将SQL转换成C++。
  • 强大的SQL执行能力
    支持全功能的关系型数据库,开发者不必修改现有程序即可获得NoSQL键值存储系统的效率。
  • 水平和垂直扩展
    MemSQL支持垂直扩展,CPU越好效率就越高;支持向多CPU扩展;此外,MemSQL还可与MySQL节点结合起来处理百万兆级的负载。
  • 缺省支持数据持久性
    MemSQL缺省支持数据从内存到磁盘/SSD的同步,保证数据的安全可靠。
  • 简易安装
    只需30秒即可完成安装并使用MemSQL,兼容MySQL,学习曲线平滑。

因为其快速,所以MemSQL非常适用于哪些视时间为金钱的行业,如资本市场、广告服务、云计算与移动应用等。

感兴趣的读者可从开源中国社区学习MemSQL 的安装和简单使用、将数据库从 MySQL 移植到 MemSQL和MemSQL 的配置文件解析等。

MemSQL在微博上引起了众多技术人士的围观。@Fenng说:

MemSQL是一种伪技术,老瓶子装新酒,并不是革命性的东西。很多人觉得需要更快的DB,实际上,他们需要的是写更有效率SQL语句的人。

这条微博引起了关于“更快的DB vs 能写更有效率的SQL的人?”的讨论。@林枫-孙靖楠说:

……更多人需要的是写出高效率的SQL,而不是寄托在某种技术上。

也有持不同意见者,如@淘宝褚霸就认为:

效率差1个数量级是很难通过写SQL来提升的,除非之前的SQL不是专业人士写的。
写好SQL会有很大的提升,但是写对了以后想继续提高就非常难,毕竟天花板是在数据库的实现上。

双方的观点都不无道理,只是出发点不同罢了。我们既需要能写出更有效率的SQL语句的人,也需要更效率更高的数据库系统。当语句写到最优却仍然不能解决满足需求时,就需要新技术的产生。二者有机结合起来才能推动技术的进步。且不论MemSQL是否伪技术,但它至少是技术前进道路上的一小步。正是由于这许许多多的小步,才推动着技术不断革新的大步。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28371090/viewspace-1183973/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
ORACLE,MYSQL,POSTGRESQL,SQLSERVER,MONGODB,TIDB,DB2,REDIS,本博客只为记录自己学习总结,不代表完全准确。

注册时间:2013-03-06

  • 博文量
    776
  • 访问量
    1038305