NoSQL&MongoDB

MongoDB:php

    Is NoSQL(技術的實現,並不是是一個特定的技術,與RMDS對立):Not only SQLweb

    大數據問題:BigData,eg:同時訪問幾個頁面,代碼實現幾個頁面訪問量的大小?sql

        Four Systems:一、並行數據庫:水平切分,分區查詢mongodb

                  二、NoSQL數據庫管理系統:非關係模型、分佈式、不支持ACID數據庫設計模式(ACID:指數據庫事務正確執行的四個基本要素縮寫,即 原子性Atomicity、一致性Consistency、隔離性Isolation、持久性Durability)數據庫

                            NoSQL特色:簡單數據模型;元數據和數據分離;弱一致性;高吞吐量;高水平擴展能力和低端硬件集羣express

                  3.NewSQL數據庫管理系統【include Nosql & ACID & SQL】設計模式

                      代理產品:Clustrix、GenieDB、ScalArc、ScaleDB、NimbusDB、Drizzle等緩存

                  4.雲數據管理服務器

ACID網絡

BASE

Strong consistency

Weak consistency

Isolation

Availability first

Focus on 「commit」

Best effort

Nested transactions

Approximate answer

Availability

Aggressive(optimistic)

Conservative

Simpler

Difficult evolution(schema)

Faster 、 Easier evolution

 

    大數據的分析處理:MapReduce

 

    CAP[分佈式領域CAP

        (Consistency一致性、

Availability可用性、

Partition tolerance分區容錯性)理論]

—注:任何分佈式系統只可同時知足兩點,無法三點兼顧。

        (弱一致性/)最終一致性劃分:因果一致性;(read your own wiriting)讀 本身寫一致性;會話一致性;單調(數學上單一方向)讀一致性;時間軸一致性;

 

    ACID:強一致性、隔離性、採用悲觀保守的方法、難以變化;

    BASE:弱一致性、可用性優先、採用樂觀的方法、適應變化、更簡單、更快

數據一致性的實現技術:NRW    2PC     Paxos    Vector Clock

 

數據存儲模型:www.nosql.databases.org

列式存儲模型Wide Column Store/Column Families

         文檔數據模型Document Store

         鏡像數據模型Key Value/Tuple Store(hash表)

         圖式數據模型Graph Databases

多維數據模型Multimodel Databases

列式模型:

應用場景:在分佈式文件系統之上提供支持隨機讀寫的分佈式數據存儲

典型產品:HBase、HyperTable、Cassandra

數據模型:以「列」爲中心進行存儲,將同一列數據存儲在一塊兒

優勢:快速查詢、高可擴展性、易於實現分佈式擴展

 

文檔模型:

    應用場景:非強事務需求的web應用

    典型產品:MongoDB、ElasticSearch、CouchDB、CouchBase Server

    數據模型:鍵值模型、存儲爲文檔

    優勢:數據模型無需事先定義

 

鍵值模型:

應用場景:內容緩存,用於大量並行數據訪問高負載場景

    典型產品:DynamoDB、Riak、Redis

        數據模型:基於哈希表實現的key-value

        優勢:查詢迅速

   

圖式模型:

    應用場景:社交網絡、推薦系統、關係圖譜

    典型產品:Neo4j。Infinite Graph

    數據模型:圖式結構

    優勢:適用於圖式計算場景

 

MongoDB:NoSQL、文檔存儲。Json

     Database:支持多個database

 

經常使用命令:

Help

db.help();

db.stats()

db.serverStatus()數據庫狀態;mongodb數據庫服務器狀態

 

show dbs

show collections

 

db.getCollectionNames()

 

CRUD(數據庫操做):

DDL,DML

JSON:JavaScript Object Notation

    名稱/值對象的集合

     值的有序列表

 

find()的高級用法:

    比較操做:

$gt,語法格式(filed:{$gt:VALUE})

$gte

$lt

$lte

$ne

$in,語法格式{filed:{[<value>]}}

$nin

 

        組合條件:邏輯運算

            $or:或運算,語法格式{$or:[{<expression1>},…]}

$and:與運算

$not:非運算

$nor:反運算,返回不符指定條件的全部文檔

 

        元素查詢:根據文檔中是否存在指定的字段進行的查詢

            db.mycoll.find().limit();

            count()

            skip()

$exists:語法格式{$filed:{exists:<boolean>}}

$mod:

$type:返回指定字段的值的類型爲指定類型的文檔,語法格式{filed:{$type:<BSON type>}}

1.Double,2.String,3.Object,Array,Binary data, Undefined, Boolean, Data, Null, Regular Expression, JavaScript, Timestamp

 

更新操做:

     db.mycoll.update()

         $set:修改字段的值爲新指定的值;語法格式({field:value},{$set:{filed:new_value}})

$unset:刪除指定字段:語法格式({filed:value},{$unset:{field1,field2,…}})

$rename:更新字段名:語法格式({$rename:{oldname:newname,oldname:newname}})

$inc

  

     刪除操做:

         db.mycoll.remove(<cquery>,<justOne>)

 

     刪除collection:

         db.mycoll.drop()

 

     刪除database

         db.dropDatabase()

         db.mycoll.drop()

 

     php+mongodb:

         php的mongodb擴展   

 

索引:

類型:B+  Tree  hash  空間索引  全文索引

 

MongoDB索引類型:

    單字段索引

    組合索引(多字段索引)

    多鍵索引

    空間索引

    文本索引

    Hash索引

 

MongoDB與索引相關的方法:

    db.mycoll.ensureIndex(field[,options])

        name,unique,dropDups,sparse

    db.mycoll.dropIndex(index_name)

    db.mycoll.dropIndexes()

    db.mycoll.getIndexes()

    db.mycoll.reIndex()

Mongod的經常使用選項:

     Fork=(true|false):mongod是否運行在後臺

     Bind_ip=IP:指定監聽的地址

     port=PORT:指定監聽的端口

     maxConns:併發最大鏈接數

MongoDB的複製功能:

     兩種類型:

         master/slave

             replice set:複製集、副本集

                 服務於同一數據集的多個mongodb實例

 

                 主節點將數據修改操做保存至oplog中

                     Arbiter:仲裁者

             工做特性:至少三個,且應該爲奇數個節點;可使用arbiter來參與選舉;

                 Heartbeat(2s),自動失效轉移(經過選舉方式實現)

 

             複製集的中節點分類:

                 0優先級的節點:冷備節點,不會被選舉成爲主節點,但能夠參與選舉;

                 被隱藏從節點:首先是一個0優先 級的從節點,且對客戶端不可見;

                 延遲複製的從節點:首先是一個0優先級的從節點,且複製時間落後於主節點一個固定時長;

                 Arbiter:

            MongoDB的複製架構:

                Oplog

                Heartbeat

 

                Oplog:大小固定的文件,存儲在local數據庫

 

                    初始同步(initial sync)

                    回滾後追趕(post-rollback catch-up)

                    切分塊遷移(sharding chunk migration)

 

                   Local:存放了副本集的全部元數據和oplog;用於存儲oplog的是一個名爲oplog.rs的collection;

                       Oplog.rs的大小依賴於OS及文件系統;但能夠自定義其大小oplogSize

 

                   Mongo的數據同步類型:

                        初始同步:節點沒有任何數據時

                                  節點丟失副本複製歷史

                        複製

 

                        初始同步的步驟:

  1. 克隆全部數據庫
  2. 應用數據集的全部改變;複製oplog並應用於本地
  3. 爲全部collection構建索引

 

                   副本集的從新選舉的影響條件:

                       心跳信息

                       優先級

                       Optime:

                       網絡鏈接

                       網絡分區

 

                  選舉機制:

                      觸發選舉的事件

                          新副本集初始化時

                          從節點聯繫不到主從點時

                          主節點「下臺「時

                              主節點收到stepDown()命令時

                              某從節點有更高的優先級且已經知足或主節點其餘全部條件

                              主節點沒法聯繫到副本集的「多數方

MongoDB的分片:CPU   Memory   IO

MySQL:Ginzard,HiveDB,MySQL Proxy + HSACLE,Hibernate Shard,Pyshards「

 

                      分片架構中成都角色:

                          Mongos:Router

                          Config server:元數據服務器

                          Shard:數據節點,也稱mongod實例

 

                          Zookeeper

 

                      基於範圍切片:range

                      基於列表切片:list

                      基於hash切片:hash

    寫離散,讀集中

    Db.enableSharding(「testdb」)

相關文章
相關標籤/搜索