【譚俊青:myisam和innodb的比較】mysql儲存引擎圖,使用最多的是myisam。一般愛可生推薦innodb給客戶。myisam儲存構成:3個檔案(tablename.frm, tablename.myd, tablenamemyi),不支援事務,表鎖。
【譚俊青:myisam和innodb的比較】myisam行儲存格式 1 定長-表結構中沒有變長字段,預設就是定長儲存。好處(高效能,更好的恢復能力,不需整理) 2 變長-表結構如果包含varchar, varbinary, blob, test等字段,則以變長儲存。壞處(可能造成碎片,增加恢復難度)3 壓縮格式-唯讀格式
成江東:盛大糖果社群的幾個問題 1 併發壓力快速提高? 2 需求變化快? 3 資料水平拆分?nosql資料庫能否解決這幾個問題。
成江東:議題:mongodb是什麼、特性,適用場景,與其他資料庫的對比。nosql資料庫是非關係型的資料庫,主要用於社群類web2.0**。主要解決1 對資料庫高併發的需求 2 對海量資料的高效率儲存和訪問的需求 3 對資料庫的高可擴充套件性和高可用性的需求。
mongodb是什麼? cap理論-魚與熊掌不可得兼。一致性(c),分割槽容忍性(p),可用性(a)。乙個分布式資料庫最多只能同時滿足兩個。1) ca 傳統關聯式資料庫 2) ap:key-value資料庫
因此,根據cap理論。mongodb不能解決:資料庫事務一致性需求 2 資料庫的寫實時性等。mongodb是乙個介於關聯式資料庫和非關聯式資料庫之間的產品,是非關聯式資料庫當中功能最豐富,最像關聯式資料庫的。他支援的資料結構非常鬆散,是類似 json的bjson格式,因此可以儲存比較複雜的資料型別。
mongodb使用json格式文件資料庫,文件(document),集合。自由資料模式:支援在物件和陣列中嵌入其他的物件和陣列,mongo模式設計中的乙個關鍵問題就是值得為這個物件新建乙個集合呢?還是把這個物件嵌入到其他的集合中。
mongodb複製和自動分片帶來的高可用性。乙個失效,自動切換到另外可用的伺服器上,幾個伺服器形成分片集群,2個以上的shards,1個以上的config servers,和任意數量的mongos servers組成,應用程式連線mongos servers。
找了5臺伺服器進行了模擬測試,乙個php指令碼。發現在初期,分布不均勻,第一台db上有100多萬條,另外2,3臺都是30萬條左右,增加一台伺服器,增加到500萬條以後,發現資料已經變為非常均勻的
mongodb的豐富的查詢語句:in查詢,排序u,exists,查詢分片,count,正則,游標,型別匹配,陣列元素個數。
mongodb map/reduce是聚合和過濾資料的工具。mongodb的效能優異(併發效能有1.5萬多秒,無外來鍵約束,五事務,非同步寫磁碟。) 還有其他特性(gridfs,使用方便,會自動建立資料庫db和集合collection,無需顯式執行。)
mongodb的適用場景 1 結構不固定,有資料巢狀 2 要求高併發性 3 經常需要做資料水平拆分 4 記憶體大於資料量(推薦) 不足之處 1 比較占用磁碟空間,效能受記憶體影響 2 效能依賴記憶體,同時無法指定記憶體大小,容易被其他程式占用 3 不支援事務,不支援join 4 每個document限制最大不超過4mb
為什麼選擇mongodb?效能優異,擴充套件力強,面向文件,部署簡單,功能全面,易於開發,支援全面。郵件組google groups mongodb-user, 豆瓣小組 mongodb。
其他的nosql資料庫簡要分析:redis可以被看成加強版的memcache,redis和tokyo cabinet,沒有mongodb的自動分片技術,tokyo cabinet是個人維護的,在盛大超過1億記錄測試時候有效能問題。在盛大糖果中有部分應用用到。cassandra查詢不夠豐富,穩定性較差。
糖果社群有少數應用在用tokoy cabinet, 已經嘗試mongodb,將增加一下應用的部署。當然,主要還是在使用mysql。應該是與mysql結合起來,互補優勢,得到綜合的效益。
優化包括:表設計,索引規劃,語句優化,儲存過程,觸發器,檢視。1 表設計:命名規則(不用保留字,多位元組字元),字段型別(數值,字元,二進位制,時間,其他)要合適,主要關注效能,磁碟儲存,資料精確度等做個平衡選擇。比如精確浮點數必須是decimal, 實際上是字元型儲存,效能差。
1表設計續:引擎選擇,myisam (快讀,高壓縮比 表鎖); innodb (事務支援,外來鍵支援,行鎖,熱備支援);memory (記憶體資料,表鎖);innodb是單機版唯一支援事務的引擎。memory的安全性查,記憶體出錯就完蛋,但是io效能肯定很高。
1表設計續-引擎介紹:最可靠的引擎 ndb(mysql cluster):支援事務,高併發寫,key-value 可持續化,99.999%的高可靠性。archive:比myisam更高的壓縮比,缺點很多(只能插入,不支援主鍵)。csv是excel和mysql之間溝通的橋梁 blackhole:緩解replication中主的壓力。
1表設計續:【編碼選擇】單位元組,多位元組;經常有亂碼出現,原因是匯出檔案,終端系統字符集不支援,再匯入到新資料庫中,就變成亂碼了。【索引規劃】唯一索引,普通索引,部分索引,聚簇索引,外來鍵;外來鍵只有innodb支援,盡量不要隨便用外來鍵,會影響效能。
【語句優化】關注響應時間,整個時間包括執行時間和傳送時間,需要不斷研究優化。語句優化的一些好習慣,1) 如果能不再sql使用內部函式,就不要用; 2) 用join比where效能好; 3) 注意型別匹配,整型不用'', 如'15'和15; 4) 通過增加欄位如 column_length,代替column(length);
語句優化 5)like 'de' 可以寫為 >='de' and <= 'df';6)去掉不必要的臨時表和不必要的字段,排序等;7)缺乏必要的過濾條件;8)mysql5.5之前對子查詢處理不夠優化,不如join語句快;9)不同型別的字段做關聯查詢,需要修改字段型別為一致;10)多記錄某一條精確定位慢。
語句優化:11)對複雜查詢中,多個欄位從乙個表中選取,表掃瞄次數過多,io操作多,影響速度;
使用摘要表 優點:減少對原磁碟表的訪問 缺點:要做適當的更新。經常更新的資料,可能不合適。比如對於報告表就比較合適。
寫語句優化 觸發器的優化,特點:行級,臨時行表,前置、後置。檢視盡量不要用,對效能很差,因為不用索引。即使要用檢視,限制也很多,時間關係不多講。
mysql cluster 特點 1)無共享儲存的資料儲存模式;2)實時同步資料;3)特有應用下的高效能,高事務吞吐量;4)無特殊硬體需求;5)記憶體儲存資料&硬碟儲存資料(5.1版本) 6)fail over-- 快速,自動; 7)資料節點間心跳機制;
mysql cluster資料是按照主伺服器的方式來儲存的,在每乙個主裡面的資料節點上,都是通過另外的資料節點來提供副本的,乙個節點出了問題,還是會能繼續服務的。極端情況下,2個點點壞了,或者乙個節點的部分和另一節點的其他部分壞了,又該如何考慮呢?
一般,2個管理節點,就可以滿足管理集群的需求。但是2個節點壞了,需要第三種高可用性解決方案,mysql cluster with replication. 還作為異地備份的容災備份。
heartbeat & mysql replication 1)心跳機制-資源故障切換的安全管理;2) 虛擬ip管理--對應用訪問資料庫透明化; 在主從之間加了heartbeat軟體,提供自動切換機制。
heartbeat, block and mysql replication 分布式塊複製(drbd)執行在標準網路協議上。通過網路io提供資料傳輸,有時候比同步還快。在active出問題後,必須進行資料同步,修復後切換回修復後的伺服器。
mysql with shared storage 1) active/passive 多例項訪問同乙份資料檔案 2) 特點: 較高的成本開銷 同時把資料儲存在共享儲存san裡面。
促進大會上的交流
在報導了奧蘭多佛羅里達召開的 better software east devops east 和 agile dev east同地協作會議的教程和演講之後 再報導一下參加者和演講者動態也是個很有意思的事。除了由不同公司按慣例贊助的招待飲品之外,這三個會議還包括了特別的活動和微秒的組織細節,那就是鼓...
促進大會上的交流
在報導了奧蘭多佛羅里達召開的 better software east devops east 和 agile dev east同地協作會議的教程和演講之後 再報導一下參加者和演講者動態也是個很有意思的事。除了由不同公司按慣例贊助的招待飲品之外,這三個會議還包括了特別的活動和微秒的組織細節,那就是鼓...
促進大會上的交流
在報導了奧蘭多佛羅里達召開的 better software east devops east 和 agile dev east同地協作會議的教程和演講之後 再報導一下參加者和演講者動態也是個很有意思的事。除了由不同公司按慣例贊助的招待飲品之外,這三個會議還包括了特別的活動和微秒的組織細節,那就是鼓...