首先最基础的,微软官方给出的内存数据库定义是非常准确的:在内存数据库系统中,包括数据库引擎和尽可能多的数据都将直接存储在RAM中。当然,这对于提高交易处理速度是非常有帮助的,但需要有两个前提:1、数据库和引擎都要尽可能的小;2、系统中的RAM要尽可能的大。以便数据库、引擎与RAM相互适应。
随着内存硬件的成本在不断下降,越来越多的服务器都不断增加内存配置,因此上述的两个条件中,后者在实现起来显然要比前者更加容易。而对于SQL Server来说则更是如此。
除了内存设备的成本降低之外,CPU的处理速度以及并行化也在不断加深。因此,目前主流的数据库产品都在这些方面上做文章,为了提升CPU的利用率,它们会尽可能地将数据库操作更加向CPU靠拢。
在此之前,SAP、Oracle都在做此类尝试,并取得了不错的反馈。所以SQL Server也在积极地对这一技术进行深入研发。在微软TechNet博客上面的一篇文章中,作者David Campbell探讨了内存数据库技术的发展趋势,并指出数据存储模式将由传统的行式逐渐转化为列式存储。
事实上,微软在Excel的PowerPivot插件上就已经使用到了列式存储技术。Campbell介绍说:“在SQL Server 2012中,我们还添加了xVelocity内存分析引擎,它是作为SQL Server分析服务(SSAS)的一部分来交付给用户。”从长远角度来看,xVelocity组件将逐渐独立出来,也许在下一版本的SQL Server内存数据库中,我们就能看到它成为一个高度垂直化的解决方案,专门应对数据仓库或者数据分析等工作负载。
这也就引出我之前所提到的一个问题:要想真正利用好内存处理技术,我们之前的SQL Server安装是否需要进行升级或者改造?这很有可能,但是也是要视情况而定,以下是在使用内存数据库时我们所需要注意的三个问题:
1、内存数据库解决方案需要我们对现有数据库进行部分改造
基于列式存储的内存数据库在进行设置的时候依然需要进行一定的变更。在微软发布的一个案例中分享了SQL Server 2012中现有的一些内存功能,其中就提到当需要进行数据库变更的时候,更改元数据值就可以了。所以根据你的设置,可能所需的工作会很少,但并不代表没有。
2、数据库越大,性能提升越多,但费用也越高
那些面向分析和数据仓库的工作负载是最适合内存数据库的(假设所有处理都在内存中进行),你将能看到最大限度的性能提升。列式结构的内存数据库并不是针对交易型负载进行的优化,也就是传统的CRUD(create, read, update, delete)操作。也许未来内存技术将逐渐扩展到交易系统领域,但这不是一朝一夕的事。
3、因此,我们并不需要把所有东西都转移到内存数据库上
我们可以先从那些处理器密集型的工作负载入手,如数据分析。数据分析系统在内存数据库的清单中应该出在最高的优先级之上。即使你还没有特别计划要迁移到其他版本的SQL Server,记住这一点也会帮助你更好地在未来完成SQL Server系统的迁移。