Thursday, August 8, 2019

MongoDB Certified DBA - C100DBA 學習筆記

       2019 八月剛參加完 MongoDB DBA 的認證考試,依稀記得有幾個考題出得蠻有趣地,寫下來作為自己的學習紀錄。
       另外,關於 MongoDB 認證考試的準備方式,可參考前輩所寫 :http://mongodbcertificate.blogspot.com/



Shard

1.      Shard key
is immutable? Shard key不可改嗎?
不可改值嗎?
Unique ?

2.      Config db 何時可改動資料?
要改設定? based on doc? mongoDB support staff協助時?

3.      考慮改為 shard 的時機。
目前是3node replica set; 一年資料增量 3X; strict restore time limit

4.      Shard key boundary
Include lower boundary value, NOT include upper boundary value

5.      mongos 提供 routes service
6.      mongos config db 取得 data chuck location info

7.      建議的安全性設定
monogd enable authentication / auth?
每個 mongos 建立不同 acct?
Server 管理上限制使用 dedicated port?

Query / CURD

1.      what is DML?
Read? Write? Create user?
Ans: write

2.      read concern, majority

3.      write concern, 可能的結果
db.c1.update({},{2, timeout(400)})
導致block?
2 node write & in timeout limit?
timeout limit 前得不到 2 node confirm

4.      find() array 語法
{ a:1
b:[“Kevin Dery”, “Joe Yang”, “Peter Pan”]
}
以下哪個對 複選
db.c1.find(b: “Kevin Dery”)??
db.c1.find(b:[ “Kevin Dery”])??
db.c1.find(b.0: “Kevin Dery”)??

5.      Geo 查詢
Near


Index

1.      array index, 只能有一個
2.      explain default 是用那總方式?
3.      output 結果判斷是否為Covered query
4.      Index prefix, 以下query 是否用到 index?

5.      In memory sort
以下query 是否為 in memory sort? Or index uesed query?
Index name:1
db.c1.find({},{_id:0, address:1, name:1}).sort(name:1)


Philosophy

1.      name space 定義
abc.efg 是有效 namespace?
p.name 可做為 collection name 集合?

 

Server Administation

1.      local host exception
主要是用來作為 enable authentication 後,建立第一個 account

Tuesday, April 23, 2019

MongoDB 4.0 BI 功能

   
        若以 MongoDB 做為企業資料來源,那麼,要如何有效地將 schema less, json 型態的資訊轉化成圖、表以協助企業決策,會是個很有趣的問題。
       
        傳統的分析工具會要求有 star schema (星狀架構) 的資料結構,包含維度 (dimension) 以及事實表  (fact table) 二種類型。維度資料要能以階層式架構開展,例如 '時間維度' 通常可會區分成 年、季、月、日、時、分等。而 MongoDB 強調的 schemeless 彈性,這裏反倒是個限制。

        不過 MongoDB 4.0 特別強調其在 BI (Business Intelligence)功能上的增進,我們可以看看這些新功能如何來幫助我們,簡化資料準備過程,將心力更專注於報表結果分析。

1. MongoDB Connector for Business Intelligence -- 簡稱 BI Connector,目的是將 MongoDB 服務模擬成一個  RDBMS (例如 MySQL) 的服務,也因此 BI Connector 必須隨時啟動以提供 BI client tool 使用。

2. mongo-odbc-driver -- 安裝在 Win 7 or Win 10 上 (註),讓 Excel,Reporting Service...等 BI client 工具可透過 ODBC 方式直接存取 MongoDB。

以下簡略設定方式:

BI Connector


下載:https://www.mongodb.com/products/bi-connector
安裝: 安裝完成後,僅是在 Program Files 裏建立一個 'MongoDB\Connector for BI' 目錄,包含主要的二個執行檔 'mongodrdl.exe' & 'mongosqld.exe'

 













執行步驟:
       先執行 mongodrdl.exe 用來產生 json → table column 對照檔案,執行一次即可。
(終歸還是要轉成 ER diagram 才可被 BI client tool 使用...),命令範例


mongodrdl --host 10.1.1.100:27017 --db companies --collection data --out c:\mongobi\schema.drdl

       再執行 mongosqld,無論是以 service 方式,或在 cmd 視窗執行,須確保 client 要求時服務為啟動。


mongosqld --schema c:\mongobi\schema.drdl 
  

Mongo-ODBC-Driver

下載:https://github.com/mongodb/mongo-odbc-driver/releases/

安裝: 安裝完成後,至 ODBC 管理員設定即可


Thursday, January 17, 2019

mongostat 摘要

mongostat 可說是 MongoDB 最重要的 monitor 指令。不管你是用 command line 或是 GUI效能監控工具,都必須對 mongostat 的結果欄位有正確的認識。

指令常用選項
mongostat -u <acct> -p <pw> --port <pNum> --authenticationDatabase <db> <sec>  
MEMORY 欄位
mapped: 僅 MMAPv1 Storage Engine 有效,代表 'total data size'. WiredTiger 為 0
res (resident memory): mongod process 所使用的 memory
vsize (virtual memory): MMAPv1 Storage Engine 為2倍 mapped mem。 WiredTiger, 一般略大於 res,但 connection thread stack 也會佔據相當程度的 vsize。

指令類型欄位
用以分析每秒有幾次 insert, query, update, delete, getmore 以及 command 指令。

READ:
getmore: 執行 'cursor' 時,一次取得的資料已用完,需再次向 server “getmore”。但在secondary node 這是 replication process 的一部分。
query

WRITE: 
insert / update / delete

command: 除了 'insert' 'update' 'delete' 之外的所有指令


*星號,代表 'replicated operation'




ref:
https://stackoverflow.com/questions/52002939/what-is-number-of-command-operations-reported-by-mongostat

Thursday, January 10, 2019

MongoDB 官方版管理工具 - Ops Manager

Ops Manager 是 MongoDB 官方出版的工具軟體,包含監控、佈署與備份功能,雖然已有方便的雲端版本,但很多時候還是需在私有機房建置。在此分享一下其建置前的觀念與規劃、快速安裝步驟,以及初步的監控功能。

目的是讓你秒速建立起 Ops Manager 環境,立即體驗。


重點摘要

1. Preparation
2. OS & MongoDB, Configuration & Installation
3. Install Ops Manager Packages
4. Configure the Ops Manager

1. Preparation

1.1  環境規劃
在 "練習" 的環境中,只要準備一台 Linux server 就可以了,記憶體至少需 4GB。
但在 "生產" 環境,就要考慮到 HA (high availability)、Performance、Capacity 等的因素了。

以下試著來規劃一台 all-in-one 的練習環境。

自動與監控功能,folder in /var/lib/mongo/appdb, port 27017
備份功能,folder in /var/lib/mongo/backup, port 27018

1.2 系統準備
* 取得 sudo permission

2. Customized Install & Config MongoDB

$sudo vi /etc/yum.repos.d/mongodb-org-4.0.repo
 ----將下列內容貼上並儲存
---------------------------------
 [mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc

--------------------------------
$sudo yum install -y mongodb-org

-----安裝完後進行客製化調整
$sudo chkconfig mongod off
$sudo mkdir /var/lib/mongo/appdb; sudo mkdir /var/lib/mongo/backup
$sudo chown -R mongod:mongod  /var/lib/mongo/
$sudo -u mongod mongod --port 27017 --dbpath /var/lib/mongo/appdb --logpath /var/log/mongodb/mongodb-app.log --wiredTigerCacheSizeGB 1 --fork &
$sudo -u mongod mongod --port 27018 --dbpath /var/lib/mongo/backup --logpath /var/log/mongodb/mongodb-backup.log --wiredTigerCacheSizeGB 1 --fork &

*note: MongoDB best practice 有很多環境設定步驟如 file system, ulimit, read-ahead, huge-page 等,在此都先忽略不管。

3. Install Ops Manager Packages

3.1 安裝
-----下載後並將 Ops Manager Packages 放置目錄 /tmp
$cd /tmp
-----格式為 rpm -ivh mongodb-mms-<version>.x86_64.rpm
$sudo rpm -ivh mongodb-mms-4.0.1.50101.20180801T1117Z-1.x86_64.rpm

-----using default connection string Ops Manager uses to connect to the database.
-----start service
$sudo service mongodb-mms start

3.2 verify log
檢查 '/opt/mongodb/mms/logs/' 目錄裡的安裝日誌,確認無異常



4. Configure the Ops Manager

4.1 開啟管理網頁並註冊第一位使用者
open browser, http://<OpsManagerHost>:8080, then ‘Register’
account info : acct@abc.com / P@ssw0rd
4.2 configure Ops Manager pages

Appendix

Reference:

Official steps,

Install All-In_One