Pyhton全棧的知識點(6)

1.MySQL數據庫
    - 引擎:
    - innodb
        - 支持事務
        -- 行鎖
           - 表鎖
        - 示例:
            - 終端:
            begin;     加鎖
            select xx from xx for update;
            commit;    提交
            - pymysql
            cursor.execute('select * from xx for update')
            - django
            with trancation.automic():
            models.User.objects.all().for_update()
    - mysaim
        - 不支持事務
        -- 表鎖 
        - 查詢快

2.數據庫受權
    grant all\select\insert\update\delete|權限 on tables|表名字 to users\public|用戶名\\ with grant option|可繼承
    GRANT <權限>[,<權限>]...[ON <對象類型> <對象名>]TO <用戶>[,<用戶>]...[WITH GRANT OPTION];        
        
3.瞭解:https://www.cnblogs.com/wupeiqi/articles/5713323.html
    - 視圖  (虛擬表)
    - 存儲過程   (儲存語句放在數據庫,下次用直接調用)
    - 觸發器    (自動觸發日誌,寫下記錄)
    - 函數        (數據庫函數)
        select max(id) from tb group by xid;
        
4.索引 
    索引做用:加速查找+約束。
    索引種類:
        - 主鍵索引:加速查找、不重複、非空
        - 惟一索引:加速查找、不重複、只能有一個能夠爲空
        - 普通索引:加速查找
        - 聯合索引:加速查找
        - 聯合惟一索引:加速查找、不重複
            PS:聯合索引遵循最左前綴原則。
                
                id   name   pwd   email 
            命中索引
                select * from tb where name='x'
                select * from tb where name='x' and pwd='123'
                select * from tb where name='x' and pwd='123' and email='xs'
            沒法命中索引
                - like
                - 函數 
                - >
                - !=
                - group by 
                - or         
    名詞:
        - 覆蓋索引:在索引文件中就能夠把想要的數據獲得,不須要再去物理表中查詢
        - 視圖,虛擬表。放在數據庫
        - 觸發器,在對某張表進行:增、刪、改的先後自定義操做。
        - 函數,對數據中的值進行操做。
        - 索引合併:使用多個單列索引去查找數據。
        https://www.cnblogs.com/wupeiqi/articles/5716963.html

5.索引實現原理
    - B+ tree    指數增加(使用最多)
    - hash       較少使用

6.優化方案:
    - 不使用select * 
    - 短索引 
    - 使用鏈表(join)代替子查詢
    - 固定長度在前面
    - 分庫分表
        - 水平分表
        - 垂直分表
    - 組合索引 > 索引合併
    - 內存代替鏈表
        - Djnago裏面ORM字段(choices)
    - 查詢一條數據時用limit 
    - 讀寫分離(主從)
    - 分頁 
    - 緩存(熱點數據放redis)
        
        注意:char    佔用固定長度字節
              varchar   佔用自己大小字節
    - 對於不肯定的sql語句先執行  --  explain select * from tb; 
    - 查詢時的訪問方式,性能:all < index < range < index_merge < ref_or_null < ref < eq_ref < system/const

7.何時須要加鎖?
    - 計數
    - 應用場景:
        - 商品數量

8.慢日誌?
    - 查詢時間久
    - 未命中索引        
    修改配置:
        slow_query_log = ON/OFF                            是否開啓慢日誌記錄
        long_query_time = 2                              時間限制,超過此時間,則記錄
        slow_query_log_file = /usr/slow.log        日誌文件
        log_queries_not_using_indexes = ON/OFF     爲使用索引的搜索是否記錄
https://blog.csdn.net/jy0902/article/details/19248299   安裝redis報錯
http://www.cnblogs.com/wupeiqi

1. redis是什麼?   (作內存管理)
    - 配置文件:bind 0.0.0.0     port:6379     require:密碼
    - 是否能夠持久化?AOF(快照)、RDB(記錄歷史記錄)
    - 單進程、單線程
    - 5大數據類型(字符串,哈希/散列/字典,列表,集合,有序集合)

2.使用鏈接池
    -本質,維護一個已經和服務端連接成功的socket(列表)
    -之後再次發送數據時,直接獲取一個socket,直接send數據

3.若是redis的key對應的字典中有1000w條數據,請打印全部數據
    -hgetall("key")      獲取全部數據服務器內存沒法承受,爆棧
    -hget("key", "v1")      重複操做多,頻繁
    -hscan_iter("key", count=100)    設置獲取數據條目,可行操做

4.redis操做時,只有第一層value支持:list,dict....

5.Django應用:
    -自定義使用redis
    -使用第三方組件
    -全棧緩存
    -單視圖
    -局部頁面


補充:rest framework框架訪問頻率限制推薦放到 redis/memecached
相關文章
相關標籤/搜索