成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL到NOSQL的思維轉變

數據庫 其他數據庫 數據庫運維
NOSQL系統一般都是吸收關系型數據庫的技術,那么,到底是什么因素束縛了關系型數據庫的性能呢?我們從系統設計的角度看這個問題。

NOSQL系統一般都會宣傳一個特性,那就是性能好,然后為什么呢?關系型數據庫發展了這么多年,各種優化工作已經做得很深了,NOSQL系統一般都是吸收關系型數據庫的技術,那么,到底是什么因素束縛了關系型數據庫的性能呢?我們從系統設計的角度看這個問題。

1. 索引支持

關系型數據庫創立之初沒有想到今天的互聯網應用對可擴展性提出如此高的要求,因此,設計時主要考慮的是簡化用戶的工作,SQL語言的產生促成數據庫接口的標準化,從而形成了Oracle這樣的數據庫公司并帶動了上下游產業鏈的發展。關系型數據庫在單機存儲引擎支持索引,比如Mysql的 Innodb存儲引擎需要支持索引,而NOSQL系統的單機存儲引擎是純粹的,只需要支持基于主鍵的隨機讀取和范圍查詢。NOSQL系統在系統層面提供對索引的支持,比如有一個用戶表,主鍵為user_id,每個用戶有很多屬性,包括用戶名,照片ID(photo_id),照片URL,在NOSQL系統中如果需要對photo_id建立索引,可以維護一張分布式表,表的主鍵為形成的二元組。關系型數據庫由于需要在單機存儲引擎層面支持索引,大大降低了系統的可擴展性,使得單機存儲引擎的設計變得很復雜。

2. 事務并發處理

關系型數據庫有一整套的關于事務并發處理的理論,比如鎖的粒度是表級,頁級還是行級,多版本并發控制機制MVCC,事務的隔離級別,死鎖檢測,回滾,等等。然而,互聯網應用大多數的特點都是多讀少些,比如讀和寫的比例是10 : 1,并且很少有復雜事務需求,因此,一般可以采用更為簡單的copy-on-write技術:單線程寫,多線程讀,寫的時候執行copy-on- write,寫不影響讀服務。NOSQL系統這樣的假設簡化了系統的設計,減少了很多操作的overhead,提高了性能。

3. 動態還是靜態的數據結構

關系型數據庫的存儲引擎總是一顆磁盤B+樹,為了提高性能,可能需要有insert buffer聚合寫,query cache緩存讀,經常需要實現類似Linux page cache的緩存管理機制。數據庫中的讀和寫是互相影響的,寫操作也因為時不時需要將數據flush到磁盤而性能不高。簡而言之,關系型數據庫存儲引擎的數據結構是通用的動態更新的B+樹。然而,在NOSQL系統中,比如Bigtable中采用SSTable + MemTable的數據結構,數據先寫入到內存的MemTable,達到一定大小或者超過一定時間才會dump到磁盤生成SSTable文件,SSTable是只讀的。如果說關系型數據庫存儲引擎的數據結構是一顆動態的B+樹,那么SSTable就是一個排好序的有序數組。很明顯,實現一個有序數據比實現一個動態B+樹且包含復雜的并發控制機制要簡單高效地多。

4. Join操作

關系型數據庫需要在存儲引擎層面支持Join,而NOSQL系統一般根據應用來決定Join實現的方式。舉個例子,有兩張表:用戶表和商品表,每個用戶下可能有若干個商品,用戶表的主鍵為,用戶和商品的關聯屬性存放在用戶表中,商品表的主鍵為item_id,商品屬性包括商品名,商品URL,等等。假設應用需要查詢一個用戶的所有商品并顯示商品的詳細信息,普通的做法是先從用戶表查找指定用戶的所有item_id,然后對每個item_id去商品表查詢詳細信息,即執行一次數據庫Join操作,這必然帶來了很多的磁盤隨機讀,并且由于Join帶來的隨機讀的局部性不好,緩存的效果往往也是有限的。在NOSQL系統中,我們往往可以將用戶表和商品表集成到一張寬表中,這樣雖然冗余存儲了商品的詳細信息,卻換來了查詢的高效。

關系型數據庫的性能瓶頸往往不在SQL語句解析上,而是在于需要支持完備的SQL特性。互聯網公司面臨的問題是應用對性能和可擴展性要求很高,并且DBA和開發工程師水平比較高,可以通過犧牲一些接口友好性來換取更好的性能。NOSQL系統的一些設計,比如通過寬表實現Join操作,互聯網公司的DBA和開發工程師也做過,NOSQL系統只是加強了這種約束。從長遠來看,可以總結一套約束集合,并且定義一個SQL子集,只需要支持這個SQL子集就可以在不犧牲可擴展性的前提下支持比如90%以上的互聯網應用。我想,NOSQL技術發展到這一步的時候就算是比較成熟了,這也是我們最終想做的事情。我們在設計和使用NOSQL系統的時候也可以適當轉化一下思維,如下:

1) 更大的數據量。很多人在使用Mysql的過程遇到記錄條數超過一定值,比如2000W的時候,數據庫性能開始下降,這個值的得出往往需要經過大量的測試。然而,大多數的NOSQL系統可擴展性都比較好,能夠支持更大的數據量,因此也可以采用一些空間換時間的做法,比如通過寬表的方式實現Join。

2) 性能預估更加容易。關系型數據庫由于復雜的并發控制,insert buffer及類似page cache的讀寫優化機制,性能估算相對較難,很多時候需要憑借經驗或者經過測試才能得出系統的性能。然后,NOSQL系統由于存儲引擎實現,并發控制機制等相對簡單,可以通過硬件的性能指標在系統設計之處大致預估系統的性能,性能預估可操作性相對更強。

原文鏈接:http://womendu.iteye.com/blog/979757

 

【編輯推薦】

  1. NoSQL那些事:51CTO帶您走進列數據庫
  2. 微軟進軍NoSQL 發布Trinity數據庫
  3. 視覺中國的NoSQL之路:從MySQL到MongoDB
  4. 走進MongoDB的世界 展開MongoDB的學習之旅

 

 

責任編輯:艾婧 來源: ITEYE
相關推薦

2021-05-07 05:54:43

數據庫數據湖數據

2009-08-11 15:05:55

云應用開發思維

2023-08-07 06:55:56

2023-09-07 13:56:45

2011-05-13 09:46:20

MySQLNoSQL

2022-01-25 10:15:34

項目大廠學習

2020-03-25 14:36:12

SQLNoSQL數據庫

2009-01-18 09:24:00

Windows Vis文件共享

2021-11-04 23:13:42

6G5G互聯網

2022-06-27 17:01:34

NoSQ數據庫SQL

2015-03-16 10:29:53

DevOpsSaaS云計算

2022-07-06 10:16:42

ITCIO管理

2013-04-07 09:40:22

智慧商務都市麗人

2015-10-22 11:04:43

sqlmongodb信息比較

2017-07-17 13:19:04

大數據云計算環保

2023-02-06 08:11:19

人工智能機器思維模式

2014-07-11 14:01:29

CFOCFTO甲骨文

2022-03-22 12:56:53

垃圾數據數據完整性

2016-02-22 10:10:48

SqoopSQLNoSQL

2023-06-06 13:50:00

PythonThinkGPT模型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成人中文字幕 | 天天干天天草 | 黄视频网站在线 | 亚洲一区二区三区国产 | 午夜日韩精品 | 黄色片在线免费看 | 欧美视频一级 | 欧美精品在线一区二区三区 | 日韩影音 | 中文字幕 在线观看 | 久久国产精品-国产精品 | 成人区精品一区二区婷婷 | 亚洲日韩中文字幕 | 黄免费观看视频 | 2019天天干天天操 | 久久国产麻豆 | 日韩视频一区二区 | 久久久www成人免费无遮挡大片 | 人人爽日日躁夜夜躁尤物 | а_天堂中文最新版地址 | 日韩精品一区在线 | 视频一区在线观看 | a级毛片毛片免费观看久潮喷 | 国产精品久久久久一区二区 | 女同av亚洲女人天堂 | 中文在线播放 | a级片在线观看 | 国产在线视频一区二区 | 国产成人在线一区二区 | 亚洲第一天堂无码专区 | 99视频在线播放 | 蜜桃视频在线观看免费视频网站www | 国产区免费视频 | 成人在线电影在线观看 | 日韩aⅴ在线观看 | 欧美日韩中文字幕 | 日韩成人 | av影音资源| 亚洲3p| 男女下面一进一出网站 | 伊人精品在线视频 |