设为首页 收藏本站
查看: 627|回复: 0

[经验分享] Ruby操作MongoDB(进阶五)-数据库管理Administration

[复制链接]

尚未签到

发表于 2018-10-25 08:07:43 | 显示全部楼层 |阅读模式
  通过前面四章的学习,本章我们开始学习Ruby操作MongoDB数据库中的数据管理Administration

  •   数据库相关
  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 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
  ''
  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)
  本篇文章讲述了数据库管理方面的知识和参数设置,主要包括数据库层面,集合层面,认证机制,日志,监控五个方面的知识讲解。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626111-1-1.html 上篇帖子: MongoDB设计命名规范 下篇帖子: Ruby操作MongoDB(进阶六)-索引Indexing
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表