MongoDB协议兼容

MongoDB 是一款开源的非关系型数据库,也是目前最流行的非关系型数据库之一。

SequoiaDB 巨杉数据库兼容 MongoDB 的语法和协议,用户可以使用 MongoDB 的驱动访问 SequoiaDB 数据库,完成对数据的增删查改操作以及其他操作。

SequoiaDB 所支持的 MongoDB 版本

  • MongoDB 2.x

  • MongoDB 3.x

  • MongoDB 4.x

配置

下述示例以 SequoiaDB 安装目录为 /opt/sequoiadb,协调节点端口号为 11810 进行说明。

  1. 配置连接器 fap

    修改协调节点配置文件

    1. $ cd /opt/sequoiadb
    2. $ vi conf/local/11810/sdb.conf

    添加如下配置:

    1. fap=fapmongo3

    Note:

    如需兼容 mongodb 2.x 版本,应添加配置“fap=fapmongo2”;如需兼容 mongodb 3.x 版本或者 mongodb 4.x 版本,应添加配置“fap=fapmongo3”

  2. 重启协调节点

    1. $ ./bin/sdbstop -p 11810
    2. $ ./bin/sdbstart -p 11810
  3. 查看 fap 端口

    连接器 fap 的端口号为协调节点端口号 +7

    1. $ netstat -anp | grep 11817
    2. tcp 0 0 0.0.0.0:11817 0.0.0.0:* LISTEN 20462/sequoiadb(118

配置完成后,用户可使用 mongodb 驱动连接到 11817 端口执行命令。

兼容命令

命令fapmongo2 是否支持fapmongo3 是否支持
create collection
drop collection
list collections
drop database
list databases
insert
remove
update
find
count
aggregate
distinct
create index
drop index
list indexes
create user
drop user
list user
auth
logout

Note:

  • 用户在查询时不建议使用 batchSize,如 db.cl.find().batchSize( 100 )。尤其在 mongo-java-v3.1 及以下、mongo-shell-v3.0 及以下和 mongo-nodejs-v2.2.11 及以下版本中,batchSize 可能被当做 limit,导致查询结果非预期。

  • fapmongo2 支持 MONGODB-CR 鉴权算法,fapmongo3 支持 SCRAM-SHA-1 鉴权算法。

  • createUser 命令在 mongodb-3.x 对应的驱动上无法使用,需要改用 runCommand 命令,如:db.runCommand( { createUser: "myuser", pwd: "mypwd" } )

  • Java 驱动推荐使用 mongo-java-v3.0 及以上版本,否则聚集语句的查询结果可能不准确。

  • 删除用户操作只能删除当前会话鉴权过的用户。

  • updateOne/deleteOne 只能在单个分区或单个子表上执行。

  • fapmongo2 只能使用 fapmongo2 创建的用户进行鉴权。如果当前 SequoiaDB 是由 3.4.1 之前的版本升级上来的,升级之前已存在的用户 fapmongo3 无法使用。如果 fapmongo3 需要使用鉴权功能,必须先在当前版本的 SequoiaDB 创建一个新用户。