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

通过前面四章的学习,本章我们开始学习Ruby操作MongoDB数据库中的数据管理Administration

  1. 数据库相关

Ruby驱动为数据库对象执行命令,获取集合列表,和管理任务提供了多种多样的帮助。

1.1 获取集合列表List Collection

通过collections和collection_names两个指令可以获取集合列表和集合的名字。例如:

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

database=client.database

database.collections

database.collection_names

在数据库上执行任何命令,请使用commond方法

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

database=client.database

result=database.commond(:ismaster=>1)

result.first

1.2 数据库删除 drop database

使用drop方法删除一个数据库。在数据库对象上调用drop方法

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

client.database.drop

2. 集合相关

驱动也给集合管理工作提供了相应辅助功能。创建一个带参数的集合(比如创建一个固定集合),在从客户端连接获取集合的同时进行参数传递,然后调用create方法

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

actors=client[:actors,:capped=>true,:size=>1024]

actors.create

actors.capped?

结果为true,因为设定了:capped=>true属性

2.1 集合删除 drop collection

同样通过调用drop方法,但是是在集合对象上调用,实现集合的删除功能。

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

actors=client[:actors]

actors.drop

2.2 修改读写的首选项

为了改变特定操作的默认读取首选项参数和写入首选项参数,我们可以在集合上使用with方法。

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

actors=client[:actors]

actors.with(:read=>{:mode=>:primary_preferred}).find.to_a

actors.with(:write=>{:w=>:3}).insert_one({:name=>‘Depeche Mode‘})

3 授权相关

MongoDB支持多种类型的授权机制。

3.1 创建一个用户

为一个特定的数据库创建一个用户,请使用create方法,将用户名username,密码password和用户角色参数roles parameters传递给create方法。

client.database.users.create(‘Peter’,password:‘password‘,roles:[Mongo::Auth::Roles:READ_WRITE])

3.2 提供授权证书

如果开启了授权功能,在创建一个客户端连接时就要提供授权证书。

client=Mongo::Client.new([‘127.0.0.1:27017‘],user:‘test‘,password:‘123‘)

对于2.6及之后的MongoDB版本,:auth_source默认为admin,要么就是当前使用的数据库。如果要切换当前使用的数据库,可以使用use命令

client=Mongo::Client.new([‘127.0.0.1:27017‘])

film_client=client.use(‘film‘)

创建授权证书时,可以创建一个新的客户端连接,例如:

authenticated_client=client.with(user:‘test‘,password:‘123‘),此时创建了一个新的客户端连接authenticated_client.

同样,设定当前数据库和授权证书可以在一个操作中完成。

authenticated_film_client=client.with(:database=>‘film‘,user=>‘test‘,password=>‘123‘)

3.3 MONGODB-CR机制

MONGODB-CR是2.6及其以上版本的默认授权认证机制。可以在证书设定时进行认证机制设置

client=Mongo::Client.new([‘127.0.0.1:27017‘],:database=>‘film‘,user=>‘test‘,password=>‘123‘,:auth_meth=>:mongodb_cr)

3.4 客户端验证client certificate(x509)

需要2.6版本及以上才支持。

在SSL协商期间,驱动提供了x509验证。Client Certificate(X509)机制验证从当前证书衍生得到的具有辨识性主题名称的用户名。这种验证机制的运用需要基于SSL连接方式的使用。例如:
    client=Mongo::Client.new([‘127.0.0.1:27017‘],:auth_mech=>:mongodb_x509,ssl:true,ssl_cert:‘/path/to/client.pem‘,ssl_ca_cert:‘/path/to/ca.pem‘)

3.5 LDAP(SASL PAIN)验证机制

需要2.6及以上企业版本才支持。

2.6及以上企业版本的MongoDB支持使用LDAP验证机制,也就是允许使用LDAP(轻量级目录访问协议)服务器来作为验证证书。

注意:使用LDAP验证机制,密码会以纯文本形式发送到服务器。因此,当时用爱中授权认证机制时,强烈建议开启SSL。

client=Mongo::Client.new([‘127.0.0.1:27017‘],:auth_mech=>:plain,ssl:true,ssl_verify:true,ssl_cert:‘/path/to/client.pem‘,ssl_ca_cert:‘/path/to/ca.pem‘)

3.6 Kerbero(GSSAPI)验证机制

需要2.4及以上企业版本才支持。通过JRuby在Ruby驱动中使用Kerbero,需要经过如下步骤:

1. 设置几个具体的系统属性,这样底层的GSSAPI Java库就可以获取一个Kerberos入场券;

2. 通过在配置文件中提供一个密码,或者设置‘java.security.auth.login.config‘系统属性,从而可以索引到一个keytab文件。在Ruby驱动中通过Matz‘s Ruby Interpreter(MRI)使用Kerberos。通过kinit创建一个授予入场券。

client=Mongo::Client.new([‘127.0.0.1:27017‘],

:auth_mech=>:gssapi

user:‘test‘,

password:‘123‘)

4 日志Logger相关

除了可以使用默认的全局驱动日志,你也可以设置自己的日志服务。下面的例子设置了自己的日志服务:Mongo::Logger.logger=other_logger

4.1 修改日志级别

修改日志级别:

Mongo::Logger.logger.level=Logger::WARN

为了获得更多控制,我们可以在创建客户端连接时传递一个logger参数,在全局日志的基础上为每个客户端提供日志控制。

my_logger=Logger.new($stdout)

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

4.2 日志截断功能Truncate

默认的日志截断功能会在250个字符是进行截断,通过给client实例传递一个参数可以关闭这个功能。

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

5  监控Monitoring

所有用户初始化时发送给服务器的指令产生的时间,都可以描述成好的细粒度信息。为了监控API针对每个指令都发布了一个保证质量的起始事件,也就是说要么成功,要么失败。一个用户必须实现started,succeeded和failed三个方法的一种,每一种都作为当前事件的一个简单参数。驱动中默认的日志用户就是一个实例

module Mongo

class Monitoring

class CommandLogSubscriber

include Loggable

attr_reader=>:options

LOG_STRING_LIMIT =250

def initialize(option ={})

@options=option

end

def started(event)

log_debug("#{prefix(event)}|STARTED|#{format_command(event.command)}")

end

def succeeded(event)

log_debug("#{prefix(event)}|SUCCEEDED|#{format_command(event.command)}")

end

def failed(event)

log_debug("#{prefix(event)}|FAILED|#{format_command(event.command)}")

end

private

def format_command(args)

begin

truncating?truncate(args):args.inspect

rescue Exception

‘<Unable to inspect arguments>‘

end

end

def prefix(event)

"#{event.address,to_s}|#{event.database_name}.#{event.command_name}"

end

def truncate(command)

((s=command.inspect).length>LOG_STRING_LIMIT ? "#{s[0..LOG_STRING_LIMIT]}...":s

end

def truncating?

@truncating||=(options[:truncate_logs]!=false)

end

end

end

end

如果想要注册一个通用的用户,你可以所有客户端的全局属性或者单个客户端的基础设置

Mongo::Monitoring::Global.subscribe(Mongo::Monitoring::COMMAND,my_subscriber)

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

client.subscribe(Mongo::Monitoring::COMMAND,my_subscriber)

关闭监控只需要将监控参数设置为false

client=Mongo::CLient.new([‘127.0.0.1:27017‘],:database=>‘test‘,:monitoring=>false)

本篇文章讲述了数据库管理方面的知识和参数设置,主要包括数据库层面,集合层面,认证机制,日志,监控五个方面的知识讲解。

时间: 2024-11-06 03:55:41

Ruby操作MongoDB(进阶五)-数据库管理Administration的相关文章

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(进阶七)-排序规则Collations

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

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

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

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

在Ruby的MongoDB2.4.3驱动版本中,通过创建一个Mongo::Client对象来构建一个Ruby的数据库连接.Mongo::Client构造器提供两种构造方式:一是通过提供主机列表和一些可选参数,另外还有通过一个连接URI.创建好的数据库连接默认连接到admin数据库. 1.使用Mongo::Client创建数据库客户端连接 1.1. 单服务器模式创建数据库连接 在单服务器模式下创建数据库连接,只需提供一个主机连接参数.另外,还可以通过消除自动发现步骤强制将集群拓扑转换为单机模式.可

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(进阶十一)--空间信息搜索Geospatial Search

上篇博文中介绍了,文本搜索的相应功能. MongoDB数据库为空间信息的处理操作提供了一系列的索引和查询机制.本篇博文将在Ruby驱动上展示如何创建和适用空间索引.下面的实例使用了test数据库中的一个叫做restaurants的简单集合. 下面是restaurants集合 {  "address":{        "building":"1007",        "coord":[-73.856077,40.848447