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的數據同步類型:
初始同步:節點沒有任何數據時
節點丟失副本複製歷史
複製
初始同步的步驟:
副本集的從新選舉的影響條件:
心跳信息
優先級
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」)