2015年5月2日 星期六

0502 NoSQL



MongoDB(文件導向的資料庫):

1.  資料以document形式儲存,每筆都是JSON

2.  沒有table的概念,無表格
3.  為collection的概念,半結構化的資料
4.  查詢語言皆以JSON為主
5.  沒有JOIN
     解決方法: a.  只能到各地去抓資料回來在自己去寫程式RUN
                            b.  必要的資料就放在一起不要分開



JSON: 類似KEY VALUE,有順序的概念,不能有重複的KEY

存放資料,沒有固定格式的限制,也沒有形態的限制 (ex : int  string)


RDB存放方式:


RDB table 

name    age


jj            30


bb           15


kk           22    05/05   XXX


-----------------------------------------------------------------

MongoDB存放方式:


MongoDBcollection


name    "jj"   , age  "30"    

name    "bb"   , age  "15"    
name    "kk"   , age  "22"  ,   birthday 05/05  


+++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++

MongoDB 是 NoSQL中最盛行的


OPS 營運主管


PG → 監控方面:便於加節點,管理成本低,好維護性,有平衡的機制

                                 (在同一環境不會有某點做比較多而某節點run比較少資源的情況)

 <此課程偏向> programmer 


盛行的原因:比RDB簡單


● 類似FORING KEY的方式儲存


cms.blog.posts


表示名稱,中間的點點也可換成底線


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

※ 安裝 & 啟動方法

mongod  ( d = 會在背景跑視窗的服務,不要關,關了就無法use)

1. 下載MongoDB套件    https://www.mongodb.org/

2. 在cmd下建立資料夾 mkdir MongoDB\    <在要儲存的地方建立資料夾>

3. cd 安裝目錄之下,mongo.exe  設定path:   mongod  --dbpath  建立資料夾的地方

4. 再另外開一個cmd

5. 
md MongoDB\ (移動到存放資料的資料夾) 之下

6. 確認是否有mongo.exe : tasklist | find "mongo"  會顯示出來

7. 移到安裝目錄之下  key mongo  即可執行

-----------------------------------------------------------------

Mongo DB    在 javascrip 即時環境

下指令:


var  a={name="Danny",age:"25"}    key不用加引號,value要記得打引號(單雙皆可)


db的POST和 javascript的POST不一樣, javascript的POST所做的變更並不會同步到db的POST

 當 javascript的POST 有異動時, db的POST 需要update 

post 為預設變數名稱,可修改


-----------------------------------------------------------------

db.   collection name.   動作名稱   


                                          .remove({})

                                          .update(, 資料名稱)
                                          .insert({a:3,b:5})   直接新增
                                          .findOne()                    排序整齊
                                          .find().pretty()             排序整齊


放在裡面的資料抓出來就會有_id  形同身分證的存在



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

指令: ※ 新增、※ 修改、※ 刪除


> show dbs                  
列出資料庫清單
> show collections     列出資料集清單

example ={name:'David',number:'01', date: new Data()}    新增 資料

db.blog.items.insert(example)

>  db.blog.items.find()  列出資料集的資訊


>   db.blog.items.findOne()  排序整齊 列出資料集的資訊

example.tag=['birthday','0504']     tag  標籤 

>  db.blog.items.update({ "_id" : ObjectId("5546ee08651865577708b426")},example)  更新db.blog.items

>  db.blog.items.findOne()  排序整齊 列出更新完後的資料集的資訊




>  db.blog.items.remove({"name" : "David"})   移除含有"name" : "David" 欄位的資料集

>  db.blog.items.findOne()       結果會是null


-----------------------------------------------------------------------------
指令: 排序

> example2 = {name:'Danny',age:'25',date: new Date()}

> db.people.insert(example2)

> db.people.find().pretty()     <功能和.findOne() 一樣>


-----------------------------------------------------------------------------

config檔  設定檔 < 用來設定在啟用時會run什麼程式 >

在能輸入的視窗key

關掉: db.adminCommand({shutdown:1})

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

※    id & Object

_id 可自行產生 型態不限制且不能重複值










Timestamp 目前時間(指到秒)

Machine : MAC位址


-----------------------------------------------------------------------------

Bulk  insert ???

> db.testdata.insert([{phone:0987654321},{money:100000}])

> db.testdata.findOne()  每個新增的資料都有id


===============================================
Tips:


○ document 限制大小為 16M,不適合放二進位的資料(EX:圖檔)

○ 如何得知文件大小 → Object.bsonsize(doc文件名稱)

○ 如果連collection 都不要可以直接drop
    drop 比 remove 速度還快還省時間

○ document 需要限制大小較佳


===============================================================================

※ 修改js檔,並在mongodb之下run結果

1. 將js檔  移到bin之下

2. 再用nopad++  開.js檔


3. 移除註解 存檔在去run


4.  cmd 在bin 之下    mongo.exe  query1.js (檔名)


5. 就可以show出結果






其他參考資料:MongoDB講義
參考來源: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/


沒有留言:

張貼留言