Ruby操作MongoDB(進階五)-資料庫管理Administration

來源:互聯網
上載者:User

標籤:collection   logger   monitroing   

通過前面四章的學習,本章我們開始學習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相關

   除了可以使用預設的全域驅動日誌,你也可以設定自己的Log Service。下面的例子設定了自己的Log Service: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)


本篇文章講述了資料庫管理方面的知識和參數設定,主要包括資料庫層面,集合層面,認證機制,日誌,監控五個方面的知識講解。

   

本文出自 “techFuture” 部落格,謝絕轉載!

Ruby操作MongoDB(進階五)-資料庫管理Administration

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.