1. 程式人生 > >Ruby操作MongoDB(進階五)-數據庫管理Administration

Ruby操作MongoDB(進階五)-數據庫管理Administration

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相關

除了可以使用默認的全局驅動日誌,你也可以設置自己的日誌服務。下面的例子設置了自己的日誌服務: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