Ruby操作MongoDB(进阶)-创建数据库客户端连接

在Ruby的MongoDB2.4.3驱动版本中,通过创建一个Mongo::Client对象来构建一个Ruby的数据库连接。Mongo::Client构造器提供两种构造方式:一是通过提供主机列表和一些可选参数,另外还有通过一个连接URI。创建好的数据库连接默认连接到admin数据库。

1.使用Mongo::Client创建数据库客户端连接

1.1. 单服务器模式创建数据库连接

在单服务器模式下创建数据库连接,只需提供一个主机连接参数。另外,还可以通过消除自动发现步骤强制将集群拓扑转换为单机模式。可以通过下述三种方式创建单服务器模式下的数据库连接

Mongo::Client.new([‘127.0.0.1:27017‘],:database=>‘mydb‘)

Mongo::Client.new([‘127.0.0.1:27017‘],:database=>‘mydb‘,:connect=>:direct)

Mongo::Client.new(‘mongodb://127.0.0.1:27017/mydb‘)

1.2. 副本集模式创建数据库连接

通过传递一个或多个主机地址参数和副本集名字,可以创建一个到副本集的数据库连接。即使在创建时没有完全提供副本集的所有信息,MongoDB的驱动器的自动探索模式可以找到副本集中的所有成员。创建副本集中的数据库连接可以通过下面的形式创建:

Mongo::Client.new([‘127.0.0.1:27017‘,‘127.0.0.1:27018‘],:database=>‘mydb‘,:replica_set=>‘myapp‘)

Mongo::Client.new(‘mongdb://127.0.0.1:27017,127.0.0.1:27018/mydb?replicaSet=myapp‘)

1.3. 共享集群模式创建数据库连接

通过传递一个或多的Mongos 主机,来创建一个共享集群模式。自动探索模式可以限定服务器是mongos实例,但如果你关闭了自动探索模式,就要将shared参数传递到连接中来实现集群模式数据库连接的创建。通过以下三种例子可以创建数据库连接:

Mongo::Client.new([‘127.0.0.1:27017‘],:database=>‘mydb‘)

Mongo::Client.new([‘127.0.0.1:27017‘],:database=>‘mydb‘,:connect=>:shared)

Mongo::Client.new(‘mongodb://127.0.0.1:27017/mydb?connect=shared‘)

2. 数据库客户端连接参数选项

在使用Mongo::Client时,可以通过多个不同的可选参数来配置驱动的行为,可以通过在构造器中配置这些参数或者将它们通过URI提供给Mongo::Client.

鉴于URI的参数设置方式需要使用驼峰格式,这不是Ruby的标准格式。下面的表格中列出了URI格式的参数配置选项,以及相对应的使用Ruby构造器的参数选项。使用上述两种参数设置方式时需要注意URI参数设置中的选项时间单位是毫秒,而在Ruby构造器中对应的是float类型的秒。

3. URI参数及对应Ruby参数

URI选项 Ruby选项
replicaSet=String :replica_set=>String
connect=String :connect=>Symbol
ssl=Boolean :ssl=>true|false
connectTimeoutMS=Integer :connect_timeout=>Float
socketTimeoutMS=Integer :socket_timeout=>Float
serverSelectionTimeoutMS=Integer :server_selection_timeout=>Float
localThresholdMS=Integer :local_threshold=>Float
maxPoolSize=Integer :max_pool_size=>Integer
minPoolSize=Integer :min_pool_size=>Integer
waitQueueTimeoutMS=Integer :wait_queue_timeout=>Float
w=Integer|String { :write=>{:w=>Integer|String}}
wtimeoutMS=Integer { :write=>{:wtimeout=>Float}}
journal=Boolean { :write=>{:j=>true|false}}
fsync=Boolean { :write =>{:fsync=>true|false}}
readPreference=String { :read=>{:mode=>Symbol}}
readPreferenceTags=String { :read=>{:tag_sets=>Array<String> }}
authSource=String :auth_source=>String
authMechanism=String :auth_meth=>Symbol
authMechanismProperties=Strings { :auth_mech_properties=>{:service_realm=>String,:canonicalize_host_name=>true|false,:service_name=>String}}

4. 下面会详细讲解Ruby中每个选项的作用,默认值和类型

参数 参数描述 参数类型 默认值
:replica_set 当使用副本集模式时,该参数用于设置副本集的名字,且可以在启用自动探索模式时通过名字过滤服务器

String

none
:ssl 通知客户端通过SSL连接到服务器 Boolean false
:ssl_cert 用于设置证书文件路径,该证书用于识别鉴定到MongoDB连接是否有效。如果设置了该选项,将会比:ssl_cret_string的值和:ssl_sret_object的值具有更高的使用优先级 String
none

:ssl_cert_string 该string字段包含了使用PEM编码的用于鉴别连接有效性的证书信息。如果设置了该参数,它比:ssl_cret_object的值具有更高的使用优先级 String none
:ssl_cert_object 使用OpenSSL::X509::Certificate证书鉴别到MongoDB的连接 OpenSSL::X509::Certificate none
:ssl_key 鉴别连接有效性的私钥文件。虽然秘钥文件与证书存储在同一个文件,但是两个需要被精确匹配。如果设置了该参数,它比:ssl_key_string和:ssl_key_object具有更高的使用优先级 String none
:ssl_key_string 包含用于鉴别连接有效性的使用PEM编码的私钥字符串信息。如果设置了这个参数,它比:ssl_key_object具有更高的使用优先级 String none
:ssl_key_object 鉴别连接有效性的私钥对象 OpenSSL::PKey none
:ssl_key_pass_phrase 私钥的密码信息 String none
:ssl_ca_cert 一组把授权证书连接起来的证书信息的存储路径,这些授权证书用于从连接的另一端验证证书会否通过。参数:ssl_verfiy的使用需要设置:ssl_ca_cret,:ssl_ca_cret_string,:ssl_ca_cret_object三个参数中的一个。 String none
:ssl_ca_cert_string 包含一组把授权证书连接起来的证书信息的字符串,这些授权证书用于从连接的另一端验证证书会否通过。参数:ssl_verfiy的使用需要设置:ssl_ca_cret,:ssl_ca_cret_string,:ssl_ca_cret_object三个参数中的一个。 String none
:ssl_ca_cert_object 代表了把授权证书连接起来的证书信息的OpenSSL::X509::Certificate数组,这些授权证书用于从连接的另一端验证证书会否通过。参数:ssl_verfiy的使用需要设置:ssl_ca_cret,:ssl_ca_cret_string,:ssl_ca_cret_object三个参数中的一个。 Array<OpenSSL::X509::Certificate> none
:ssl_verify 用于设置是否进行对等证书验证 Boolean false
:connect_timeout 创建一个socket连接,抛出异常之前的等待时间(秒) Float 10秒
:socket_timeout 在一个socket执行操作抛出异常之前的等待时间(秒) Float 5秒
:max_pool_size 单个服务器的连接池的最大连接数 Integer 5
:min_pool_size 单个服务器的连接池的最小连接数 Integer 1
:wait_queue_timeout 等待连接池中连接变为有效状态的等待时间 Float 1
:write
具体设置与写相关的Hash类型的参数。其值可以为:w,:wtimeout,:j,:fsync

如{ :write =>{ :w=>2}}

Hash {:w=>1}
:read Hash类型的参数,用于具体设置首选读模式以及对于选定服务器的标签集合。其值可以设置为:mode和:tag_sets。例如{ :read=>{ :mode=>secondary,:tag_sets=>["berlin"]}} Hash {:mode =>:primary}
:auth_source 具体设置了授权源信息 String 2.6及其之后版本,如果提供了授权证书,则默认为admin;否则的话就是当前的数据库
:auth_mech 具体设置使用的授权机制。可以是下述值的其中之一::mongodb_cr,:mongodb_x509,:plain,:scram Symbol MongoDB3.0后的版本,如果用户提供了资格证书但是又没有设置:auth_mech属性,则默认为:scram。2.6版本之前,默认为:mongodb_cr
:auth_mech_properties 提供了额外的授权机制属性 Hash none
:user 认证使用的用户名称 String none
:password 认证使用的用户密码 String none
:connect 覆盖驱动的自动探索特性,并且强制将集群拓扑结构转变为一个特定的类型。包括::direct,:replica_set或者:shared Symbol none
:heartbeat_frequency 多个监视器异步刷新服务器状态的时间(秒) Float 30
:database 需要连接的数据库名字 String admin
:server_selection_timeout 选定一个合适的服务器去执行某些操作,在抛出异常之前的等待时间 Float 30
:local_threshold 设置了最近的服务器和可以被选中的服务器之间切换的最大延迟时间 Float 0.015

5. 超时相关参数的设置细节

时间: 2024-12-18 17:01:18

Ruby操作MongoDB(进阶)-创建数据库客户端连接的相关文章

Ruby操作MongoDB(进阶)-CRUD操作

MongDB数据库的使用离不开CRUD操作.什么是CRUD,就是创建文档,读取文档信息,更新文档和删除文档. key-value键值对标记 在MongoDB的Ruby驱动中,Key_value键值多次出现.而且有时会出现语法上的巧合,这取决于在使用的Ruby版本中如何申明. 在文档创建步骤中,1.9及之后版本支持以下语法: document={name:"Tom",age:20}. 但是如果你使用的是2.2或者更高的版本,你可以用双引号将你的key包起来.如: document={&q

Ruby操作MongoDB(进阶五)-数据库管理Administration

通过前面四章的学习,本章我们开始学习Ruby操作MongoDB数据库中的数据管理Administration 数据库相关 Ruby驱动为数据库对象执行命令,获取集合列表,和管理任务提供了多种多样的帮助. 1.1 获取集合列表List Collection 通过collections和collection_names两个指令可以获取集合列表和集合的名字.例如: client=Mongo::Client.new(['127.0.0.1:27017'],:database=>'film') datab

Ruby操作MongoDB(进阶七)-排序规则Collations

本篇博文从三个方面进行排序规则Collations的讲解.其中包括概览,使用方式和支持排序的操作.首先我们对排序规则进行一个概览性的介绍 排序规则概览 排序规则为特定语言习惯中的字符串比较提供一套规则,例如,在加拿大法语中,给定词汇的最后一个重音节决定了其排序顺序. 考虑下述法语词汇: cote < coté < cte < cté 使用加拿大法语排序规则,得到如下排序结果 cote < cte < coté < cté 如果没有指定排序规则,MongoDB使用简单的二

Ruby操作MongoDB(进阶八)-聚合操作Aggregation

上篇博文讲述了排序规则collations的操作和设置方式.顺带介绍了一部分聚合aggregation的设置方式.本文继续介绍聚合操作. 聚合框架的操作处理完数据记录后在返回计算结果.集合操作将来源于多个文档的值归类到一起,这样就可疑在被归类的数据上进行多种操作,然后返回一个单独的结果 1 聚合管道 聚合管道是用于数据聚合的一个框架,是以数据处理管道概念为原型.将文档输入一个多级管道后,可疑将文档转换为聚合的结果.下面以restaurants作为数据集,通过将餐馆类归类,我们就可以使用聚合管道在

Ruby操作MongoDB(进阶十)--文本搜索text search

MongoDB数据库对于文本内容之上搜索查询操作上提供了文本索引,文本索引可以应用于所有的字符串或者字符数组的字段.为了在Ruby驱动上使用文本搜索,首先使用indexes.create_one()方法创建一个文本索引.下面的实例中,在test数据库中的restaurants集合后果,为name字段创建了一个文本索引. client=Mongo::Client.new(['127.0.0.1:27017'],:database=>'test') client[:restaurants].inde

Ruby操作MongoDB(进阶六)-索引Indexing

在本博文中,我们主要介绍数据库索引.主要包含创建索引,删除索引,列出索引 数据库驱动提供了在集合上创建,删除和查看索引的方法. 创建索引 创建索引的操作中,可以一次创建一个索引,也可以一次创建多个索引.在3.0及其以上版本的MongoDB数据库中,多个索引一起创建时是被平行创建出来的.在更早的版本中,多个索引是按照顺序创建的. 单个索引的创建,使用create_one方法 client=Mongo::Client.new(['127.0.0.1:27017'],:database=>'film'

Ruby操作MongoDB(进阶九)-批量操作Bulk Operations

本篇文章主要讲解批量操作的相关知识.主要会讲解下面的方法的使用insert_one,insert_many,delete_one,delete_many,replace_one,update_one,update_many七个方法. 批量写入的API在一次方法调用中会想服务器发送一个操作的列表.如果你设定了ordered参数,就可以确保你传递的操作的执行顺序. 批量写方法有三个参数:第一是一个操作列表,第二是boolean类型的ordered参数,默认值是true:第三个是写相关参数,默认为集合

Windows下如何实现Ruby操作MongoDB(环境安装配置)

最近在研究使用非关系型数据库,当前使用的是文档型数据库MongoDB.涉及到在Windows环境下使用Ruby操作MongoDB数据库.因此需在Windows环境下安装Ruby开发环境. 按照如下步骤进行操作: 1. 首先安装ruby 到http://rubyinstaller.org/downloads/下载相关软件:下载对应电脑所需的RubyInstaller版本.作者选中的是Ruby2.3.3(x64),url对应界面如下图所示: 成功下载安装包后,直接点击安装,可勾选所有选项,安装时必须

Ruby操作MongoDB数据库(进阶十二)--GridFS

本章我们进行进阶教程的最后一篇,GridFS的学习.在本章中,我们将要学习下述内容: 创建一个GridFS对象("Grid::FSBucket") 写数据流处理 读数据流处理 找到文件元数据 文件删除 操作Grid::File对象 文件插入 文件查找 文件删除 Ruby驱动为数据库中块文件存储的处理提供了一个简单整洁的接口,也就是"GridFS".这个API接口让我们既可以使用Grid::File对象,也可以使用读写流. 创建一个GridFS对象("Gri