数据库 频道

介绍一个MongoDB的替代方案

前阵子有朋友在公众号上留言说他们在搞安全可控替代方案,不过对于MongoDB,目前找不到替代的国产化或者开源产品,问我能不能给他介绍一个。我问他为什么要替换MongoDB,他说因为MongoDB更改了开源协议后,他们的一些商用项目怕受影响,因此需要找到替代方案。正是因为SSPL授权协议的问题,有不少用户都有了替换MongoDB的想法。

实际上对于MongoDB的替代,我们也是很头疼的,虽然PostgreSQL、Oceanbase等数据库中也能够支持一些简单的文档数据存储与访问,不过功能上差得太远。特别是对于一些MongoDB功能上用得很深的应用,想要找到一个可以较为平稳替代的数据库产品,目前来看,除了目前正在被替换的Oracle 23C之外,恐怕也找不到太好的。

MongoDB从最初的简单的文档数据库发展到目前,已经迭代了数个大版本,功能上也已经在向通用数据库的道路上走了很远了。目前的MongoDB已经是一个功能十分强大的多模数据库了。MongoDB目前集文档数据库、空间数据库、时序数据库、向量数据库、搜索引擎于一身,同时支持简单的事务,甚至可以用一个数据库独立搞定 一个业务系统。如果应用使用MongoDB很深,确实是很难替换的。

不过对于大多数用户来说,MongoDB仅仅作为简单的文档数据库使用的,保存一些文档、日志、配置数据等。如果这样的话,还是可以找到一些解决方案的。开源项目FerretDB/FerretDB就是这样一个解决方案。如果你的应用仅仅是把MongoDB当成一个文档数据库来使用,应用也比较简单,那么FerretDB可能会成为你替换MongoDB的一个比较好的选择。

FerretDB被其创建者描述为“真正的开源MongoDB替代品,能够运行文档数据库工作负载的所有基本功能”。FerretDB的开源协议是Apache 2.0,可以在github上下载,自从2021年开源依赖,目前已经迭代了40多个版本。FerretDB是一个开源代理,它将MongoDB 6.0+线协议查询转换为SQL,并可以在后端使用PostgreSQL/SQL LITE等后端存储作为数据库引擎。SAP HANA的支持目前是ALPHA状态,按照FerretDB的迭代速度,应该在几个月内发布正式支持。

FerretDB与MongoDB驱动程序和工具兼容,因此很多使用MongoDB的应用程序不需要做修改就能够用FerretDB+PostgreSQL的方式直接替代了

目前FerretDB的官网提供了Docker 镜像、RPM 和 DEB 包的下载。并且今后将会提供Windows环境、macOS的安装包。目前官网可下载的版本是1.19.0,而在Git上可以下载到最新的1.10的源码。

ferretdb支持一些简单的mongodb的特性:支持嵌入式数据模型;支持索引,可以加快查询速度,并且可以包含嵌入文档和数组中的键;支持读写操作(CRUD)以及聚合、地理空间、文本搜索等查询;支持JSON数据模型和动态模式(以BSON二进制模式存储);支持多种编程语言的驱动程序和工具。

不过FerretDB仅仅是一个MongoDB的文档数据库功能的替代方案,还存在很多局限性,如果你的应用使用到了MongoDB的一些高级特性,那么就不能jiandan的替代了。比如:不支持MongoDB的事务特性,也就是可以在多个文档或者集合上执行原子性的操作;不支持MongoDB的更改流特性(监听集合或者数据库上的数据变化事件);不支持MongoDB的地理空间索引和查询特性(在地理坐标或者形状上进行索引和查询);不支持MongoDB的全文搜索特性(在文档中的文本字段上进行基于词语或者短语的搜索);不支持MongoDB的图形处理特性(在文档之间建立关系并进行图形遍历和分析)。

FerretDB可以算是一个PG数据库的MongoDB代理,是PG数据库生态的一个十分有益的补充,这些年因为开源协议的友好性,PG生态的发展十分迅速。对于PG生态的数据库厂商,那么将这个开源项目整合到自己的国产数据库中,是对产品十分好的补充。

0
相关文章