標籤:編程   程式設計語言   執行   規則   關係型資料庫   獨立性   負載   ruby   索引值   
關係型資料庫遵循ACID規則
事務在英文中是transaction,和現實世界中的交易很類似,它有如下四個特性:
 
1、A (Atomicity) 原子性
原子性很容易理解,也就是說事務裡的所有操作要麼全部做完,要麼都不做,事務成功的條件是事務裡的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要復原。
 
比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要麼一起完成,要麼一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。
 
2、C (Consistency) 一致性
一致性也比較容易理解,也就是說資料庫要一直處於一致的狀態,事務的運行不會改變資料庫原本的一致性約束。
 
例如現有完整性條件約束a+b=10,如果一個事務改變了a,那麼必須得改變b,使得事務結束後依然滿足a+b=10,否則事務失敗。
3、I (Isolation) 隔離性
所謂的獨立性是指並發的事務之間不會互相影響,如果一個事務要訪問的資料正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的資料就不受未提交事務的影響。
比如現有有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的。
4、D (Durability) 持久性
持久性是指一旦事務提交後,它所做的修改將會永久的儲存在資料庫上,即使出現宕機也不會丟失。
 
什麼是NoSQL?
NoSQL,指的是非關係型的資料庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同於傳統的關係型資料庫的資料庫管理系統的統稱。
NoSQL用於超大規模資料的儲存。(例如Google或Facebook每天為他們的使用者收集萬億位元的資料)。這些類型的資料存放區不需要固定的模式,無需多餘操作就可以橫向擴充。
什麼是MongoDB ?
MongoDB 是由C++語言編寫的,是一個基於分布式檔案儲存體的開來源資料庫系統。
在高負載的情況下,添加更多的節點,可以保證伺服器效能。
MongoDB 旨在為WEB應用提供可擴充的高效能資料儲存解決方案。
MongoDB 將資料存放區為一個文檔,資料結構由索引值(key=>value)對組成。MongoDB 文檔類似於 JSON 對象。欄位值可以包含其他文檔,數組及文檔數組。
主要特點
 - MongoDB的提供了一個面向文檔儲存,操作起來比較簡單和容易。
 
 - 你可以在MongoDB記錄中設定任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實現更快的排序。
 
 - 你可以通過本地或者網路建立資料鏡像,這使得MongoDB有更強的擴充性。
 
 - 如果負載的增加(需要更多的儲存空間和更強的處理能力) ,它可以分布在電腦網路中的其他節點上這就是所謂的分區。
 
 - Mongo支援豐富的查詢運算式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
 
 - MongoDb 使用update()命令可以實現替換完成的文檔(資料)或者一些指定的資料欄位 。
 
 - Mongodb中的Map/reduce主要是用來對資料進行批量處理和彙總操作。
 
 - Map和Reduce。Map函數調用emit(key,value)遍曆集合中所有的記錄,將key與value傳給Reduce函數進行處理。
 
 - Map函數和Reduce函數是使用Javascript編寫的,並可以通過db.runCommand或mapreduce命令來執行MapReduce操作。
 
 - GridFS是MongoDB中的一個內建功能,可以用於存放大量小檔案。
 
 - MongoDB允許在服務端執行指令碼,可以用Javascript編寫某個函數,直接在服務端執行,也可以把函數的定義儲存在服務端,下次直接調用即可。
 
 - MongoDB支援各種程式設計語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
 
 - MongoDB安裝簡單。
 
 
MongoDB->NoSQL(NoSQL = Not Only SQL ),意即"不僅僅是SQL"