NoSQL入門第一天——NoSQL入門與基本概述

一、課程大綱

  

二、入門概述

  1.為什么用NoSQL

    單機MySQL的年代:

      一個網站的訪問量一般都不大,用單個數據庫完全可以輕松應付。     

      我們來看看數據存儲的瓶頸是什么?
        1.數據量的總大小 一個機器放不下時。(現今單表500W的數據量)
        2.數據的索引(B+ Tree)一個機器的內存放不下時
        3.訪問量(讀寫混合)一個實例不能承受

    ?Memcached(緩存)+MySQL+垂直拆分

    后來,隨著訪問量的上升,幾乎大部分使用MySQL架構的網站在數據庫上都開始出現了性能問題,web程序不再僅僅專注在功能上,同時也在追求性能。程序員們開始大量的使用緩存技術來緩解數據庫的壓力,優化數據庫的結構和索引。開始比較流行的是通過文件緩存來緩解數據庫壓力,但是當訪問量繼續增大的時候,多臺web機器通過文件緩存不能共享,大量的小文件緩存也帶了了比較高的IO壓力。在這個時候,Memcached就自然的成為一個非常時尚的技術產品。

    ?Memcached作為一個獨立的分布式的緩存服務器,為多個web服務器提供了一個共享的高性能緩存服務,在Memcached服務器上,又發展了根據hash算法來進行多臺Memcached緩存服務的擴展,然后又出現了一致性hash來解決增加或減少緩存服務器導致重新hash帶來的大量緩存失效的弊端

    ?Mysql主從讀寫分離

    由于數據庫的寫入壓力增加,Memcached只能緩解數據庫的讀取壓力。讀寫集中在一個數據庫上讓數據庫不堪重負,大部分網站開始使用主從復制技術來達到讀寫分離,以提高讀寫性能和讀庫的可擴展性。Mysql的master-slave模式成為這個時候的網站標配了。

    分表分庫+水平拆分+mysql集群?

?    在Memcached的高速緩存,MySQL的主從復制,讀寫分離的基礎之上,這時MySQL主庫的寫壓力開始出現瓶頸,而數據量的持續猛增,由于MyISAM使用表鎖,在高并發下會出現嚴重的鎖問題,大量的高并發MySQL應用開始使用InnoDB引擎代替MyISAM。


    ?同時,開始流行使用分表分庫來緩解寫壓力和數據增長的擴展問題。這個時候,分表分庫成了一個熱門技術,是面試的熱門問題也是業界討論的熱門技術問題。也就在這個時候,MySQL推出了還不太穩定的表分區,這也給技術實力一般的公司帶來了希望。雖然MySQL推出了MySQL Cluster集群,但性能也不能很好滿足互聯網的要求,只是在高可靠性上提供了非常大的保證。

    ?MySQL的擴展性瓶頸

    MySQL數據庫也經常存儲一些大文本字段,導致數據庫表非常的大,在做數據庫恢復的時候就導致非常的慢,不容易快速恢復數據庫。比如1000萬4KB大小的文本就接近40GB的大小,如果能把這些數據從MySQL省去,MySQL將變得非常的小。關系數據庫很強大,但是它并不能很好的應付所有的應用場景。MySQL的擴展性差(需要復雜的技術來實現),大數據下IO壓力大,表結構更改困難,正是當前使用MySQL的開發人員面臨的問題。

    現在的MySQL的樣子?

  為什么用NoSQL

?  今天我們可以通過第三方平臺(如:Google,Facebook等)可以很容易的訪問和抓取數據。用戶的個人信息,社交網絡,地理位置,用戶生成的數據和用戶操作日志已經成倍的增加。我們如果要對這些用戶數據進行挖掘,那SQL數據庫已經不適合這些應用了, NoSQL數據庫的發展也卻能很好的處理這些大的數據。

  介紹玩概述后,就是經典的三步走了:是什么,能干什么,怎么干?

  2.是什么?

  NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,
  泛指非關系型的數據庫。隨著互聯網web2.0網站的興起,傳統的關系數據庫在應付web2.0網站,特別是超大規模和高并發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數據庫則由于其本身的特點得到了非常迅速的發展。NoSQL數據庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題,包括超大規模數據的存儲。

  這些類型的數據存儲不需要固定的模式,無需多余操作就可以橫向擴展。

  3.能干什么?

    易拓展

    NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關系數據庫的關系型特性。
    數據之間無關系,這樣就非常容易擴展。也無形之間,在架構的層面上帶來了可擴展的能力。

    大數據量高性能

    NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。
    這得益于它的無關系性,數據庫的結構簡單。
    一般MySQL使用Query Cache,每次表的更新Cache就失效,是一種大粒度的Cache,
    在針對web2.0的交互頻繁的應用,Cache性能不高。而NoSQL的Cache是記錄級的,
    是一種細粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多了

    多樣靈活的數據模型

    ? NoSQL無需事先為要存儲的數據建立字段,隨時可以存儲自定義的數據格式。而在關系數據庫里,
    增刪字段是一件非常麻煩的事情。如果是非常大數據量的表,增加字段簡直就是一個噩夢

    傳統RDBMS VS NOSQL

  RDBMS
    - 高度組織化結構化數據
    - 結構化查詢語言(SQL)
    - 數據和關系都存儲在單獨的表中。
    - 數據操縱語言,數據定義語言
    - 嚴格的一致性
    - 基礎事務


  NoSQL
    - 代表著不僅僅是SQL
    - 沒有聲明性查詢語言
    - 沒有預定義的模式
    -鍵 - 值對存儲,列存儲,文檔存儲,圖形數據庫
    - 最終一致性,而非ACID屬性
    -非結構化和不可預知的數據
    - CAP定理(對比ACID)
    - 高性能,高可用性和可伸縮性

  4.怎么干

    KV+Cache+Persistence

三、3V與3高

   3V—— 海量Volume  多樣Variety  實時Velocity

   3高——高并發  高可擴(縱向與橫向)  高性能(高可用)

四、經典應用

  當下的應用是sql和nosql一起使用

五、NoSQL數據模型簡介

  數據庫的數據類型不再贅述,可參見MySQL的隨筆

  1.以一個電商客戶、訂單、訂購、地址模型來對比下關系型數據庫和非關系型數據庫

    傳統的關系型數據庫你如何設計?——ER圖(1:1/1:N/N:N,主外鍵等常見)

    nosql你如何設計?

      ——什么是BSON?

      BSON()是一種類json的一種二進制形式的存儲格式,簡稱Binary JSON,它和JSON一樣,支持內嵌的文檔對象和數組對象。
      BSON官網:http://bsonspec.org/

?

?

        BSON格式:http://blog.csdn.net/hengyunabc/article/details/6897540

?

{"customer":{"id":1136,"name":"Z3","billingAddress":[{"city":"beijing"}],"orders":[
??? {"id":17,"customerId":1136,"orderItems":[{"productId":27,"price":77.5,"productName":"thinking in java"}],"shippingAddress":[{"city":"beijing"}]"orderPayment":[{"ccinfo":"111-222-333","txnid":"asdfadcd334","billingAddress":{"city":"beijing"}}],
????? }]}
}
View Code

?

//類似于customer就表示關系型數據庫中的一張表

    兩者對比,問題和難點

      為什么上述的情況可以用聚合模型來處理?    

          高并發的操作是不太建議有關聯查詢的,互聯網公司用冗余數據來避免關聯查詢

          分布式事務是支持不了太多的并發的

      想想關系模型數據庫你如何查?
          如果按照我們新設計的BSon,是不是查詢起來很可愛(沒有亂七八糟的JOIN GROUP BY了)

    2.聚合模型

      不再有MySQL里的varchar等數據類型,統稱聚合模型

  KV鍵值  

  bson  

  列族

    顧名思義,是按列存儲數據的。最大的特點是方便存儲結構化和半結構化數據,方便做數據壓縮,
    對針對某一列或者某幾列的查詢有非常大的IO優勢。

  圖形(復雜的網狀關系)

六、NoSQL數據庫四大分類

  KV鍵值

    典型運用:阿里、百度:memcache+redis

  文檔型數據庫(bson格式比較多)

    典型運用:MongoDB

  列存儲數據庫

    典型運用:HBase

  圖關系數據庫

    社交網絡,推薦系統等。專注于構建關系圖譜

七、CAP原理:CAP+BASE

  1.傳統的ACID

    參見:http://www.cnblogs.com/jiangbei/p/6701239.html

  2.CAP理論
    Consistency (強一致性),         數據一致更新,所有數據變動都是同步的
    Availability (可用性),          ? ? ?好的響應性能
    Partition tolerance (分區容錯性)  ? ?  ? ? 可靠性

  3.CAP的3進2

    

  不可能同時滿足三個理論(一般分布式系統而言,P是基本滿足);所以我們只能在一致性和可用性之間進行權衡


?  AP 大多數網站架構的選擇

  ?CP Redis、Mongodb

?  4.BASE

?  BASE就是為了解決關系數據庫強一致性引起的問題而引起的可用性降低而提出的解決方案。

  BASE其實是下面三個術語的縮寫:

??  ? 基本可用(Basically Available)
??  ? 軟狀態(Soft state)
??  ? 最終一致(Eventually consistent)

  5.分布式與集群簡介

  分布式系統(distributed system)
?  由多臺計算機和通信的軟件組件通過計算機網絡連接(本地網絡或廣域網)組成。分布式系統是建立在網絡之上的軟件系統。正是因為軟件的特性,所以分布式系統具有高度的內聚性和透明性。因此,網絡和分布式系統之間的區別更多的在于高層軟件(特別是操作系統),而不是硬件。分布式系統可以應用在在不同的平臺上如:Pc、工作站、局域網和廣域網上等。

  簡單來講:

    1 分布式:不同的多臺服務器上面部署不同的服務模塊(工程),他們之間通過Rpc/Rmi之間通信和調用,對外提供服務和組內協作。

    2 集群:不同的多臺服務器上面部署相同的服務模塊,通過分布式調度軟件進行統一的調度,對外提供服務和訪問。
?

?

轉載于:https://www.cnblogs.com/jiangbei/p/7250770.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371596.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371596.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371596.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

隨機森林特征個數mtry matlab,基于隨機森林的特征選擇算法

2.1 算法描述本文提出了一種基于隨機森林的Wrapper特征選擇方法RFFS,利用隨機森林算法的變量重要性度量對特征進行排序,然后采用序列后向搜索方法,每次從特征集合中去掉一個最不重要(重要性得分最小)的特征,逐次進行迭代,并計算分類正確率,最終得到變量個數最少、分類正確率最高…

matlab循環讀取變量,Matlab for 多個變量循環能不能這樣啊 ,求教高手!!!!

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓for a0.003:0.0005:1; b0.002:0.0005:0.9; c0.001:0.0005:0.8;d0.0005:0.0005:0.7;E1a* E_Bone;E2b* E_Bone;E3c* E_Bone;E4d* E_Bone;G1a* G_Bone;G2b* G_Bone;G3c* G_Bone;G4d* G_Bone;%% Integration for cortical bone partsIn…

UVA - 10384 The Wall Pusher(推門游戲)(IDA*)

題意:從起點出發,可向東南西北4個方向走,如果前面沒有墻則可走;如果前面只有一堵墻,則可將墻向前推一格,其余情況不可推動,且不能推動游戲區域邊界上的墻。問走出迷宮的最少步數,輸出…

JavaOne 2012:JavaOne技術主題演講

Mark Reinhold從JavaOne 2012技術主題演講開始。 他說,今年的版本將有所不同,因為它將使用大致相同的示例來說明Java的各個方面,而不是對Java的每個組件進行單獨的單獨介紹。 JavaFX團隊的Richard Bair和Jasper Potts (并與FXExpe…

C語言結構體及函數傳遞數組參數演示樣例

C語言結構體及函數傳遞數組參數演示樣例 注:makeSphere()函數返回Sphere結構體,main函數中。調用makeSphere()函數,傳遞的第一個參數為數組,傳遞的數組作為指針。posted on 2017-07-30 18:42 mthoutai 閱讀(...) 評論(...) 編輯 收…

Maven內部版本號插件–用法示例

假設我們需要向一些工件(jar,war等)添加內部版本號。 在這里,我想演示buildnumber-maven-plugin的用法。 這篇文章基于: http://mojo.codehaus.org/buildnumber-maven-plugin/usage.html http://www.site.lalitbhatt…

Python魔法方法(magic method)細解幾個常用魔法方法(下)

接上文,再介紹最后幾個常用的魔法方法。 關于__dict__: 先上個例子: class Test(object):fly Truedef __init__(self, age):self.age age __dict__魔法方法可以被稱為系統,他是存儲各分層屬性的魔法方法。__dict__中,鍵為屬性名…

AIX下RAC搭建 Oracle10G(六)dbca建庫

AIX下RAC搭建系列 AIX下RAC搭建 Oracle10G(六)dbca建庫 環境 節點 節點1 節點2 小機型號 IBM P-series 630 IBM P-series 630 主機名 AIX203 AIX204 交換機 SAN光纖交換機 存儲 SAN T3存儲 大綱流程例如以下: 第一部分&#xff1…

php string slice,substring()與str.slice()區別

當接收的參數是負數時,slice會將它字符串的長度與對應的負數相加,結果作為參數;substr則僅僅是將第一個參數與字符串長度相加后的結果作為第一個參數;substring則干脆將負參數都直接轉換為0。測試代碼如下:var test h…

JavaOne 2012:掌握Java部署

在吃完一次JavaClass 2012午餐會的意大利經典組合后,我前往希爾頓帝國宴會廳B觀看了演示“掌握Java部署”。 來自Oracle的發言人是Mark Howe和Igor Nekrestyano Howe表示,部署團隊的目標是幫助Java開發人員將其應用程序部署到所選平臺。 他首先討論了“功…

數組刪除奇數編號的數據求最后的元素

//abcd...s 這19個字符循環106次成一個長度2014的字符串&#xff0c;然后刪除第奇數個&#xff0c;得到小串&#xff0c;再刪&#xff0c;最后的字符是&#xff1f; #define _CRT_SECURE_NO_DEPRECATE #include<stdio.h> #include<windows.h> #include<string.…

php 提高吞吐量,如何提高網站的吞吐量

吞吐量定義百科吞吐量是指對網絡、設備、端口、虛電路或其他設施&#xff0c;單位時間內成功地傳送數據的數量(以比特、字節、分組等測量)。以上的定義比較寬泛&#xff0c;定義到網站或者接口的吞吐量是這樣的&#xff1a;吞吐量是指系統在單位時間內處理請求的數量。這里有一…

ubuntu下如何查找某個文件的路徑

1.whereis 文件名 特點:快速,但是是模糊查找,例如 找 #whereis mysql 它會把mysql,mysql.ini,mysql.*所在的目錄都找出來. 2.find / -name 文件名 特點:準確,但速度慢,消耗資源大,例如我想找到PHP.ini的準確位置,就需要用 #find / -name php.ini 3.locate 文件名 強力推薦的方…

事件的學習

1.鼠標單擊事件( onclick &#xff09;: onclick是鼠標單擊事件&#xff0c;當在網頁上單擊鼠標時&#xff0c;就會發生該事件。同時onclick事件調用的程序塊就會被執行&#xff0c;通常與按鈕一起使用。 <!DOCTYPE HTML> <html> <head> <meta http-equiv…

使用您自己的規則在Eclipse中自定義PMD

PMD是非常好的Java代碼掃描程序&#xff0c;可幫助您避免潛在的編程問題。 它可以輕松擴展以滿足您的需求&#xff0c;并且本文將為您帶來與JPA的Enumerated注釋用法相關的自定義PMD規則的簡單示例。 在繼續閱讀之前&#xff0c;您應該檢查我以前的文章之一-JPA-Enumerated def…

切換oracle用戶impdp,Oracle 12c pdb使用expdp/impdp導入導出

12c推出了可插拔數據庫&#xff0c;在一個容器cdb中以多租戶的形式同時存在多個數據庫pdb。在為pdb做數據泵導入導出時和傳統的數據庫有少許不同。1&#xff0c;需要為pdb添加tansnames2&#xff0c;導入導出時需要在userid參數內指定其tansnames的值&#xff0c;比如 useridus…

搭建mysql集群,使用Percona XtraDB Cluster搭建

Percona XtraDB Cluster提供的特性有&#xff1a;1.同步復制&#xff0c;事務要么在所有節點提交或不提交。2.多主復制&#xff0c;可以在任意節點進行寫操作。3.在從服務器上并行應用事件&#xff0c;真正意義上的并行復制。4.節點自動配置。5.數據一致性&#xff0c;不再是異…

使用NoSQL實現實體服務–第4部分:Java EE

現在&#xff0c;我已經準備好了框架式的合同優先型Web服務&#xff0c;并使用Ektorp和CouchDB創建了數據訪問層 &#xff0c;是時候將它們連接到一個可以正常工作的實體服務中了 。 為此&#xff0c;我將使用Java EE和Glassfish 3.1。 值得注意的是&#xff0c;對于他的那種R&…

yii2之DetailView小部件

DetailView小部件用于展示單條數據記錄&#xff0c;可配置屬性很少&#xff0c;使用也很簡單&#xff0c;直接貼代碼&#xff0c;一看就懂&#xff01; yii小部件數據小部件DetailView的使用示例&#xff1a; <? DetailView::widget([model > $user,//模型對象&#xff…

克隆安裝oracle,Oracle 之 Cloning $oracle_home (克隆安裝oracle軟件)

用途&#xff1a;Cloning an Oracle Home &#xff0c; 可以免去多臺機器重復安裝oracle軟件1、停止相關進程[rootnode1 bin]# ./crsctl stop cluster -all2、打包 dbhome_1 目錄[rootnode1 11.2.0]# cd /u01/app/oracle/product/11.2.0/[rootnode1 11.2.0]# tar -zcvpf db_1.b…