前言
当应用程序需要极高的性能时,企业经常会使用内存数据库或键值存储(缓存层)来满足这一需求。然而,内存数据库的总体拥有成本高企,并且在可扩展性方面具有硬限制,如果超出内存限制,则会出现可靠性问题和重启延迟。内存键值存储也有这些局限性,并且有架构复杂和网络延迟等方面的不足。
本文解释了针对高性能SQL和NoSQL应用程序,InterSystems IRIS数据平台优于内存数据库和键值存储的原因所在。
实现性能和效率的升级
在处理并发的数据摄取和分析处理方面,InterSystems IRIS平台是唯一能匹敌甚至超过内存数据库和缓存层性能的持久数据库。该平台可以在商用硬件中以低于一毫秒的速度处理传入的事务、将数据存入磁盘,并产生索引以供分析,而且不会造成任何网络延迟。
InterSystems IRIS平台卓越的数据摄取性能在一定程度上得益于其多维数据引擎,该引擎可以将数据高效地压缩存储在一个富数据结构中。通过使用高效的多维数据模型和稀疏存储技术(而非二维表), 能够以非常高的性能访问和更新随机数据,同时减少所占用的资源和磁盘容量。除传统的TCP/IP访问API外,该平台还提供内存、进程内API,以优化数据摄取性能。
InterSystems的独特技术“企业缓存协议(ECP)”能进一步优化性能和效率。ECP可以跨多服务器环境协调数据流,涵盖从数据摄取到使用的全流程。它还支持通过SQL、C++/C#、Java、Python、Node.js等常用语言全面访问场景中的所有数据,而无需在整个网络中复制或传播数据。
ECP使分布式系统中的服务器既可作为应用程序服务器,又可作为数据服务器。ECP还可根据工作负载类型(即事务处理或分析查询)独立扩展各类数据和计算资源,并且可以动态访问远程数据库,就像访问本地数据库一样。数据的主要所有权只需由系统的一小部分服务器持有。如果分析需求增加,可以立即添加更多应用程序服务器。同样地,如果磁盘吞吐量达到瓶颈,则可以添加更多数据服务器。数据被重新分区,但应用程序的逻辑视图保持不变。
分布式系统中的每个节点都可以对驻留在自身磁盘系统的数据或其他数据服务器传递过来的数据进行操作。当客户端发出数据请求时,应用程序服务器将尝试从其本地缓存中满足该请求。如果所请求的数据并非本地数据,应用程序服务器将向远程数据服务器发送请求,然后该数据将缓存到本地应用程序服务器中,并提供给该服务器上运行的所有应用程序。ECP自动管理整个网络中缓存的一致性和相关性。
因此,InterSystems IRIS平台能够在不复制数据的前提下,对大型数据集执行复杂的分析查询。其中包括以极高的性能执行连接 (join)操作(这些连接可以访问分布在不同节点或分片的数据), 而无需传播数据。
ECP的使用透明,无需更改应用程序,也不需要专门的技术。各应用程序只需将整个数据库视为本地数据库即可。
在使用某全球领先投行数据和查询进行的对比测试中,InterSystems IRIS的性能始终优于另一个领先的商用内存数据库,InterSystems IRIS 所分析的数据量是后者的10倍(320 GB vs. 33 GB),而所使用的硬件更少(4台虚拟机、8核、96 GB RAM vs. 8台虚拟机、16核、256 GB RAM)。
InterSystems IRIS平台整体响应时间更短
图1:IRIS查询的数据量是某个领先的内存数据库管理系统 (DBMS)的10倍
注:图中缺少数据点的地方表示未能返回结果。
通过永久性数据存储提高可靠性
InterSystems IRIS平台内嵌永久性数据存储,并且总是保持最新。该平台在磁盘上以优化格式自动维护当前所有数据的表现形式,以便快速随机存取数据。
相比之下,内存数据库无法永久性存储数据。因此,所有数据必须存入可用内存,并且需要有足够的可用内存来摄取新数据和处理分析工作负载。可用内存会因数据量和/或查询量的意外增加而被耗尽。查询操作(尤其是大型分析查询)在执行期间会消耗内存,并生成结果。当可用内存耗尽时, 进程就会停止。
对关键任务的应用程序(例如金融服务公司的交易应用程序)而言,交易的遗漏或延迟以及服务中断都会带来灾难性后果。如果使用的是内存数据库,内存中的内容会定期写入checkpoint文件,随后的数据则被存储在预写式日志(WAL)文件中。中断后重新构建进程内状态时需要摄取和处理checkpoint文件和WAL文件,这一过程可能需要花费数个小时,之后数据库才能重新联机。
借助InterSystems IRIS,可以即刻完成恢复工作。得益于其持久性数据库,当服务器关闭或死机时数据并不会丢失。应用程序只需从另一台服务器或磁盘访问数据并继续处理即可,无需进行任何数据库恢复或数据库状态重新构建工作。
通过智能缓冲提升可扩展性
不同于内存数据库,InterSystems IRIS在可扩展性方面不存在硬限制, 其不受可用内存总量的限制。它利用智能缓冲管理将最常用的数据保存在内存中,同时按照需要从磁盘中快速访问使用频率较低的数据,并通过清除极少被访问的数据来释放内存。相比之下,内存数据库必须在工作内存中保存所有数据,包括可能再也不会被访问的数据。
使用InterSystems IRIS平台时,如果单机系统上的一条数据不在缓存中,只需从磁盘中检索即可。在分布式场景中,如果数据不在本地缓存中,基于InterSystems IRIS的应用程序将自动尝试从其所属的数据节点的缓冲中检索该数据。如果该数据不在该数据节点的缓冲中,应用程序将从磁盘中检索。如果可用内存完全耗尽,智能缓冲将清除近期最少使用的数据,从而为新数据或处理任务腾出内存空间。
由于没有内存限制,基于InterSystems IRIS的系统可以应对摄取速率和分析工作负载的意外激增,也可以扩展以处理PB级数据。这是内存数据库无法做到的。
降低总体拥有成本
由于内存的价格高于磁盘,因此与内存技术相比,操作基于InterSystems IRIS的应用程序能够降低硬件成本和总体拥有成本。许多内存系统会将数据的冗余副本保存在不同的计算机上,以防止计算机死机,这进一步增加了成本。
内存中的键值存储
有些组织机构通过操作内存键值存储(在存储引擎和应用程序服务器之间的独立缓存层)来处理高性能的应用程序。然而,这种方法的吸引力正在快速消失,原因如下:
架构复杂。应用程序必须管理多个层上的数据冗余表现形式,以及缓存和数据库的集成与同步。例如,应用程序代码可能首先执行查找,以确定所请求的数据是否在缓存层。如果不在,应用程序将执行SQL查询,以访问数据库中的数据,执行应用程序逻辑,将结果写入缓存层,并将其同步至数据库(见图2)。
图2:InterSystems IRIS与独立内存缓存层、应用程序服务器及数据存储的比较
CPU成本增加。缓存层(处理字符串和列表)与应用程序代码之间存在固有的不匹配问题。因此,应用程序必须不断在缓存层和应用程序层的架构之间转换数据,此举增加了CPU成本、开发人员的工作量以及复杂性。
延迟。由于应用程序服务器和缓存层之间的请求是通过网络发出的,因此该方法增加了网络流量,并给应用程序带来了额外延迟。
事实上,近期的一份研究报告显示,谷歌和斯坦福大学的工程师们认为:“ (远程内存键值存储的)时代已经过去:它们的域独立 API(例如:PUT/GET )会让应用程序再次变得复杂,导致了额外的整理封装费用和网络跃点。”
与远程缓存层相比,InterSystems IRIS可提供卓越的性能和效率, 同时降低架构和应用程序的复杂性。
总结
使用内存数据库和缓存层的主要原因是其性能强大。然而,尽管速度很快,但它们都存在局限性,包括在可扩展性方面的硬限制、内存超出限制时的可靠性问题和重启延迟、增加构架和应用的复杂性,以及总体拥有成本高企等。
InterSystems IRIS平台是唯一在性能方面能匹敌甚至超过内存数据库和缓存层的持久数据库,并且不存在它们的局限性。所有这些因素使得InterSystems IRIS成为关键任务高性能应用程序的绝佳替代方案。
领取专属 10元无门槛券
私享最新 技术干货