zoukankan      html  css  js  c++  java
  • 使用SQL访问MongoDB

    使用SQL访问MongoDB

    简介

    使用SQL访问MongoDB有多种解决方案,就我所知的,除了今天要介绍的MongoDB Connector for BI外,还有Studio 3T,但后者只有在企业版中才提供,使用成本之高是可以想见的,而MongoDB Connector for BI则是MongoDB官方推出的,使用也相当方便。

    本文以macOS为例进行说明,使用其他系统的同学也可以参考。

    MongoDB Connector for BI的作用如下图所示,它只是做为BI和MongoDB之间的一个代理,将MongoDB的数据转换为关系型的,并不存储数据。

    img

    MongoDB Connector for BI一共有两个核心组件

    • mongodrdl
    • mongosqld

    其实就是两个可执行文件。

    mongodrdl

    它可以连接MongoDB,并生成一个Document-Relational Definition Language (DRDL) 文件,以便将给定MongoDB集合中的数据转换为关系型的。

    mongosqld

    作为守护进程运行,响应SQL请求,并将其转换为MongoDB的请求,注意,在启动mongosqld守护进程先,必须先执行mongodrdl生成相应的DRDL文件。

    NOTE
    本文基本上是官方文档的一个解释,英语好的同学可以直接参考原文:MongoDB Connector for BI

    安装

    OpenSSL

    使用brew安装OpenSSL

    brew update
    brew install openssl
    

    MongoDB

    这个不用多说了,安装社区版即可。

    MongoDB Connector for BI

    同样去官方网站进行下载即可,可以免费使用。

    配置

    生成DRDL

    格式如下

    mongodrdl --host {your.mongohost.com} -d dbname [-c collname] -o schema.drdl
    

    NOTE
    如果MongoDB启用了密码,则在生成DRDL时,还需要加-u -p --authenticationDatabase这些认证选项,才能生成DRDL。

    启动mongosqld

    NOTE
    对于有认证的MongoDB,需要首先执行以下操作:

    1. 在terminal中执行mysql_config --plugindir查看MySQL的插件所在目录(mysql_config是MySQL安装目录中bin目录下的一个可执行文件)。
    2. 下载C Authentication Plugin——mongosql_auth,进入下载页面后选择对应的操作系统进行下载。
    3. 将下载后的文件解压缩,拷贝lib目录下的mongosql_auth.so到MySQL的插件目录中即可,我电脑上的目录是/usr/local/mysql/lib/plugin

    官方文档给出的启动方式如下

    mongosqld install --config {pathToConfigFile}/mongosqld.conf
    sudo service mongosql start
    

    但在macOS下,使用service mongosqld start的方式显然是无法启动的。

    可以使用如下两种方式启动:

    使用schema文件

    使用mongodrdl生成的DRDL文件,可以直接启动mongosqld

    $ mongosqld --schema <drdl file>
    

    使用config文件

    config文件是一种YAML格式的文件,其他配置可以参考官方文档,但schema一定要指定!

    如下是我的config文件,假设名称为mongosqld.conf

    schema:
      path: "/Users/luogang/Dropbox/Development/mongodb/mongodb-bi-x86_64-osx-v2.2.0/bin/candidate.drdl"
    

    使用如下命令启动mongosqld

    $ mongosqld --config mongosqld.conf
    

    NOTE
    这两种方式启动后,都会监听3307端口,如果你在本机已经启动了MySQL Server,有可能mongosqld无法启动,因为它发现/tmp/mysql.sock已经被使用,这时候可以停止本机的MySQL Server,或者为mongosqld指定新的unix socket(使用--unixSocketPrefix选项)或者不使用UNIX socket(--noUnixSocket选项),但是使用后两种解决方法要注意,MySQL Client连接时,默认会连接/tmp/mysql.sock,由此导致连接的仍然是MySQL Server,而不是mongosqld。

    使用MySQL Client连接

    向无认证的MongoDB连接

    也就是说,要连接的MongoDB没有设置密码,直接连接即可。

    $ mysql --protocol tcp --port 3307
    

    向有认证的MongoDB连接

    $ mysql '--user=admin?source=admin' --default-auth=mongosql_auth -p
    

    输入密码即可连接成功。

    NOTE
    这一步输入的用户名--user为MongoDB的用户名,source=指定认证数据库,跟MySQL Server的用户名密码没有一毛钱关系了。

    下面这幅图是Mongo Compass中的截图

    MySQL Client

    下面这幅是在MySQL Client中的截图,可以看出,已经可以使用SQL进行查询了。

    MySQL Client

    NOTE
    使用其他MySQL客户端进行连接的同学,可以在连接页面查看Advanced选项,我在MySQLWorkbench中可以成功连接,在Advanced选项卡中的Others栏填写--user=admin?source=admin --default-auth=mongosql_auth即可。

    小结

    欢迎大家扫描二维码关注我的微信公众号哦,方便在手机上进行阅读。
    我的公众号

  • 相关阅读:
    百度语音
    前端技术
    自动化测试
    分布式锁
    缓存穿透、缓存击穿、缓存雪崩
    延迟队列
    Arthas
    MyBatis配置文件容易引发的不容易发现的问题(驼峰式命名)
    JUnit使用中遇到的问题
    使用ArrayList<E>遇到的数据重复问题
  • 原文地址:https://www.cnblogs.com/stevenluo/p/7468613.html
Copyright © 2011-2022 走看看