【天极网服务器频道6月16日消息】随着处理器运算能力的提升,降低CPU与数据之间的延迟变得更加迫切,这使得本地闪存以及PCIe解决方案变得越来越流行。但是如果这种方式对性能的提升还不能满足企业的需求时,我们可以将数据直接存到系统内存当中。这就是内存数据库背后的理论,它们将数据放到内存当中来实现性能提升的最大化。
内存数据库会将运转中的数据存放到系统内存当中,根据每张表的特定用例来判断其是否需要DRAM来加速。还有一些解决方案会将全部数据放到内存里,比如SAP HANA。
即使在缓存利用率极高的系统当中,内存数据库解决方案也能够降低延迟,带来明显的性能提升。但内存数据库要更微妙一些,因为与基于硬盘的传统数据库相比,它们对数据管理的方式也进行了优化。比如我们不再需要维护额外的数据缓存副本并管理其之间的同步操作了。另外,数据还可以在内存中快速地压缩、解压缩,也就是说它将占据更少的硬盘空间。
系统内存不是持久性存储,这意味着内存数据库只能满足ACID(原子性、一致性、隔离性、持久性)原则中的前三条。针对这种情况,内存数据库是无法直接满足持久性的,因为当系统突然断电的时候,内存中的数据就会丢失。
尽管内存数据库中的所有操作都是在系统内从中进行的,但它仍然需要一个持久性的存储介质。
内存数据库的存储需求主要体现在两个方面:其中持久性介质用来存储提交的交易,如果一个数据库需要重新加载到内存,那么它就是用来维护持久性并进行数据库恢复;持久性存储用来保存数据库完整的副本或备份。
当处理提交之后,磁盘IO就将成为最大的性能瓶颈,而将IO开销控制到最低是非常关键的。也就是说,最好的存储媒介是使用闪存。让闪存尽量靠近处理器以便降低延迟,而PCIe SDD或最新的NVDIMM内存通道存储设备也可以将延迟尽可能控制到最低。
要解决持久性问题,内存数据库也有相应的解决方案。这其中包括在集群里保存额外的数据副本,然后对数据库进行横向扩展,让系统能够在运行中不断将更新数据复制到一个或多个备用系统当中。一些数据库系统还会定期将数据复制到磁盘系统,就是为了应对上述突然断电或系统宕机的情况。当然这时候就要在额外的负载和数据可恢复性方面做出权衡。
由于内存数据库的风险比传统OLTP数据库要大,所以要对它所支撑的应用系统有一个更清楚的认识。目前从整体来看,传统的OLTP应用系统往往会避免使用内存数据库技术,它更多地应用在特定的数据类型或者分析应用(包括批处理报表系统)当中,这些系统的数据远没有OLTP系统重要。另一方面也是出于成本预算的考虑,DRAM相比于传统磁盘甚至闪存来说都是更昂贵的。
随着技术的不断普及,内存数据库迟早会打入企业OLTP应用,我们已经看到有一些企业已经将全部应用放到SAP HANA平台上。此外,微软刚刚发布的SQL Server 2014也将提供内存OLTP能力,它针对内存对数据库表进行优化,可以让数据库的一部分数据存放到系统内存当中。而数据库巨头Oracle也在去年发布了Oracle 12c内存数据库选件,能够在不更改应用代码的情况下将表切换为内存数据库模式。