• 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 allselectinsertupdatedelete|权限 on tables|表名字 to userspublic|用户名\ 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
  • 相关阅读:
    二分查找
    215. Kth Largest Element in an Array
    myeclipse导入web项目报错解决
    oracle替换字段中的空格
    sql变更表名
    cmd文件操作--- attrib命令
    oracle导入dmp文件
    java.lang.IllegalArgumentException: Page directive: invalid value for import 异常解决
    JDK_jvisualvm访问远程weblogic服务
    页面传值中文编码
  • 原文地址:https://www.cnblogs.com/Guishuzhe/p/9824957.html
走看看 - 开发者的网上家园