nosql類型的數據庫:mongodb、Redis、Memcached的優化點

---概念

非關係型數據庫也叫Nosql數據庫,關係型數據庫通過外鍵關聯來建立表與表之間的關係,而非關係型數據庫通常指數據以對象的形式存儲在數據庫中,而對象之間的關係通過每個對象自身的屬性來決定。例如,以鍵值對key-value存儲,且結構不固定,每一個元組可以有不一樣的字段,每個元組可以根據需要增加一些自己的鍵值對,這樣就不會侷限於固定的結構,可以減少一些時間和空間的開銷。而且僅需要根據key取出相應的value就可以完成查詢,性能方面較關係型數據庫有很大提升。

---特點

       模式自由

      不需要定義表結構,數據表中的每條記錄都可能有不同的屬性和格式。

       逆規範化

      不遵循範式要求,去掉完整性約束,減少表之間的依賴

       彈性可擴展

      可在系統運行的過程中,動態的刪除和增加節點。

       多副本異步複製

      數據快速寫入一個節點,其餘節點通過讀取寫入的日誌來實現異步複製。

       弱事務

      不能完全滿足事務的ACID特性,但是可以保證事務的最終一致性。

---什麼時候用nosql非關係型數據庫

       數據庫表schema經常變化

       數據庫表字段是複雜數據類型

       高併發數據庫請求

       海量數據的分佈式存儲

 

以下彙總了3nosql類型的數據庫的優化

      第一、  mongodb

mongodb面向集合存儲,易存儲對象類型的數據,適合大數據量的存儲,主要解決海量數據的訪問效率問題,依賴操作系統 VM 做內存管理,吃內存也比較厲害,服務最好不要和別的服務在一起mongoDB 不支持事務。

Linux下可以直接使用mongo進入mongod命令行

 

優化的點:

1,語句這塊的優化

    a.    可以通過記錄profile來找到執行時間長的語句

    (PSMongodbprofile就和mysql的慢查詢類似,用於記錄執行時間超過多少的語句。)

       db.getProfilingLevel()          # 獲取profile級別

       db.setProfilingLevel(1,2000)# 設置profile級別

       profile級別有三種:

      0:不開啓

      1:記錄慢命令,默認爲大於100ms

      2:記錄所有命令

       查詢profile記錄

      db.system.profile.find();

    b.    找到執行時間長的語句後,explain解析這條語句,可以看到它有沒有使用索引,使用了什麼索引

        語句爲:db.collection.find({xx:xx}).explain();

wKioL1e9wV_BfoVcAAAXd0Aq03k980.png-wh_50

    c.通過explain的結果來優化查詢語句

2,連接數

      如果大併發下,連接數不夠,會導致程序連接不上mongodb,需要調大連接數

3,內存大點,或者把磁盤換成SSD

 

 可視化工具:mongoVUE      圖形化界面監控:天兔  lepus

 wKiom1e9wV_yC5zOAABYl29lzBE203.png-wh_50

wKiom1e9wV6QrdurAACwMpvYU7g432.png-wh_50

 

     第二、   Redis

redis是一個開源的、使用C語言編寫的、支持網絡交互的、可基於內存也可持久化的Key-Value數據庫。Redismongodb的區別是redis數據全部存儲在內存中,使用磁盤僅用於數據的持久化,而mongodb數據是存儲在磁盤上。

 

優化的點: 

1,連接數

2,緩存命中率

    命中次數 / (命中次數 + 未命中次數)= 命中率

        命中率低的原因

        1key失效時間過短

        2,內存設置的過小,導致內存中數據存滿,redis自己清理了一些key,再去用key的時候,就找不到了

      命令監控:(info命令) 

 

wKioL1e9vxawEdKjAABXokHeAT0627.jpg-wh_50

 

 

 

     可視化工具:RedisDesktopManager   圖形化界面監控:天兔  lepus          

wKioL1e9wV2yYpOwAABHKEzF5fI083.jpg-wh_50                  

   第三、   Memcached

Memcached 是一個高性能的分佈式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而大大提高讀取速度。

優化的點:

           1,連接數

           2,緩存命中率

命中次數 / (命中次數 + 未命中次數)= 命中率

             命中率低的原因

             1key失效時間過短

             2,內存設置的過小,導致內存中數據存滿,redis自己清理了一些key,再去用key的時候,就找不到了

            命令監控:(stats命令)

            圖形化界面監控:windows下修改phpmemcache.php(然後放到apachehtdocs工作目錄下,如果是lampp的話:/opt/lampp/htdocs)      

wKiom1e9vxqSfc1pAACBfrtVdFc816.png-wh_50

然後訪問:http://IP地址:11211/mem/phpmemcache.php    root   root/123456(根據自己的設置)

wKioL1e9vxzDcoVDAADm_4zEUa4766.jpg-wh_50

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章