作者:彭志刚 何仲君
内存数据库又称主存数据库(IMDB/MMDB,In-Memory / Main Memory
database),是一种主要依靠内存来存储数据的数据库管理系统。相较于基于磁盘存储的传统数据库,内存数据库的数据读写速度可以高出几个数量级,极大地提高应用的性能,更能满足用户规模不断攀升等背景下的高并发、低延时需求,市场关注度与日俱增。分析机构Verified
Market Research在2020年发布的市场研究报告显示,全球内存数据库市场将以19.65%的复合年增长率增长。
内存数据库VS共享内存?
内存数据库并不是一种新生事物,从1976年第一个雏形诞生,到90年代商业化内存数据库开始涌现,再到目前开源内存数据库成为主力军,已经经历了近半个世纪的发展。早期由于内存价格昂贵等原因,内存数据库发展较慢,随着内存技术逐渐成熟,内存器件的单位价格快速下降,同时容量密度快速上升,内存数据库的发展越来越快,在很大程度上会替代原有的关系型数据库的一些功能,内存数据库和传统数据库混合使用正在成为趋势 。
在数据库技术中,共享内存 (Shared Memory)是一种比较常见的技术,指在多处理器的计算机系统中,可以被不同CPU访问的大容量内存,是一种多进程之间的通信方法,由于多个CPU需要快速访问存储器,需要对存储器进行缓存,目的在于最小化磁盘访问。有人可能会问,如果将所有的数据都加载到共享内存中,是否就与内存数据库一样?其实不然。
一方面,数据加载在共享内存中,访问数据过程中的地址映射和转换依然存在,这是非常消耗CPU资源的,只是省掉了将数据块从磁盘加载到内存的开销;另一方面,共享内存中的数据要落回磁盘持久化,因此会将锁和数据分开存放和管理。而内存数据库技术几乎把整个数据库放进了内存中,相较于传统的磁盘读写机制,性能有数量级的提升,配合上用户态协议栈、内存大页等技术,可以比较容易地实现单机几十万QPS(每秒查询率) ,同时锁和数据也可以放在一起,使得缓存更友好、访问更快 。
由于内存数据库的所有数据都在内存里,一旦遇到掉电就会遇到比较大的挑战,不过非易失内存 (NVM,Non-Volatile Memory)的出现,可以在很大程度上缓解内存数据遗失的问题,为内存数据库的发展带来更多机遇。
内存数据库在低延时场景的机遇与挑战
金融领域有诸多高性能、低延时场景,内存数据库技术的高性能读写优势无疑为交易、合规、风控、清算等场景带来了更大的“极速”空间,但同时也存在一些挑战。例如在证券交易方面,量化、做市等场景对性能的要求非常高,需要实现低延时、高并发、强一致性、高可用,但这几方面的业务要求可能会互相矛盾,有的实时计算数据量非常大,计算模型非常复杂,在具体实施时需要实现相对的平衡。
面对金融领域的低延时需求,市场中主流的内存数据库存在一些挑战。主流内存数据库是针对通用的场景设计的,主要包括键值对内存数据库、关系型内存数据库等类型,一般不会有很个性化的优化设计,一个完整的业务流程需要多次访问数据库,由此带来的延迟是极速系统所不能接受的,接口封装也会带来一定的开销,即使部署到同一台服务器,也只能减少部分网络耗时,因此并不适合对延时要求极低的场景,如要求10微秒以内完成一笔交易(极速系统的首要追求就是尽可能低的单笔延时)。基于以上考虑,恒生进行了内存数据库的自主研发。
追求极速体验,恒生自研内存数据库
恒生自主研发的内存数据库不是典型的关系型内存数据库,但也有一定的数据之间的关联关系,能够预处理,因此恒生将其定义为对象型弱关系内存数据库,专注于极速交易等低延时场景,能够根据业务进行针对性的设计和优化 ,以达到极致的性能,支持高并发、强一致性事务以及复杂的数据模型,同时可满足金融关键应用系统的高可用要求。
从研发基于内存的期货极速交易系统,到自研内存数据库,再到完善开发工具的适配、不断进行版本迭代,恒生自研的内存数据库已经耕耘了十余年,至今已有数十个产品/项目基于此开发和上线使用。在自研的内存数据库的支持下,恒生高性能家族通过极速、稳定、高可用的产品体验,正在助力行业整体在低延时场景加速。
未来,恒生自研的内存数据库将持续进行技术提升,深度整合软硬件,不断提高性能,在持久化、容器化、数据组织、索引设计、开发工具与配套工具等方面不断完善,对相关金融业务场景进行更好的支持。
更多金融科技文章请见恒生LIGHT开发者社区