zoukankan      html  css  js  c++  java
  • 学习总结

    linux的学习总结

    https://blog.csdn.net/qq_35919588/article/details/80426634

    1,NoSql介绍

    1. NoSql(Not Only Sql):泛指非关系型数据库
    2. 主要是用来处理大型数据:
      1. 举个例子: 比如存放一个员工,员工的信息有很多属性,这些关系需要多个字段多张表进行存储,不如把这些数据存放在一个json字符串中比较方便,知识为了方便查看
      2. 在开发中查询的占比比较大,把一些不经常修改或者是不修改的数据存放在非关系数据库中,查询比较方便
      3. 主要用于大数据中,进行解析分析
    3. 分类:
      1. 键值(Key-Value)存储数据库
        1. 主要使用到hash表,一个特定的值和一个指针指向特定的数据
        2. 优点:  简单易部署
        3. 缺点:  只对部分数据进行查询或者更新的时候,效率就会显的低下
      2. 列存储数据库:
        1. 用来应对分布式存储的海量数据
        2. 价值对存在,就是键对应着多条数据
      3. 文档型数据库:
        1. 查询效率比较高,
        2. 对事物的支持不友好
        3. 比如:json的存储格式
      4. 图形数据库,图片 ,音频,视频,文件服务器:
        1. 使用灵活的图形模型,并且能够扩展到多个服务器上.
        2. NoSql没有标准的查询语言(标准的sql语句), 数据库查询需要制定数据库模型,
        3. 许多nosql数据库都有rest式的数据接口或者查询API
    4. 应用场景:
      1. 1         1、数据模型比较简单;
        2     2、需要灵活性更强的IT系统;
        3     3、对数据库性能要求较高; 
        4     4、不需要高度的数据一致性; nosql 弱化事务 没有事务  当当购物车 
        5     5、对于给定key,比较容易映射复杂值的环境(redis)。
        6     
        点击查看

    2,redis学习总结:

    该笔记借鉴的作者是:

    https://blog.csdn.net/u012562943/article/details/49514341[ 详解 ]

    1.  redis使用C语言写的,开源的,支持网络交互的,基于内存持久化的Key-Value数据库
    2. redis数据结构
      1. 字符串(strings)
      2. 字符串类别(lists)
      3. 字符串集合(sets)
      4. 有序字符串集合(sorted sets)
      5. 哈希(hashes)
    3. redis持久化---两种:
      1. RDB(Redis DataBase):redis数据库
        1. BGSAVE:  建立一个子进程来将磁盘写入快照中
        2. SAVE:  创建快照的同时不会执行其他命令
        3. shutdown:  关闭redis的时候也会执行save命令,阻塞客户端不再执行命令,save之后关闭服务器
        4. 将数据存放在磁盘中
        5. 文件是: .rdb结尾
      2. AOF(Append Only File): 仅附加文件
        1. 将所有的指令存放在文件中,下次直接执行文件中的指令就可以恢复数据
        2. 文件是:  .
      3. 两种方式可以同时使用,redis重启优先会AOF的方式恢复数据,AOF的方式恢复数据完整度高.
      4. 也可以不适用redis,redis就是一个内存数据库;
    4. 持久化配置:
      1. redis.conf配置文件中
        1. appendonly  yes:   开启AOF持久化
        2. 也可以调节AOF日志的记录频率: appendfsync  [options]
          1. always: 每个redis写命令都要同步到硬盘中,严重降低redis速度
          2. everysec:  每秒执行一次同步显式的将多个写命令同步到磁盘中
          3. no:  由操作系统决定何时同步(发生故障时会丢失大量的数据,不推荐)
        3. AOF的重写:
          1. 执行BGREWRITEAOF命令
          2. 或者在配置文件中配置自动重写: auto-aof-rewrite-percentage选项
    5. redis持久化 ----RDB:
      1. 是将redis中某一时刻的数据持久化到磁盘中,用快照的方式持久化,过程如下
        1. 先将数据写入到一个临时文件中,待持久化过程结束,将这个临时文件替换上次持久化好的文件
        2. RDB单独创建一个子进程来持久化,而主进程是不会进行任何IO操作的,确保redis的性能
        3. 优点:  处理大量数据,恢复不是特别重要的数据,RDB方式比AOF更加高效
    6. redis持久化----AOF:
      1. AOF持久化策略默认每秒钟把缓存中的写指令记录到磁盘中一次, redis可以保持很好的处理性能,及时redis故障也只是缺失最后一秒的数据
      2. 如果在追加日志时,恰好遇到磁盘空间满...一些突发情况导致日志写入不完整,  redis提供了redis-check-aof工具,可以进行对日志的修复
      3. 因为采用了追加方式,如果不做任何处理的话,AOF文件越来越大,为此,redis提供了AOF文件重写机制当AOF文件超过阈值时,redis就会启动AOF文件的内容压缩只保留可以恢复数据的最小指令集
        1. 例子: 调用多少次指令就存放多少次指令,这样效率比较低,可以把这些指令存放到一个set集合集合中,过滤掉一些重复的指令,只保留数据最终的存出结果,这就是重写机制的原理
      4. AOF重写时, 任然采用的是先写临时文件,全部完成后再替换的流程;
      5. AOF比较好用的地方:  
        1. 如果说不小心删除了redis中的所有数据,此时可以通过AOF的持久化,暂停redis,将AOF文件指令中的失误指令删除,重启的时候会重新执行AOF文件,这样数据就恢复了,如果说AOF已经被重写了就不能采取上边的操作了
      6. 缺点:在同等数据规模下,AOF文件要比RDB文件的体积大,并且AOF方式的恢复比RDB要慢
      7. 重写AOF文件获取最小指令集:  BFREWRITEAOF
      8. redis中AOF常见的问题:
        1. 1 1.备份被写坏的AOF文件
          2 2.运行redis-check-aof –fix进行修复
          3 3.用diff -u来看下两个文件的差异,确认问题点
          4 4.重启redis,加载修复后的AOF文件
          如果出现了AOF文件写坏
    7. redis持久化----AOF重写
      1. 执行流程:
        1. 重写的时候redis创建一个"重写的子进程",
        2. 这个子进程会读取现有的AOF文件,
        3. 将文件中的指令分析解压并写入到一个临时的文件中.
        4. 此时主进程会将新接收的写指令累计在缓存区中,一遍继续写入到原有的AOF文件中
        5. "重写子进程"完成工作后,会给父进程发一个信号,父进程将会把内存中缓存的指令追加到新AOF中
        6. 追加完成后,redis就会用新AOF文件替换AOF文件之后在有新的写指令追加到新的AOF文件中
      2. 注意: 重写重写没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,替换原有的aof文件,类似快照
      3. aof重新完成后会删除旧的文件,旧的文件体量比较大,可能会导致系统随时挂起
        1. 如何去解决:
        2. 可以配置执行重写的频率,根据文件的大小或者命令的条数达到多少来执行重写
    8. 主从用法(待续):
    9.   

    Redis①和memcahed②对比:

    1. 共同点:
      1. 底层都是用C语言编写,都是基于key-value内存存储
    2. 不同点:
      1. ①支持多种数据类型,比如:String,List,set,zset,hash
      2. ②支持简单的数据类型, 比如:String,Object
      3. ①最大存储1G
      4. ②默认存储不超过一兆
      5. ①存储的数据可以持久化
      6. ②存储的数据不能持久化,断点就会丢失
      7. ①单线程,并发串行执行,将单进程单线程效率发挥到最大
      8. ②多线程,支持多线程并发访问, 数据安全 锁
      9. ①3.0版本后自身支持集群
      10. ②自身不支持集群(使用中间件)

        

    3,mycat学习总结(简单学习):

    https://www.cnblogs.com/fxwl/p/7990906.html [详解](借鉴学习的网站)

    1. 阿里开源的管理分布式数据库的中间件:
    2. 主要是做到读写分离

    1,主要由三个配置文件组成:

    server.xml:  Mycat的配置文件, 设置账号, 参数等

    schema.xml:  Mycat对饮的物理数据库和数据库表的配置

    rule.xml:  Mycat分片(分库分表)规则

    1. server.xml:
      1. user标签:
        1. 1 <user name="root">
          2 <property name="password"></property>
          3 <property name="schemas">TESTDB</property>
          4 </user>
          点击查看
        2. user用户配置节点
        3. schemas数据库名,这里的数据库会和schema.xml中的配置关联, 多个用逗号隔开
      2. privileges标签:
        1. 1 <!-- 可以有多个这种标签的配置  -->
          2 <privileges check="false">
          3 </privileges>
          点击查看
        2. check表示是否开通DML权限,默认关闭
        3. dml顺序说明: insert,update,select, delete
        4. 举个例子:
        5. 1 <schema name="db1" dml="0110" >
          2 <table name="tb01" dml="0000"></table>
          3 <table name="tb02" dml="1111"></table>
          4 </schema>
          5 
          6 db1的权限是update,select。
          7 tb01的权限是啥都不能干。
          8 tb02的权限是insert,update,select,delete。
          9 其他表默认是udpate,select。
          点击查看
      3. system标签: --------所有的配置都适合系统配置有关的
        1.  1 <property name="charset">utf8</property>
           2 字符集
           3 <property name="processors">1</property>
           4 处理线程数量,默认是cpu数量。
           5 <property name="bindIp">0.0.0.0</property>
           6 mycat 服务监听的 IP 地址,默认值为 0.0.0.0。
           7 
           8 <property name="serverPort">8066</property>
           9 定义 mycat 的使用端口,默认值为 8066。
          10 
          11 <property name="managerPort">9066</property>
          12 定义 mycat 的管理端口,默认值为 9066。
          点击查看
    2. schema.xml:
      1. schema: 设局库设置,此数据库为逻辑数据库,和server.xml总的schema对应
      2. dataNode分片信息,也就是分库相关配置
      3. dataHost:  物理数据库,真正存储数据的数据库
      4. schema标签:
        1. 1 <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="10">
          2 </schema>
          3 schema标签用来定义mycat实例中的逻辑库,mycat可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用schema标签来划分这些不同的逻辑库
          4 如果不配置schema标签,所有表的配置会属于同一个默认的逻辑库。逻辑库的概念和MySql的database的概念一样,我们在查询两个不同逻辑库中的表的时候,需要切换到该逻辑库下进行查询。
          5 
          6 --name 逻辑数据库名,与server.xml中的schema对应
          7 --checkSQLschema 数据库前缀相关设置,当该值为true时,例如我们执行语句select * from TESTDB.company 。mycat会把语句修改为 select * from company 去掉TESTDB。
          8 --sqlMaxLimit 当该值设置为某个数值时,每条执行的sql语句,如果没有加上limit语句,Mycat会自动加上对应的值。不写的话,默认返回所有的值。
          9 需要注意的是,如果运行的schema为非拆分库的,那么该属性不会生效。需要自己sql语句加limit。
          点击查看
      5. dataNode标签:
        1. 1 <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="10">
          2 </schema>
          3 schema标签用来定义mycat实例中的逻辑库,mycat可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用schema标签来划分这些不同的逻辑库
          4 如果不配置schema标签,所有表的配置会属于同一个默认的逻辑库。逻辑库的概念和MySql的database的概念一样,我们在查询两个不同逻辑库中的表的时候,需要切换到该逻辑库下进行查询。
          5 
          6 --name 逻辑数据库名,与server.xml中的schema对应
          7 --checkSQLschema 数据库前缀相关设置,当该值为true时,例如我们执行语句select * from TESTDB.company 。mycat会把语句修改为 select * from company 去掉TESTDB。
          8 --sqlMaxLimit 当该值设置为某个数值时,每条执行的sql语句,如果没有加上limit语句,Mycat会自动加上对应的值。不写的话,默认返回所有的值。
          9 需要注意的是,如果运行的schema为非拆分库的,那么该属性不会生效。需要自己sql语句加limit。
          点击查看
      6. dataHost标签:
        1.  1 这个标签直接定义了具体数据库实例,读写分离配置和心跳语句。
           2 <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
           3 <heartbeat>select user()</heartbeat>
           4 <writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="123456">
           5 <readHost host="hostS1" url="192.168.1.101:3306" user="root" password="123456" />
           6 </writeHost>
           7 </dataHost>
           8 --name 唯一标示dataHost标签,供上层使用
           9 --maxCon 指定每个读写实例连接池的最大连接。
          10 --minCon 指定每个读写实例连接池的最小连接,初始化连接池的大小
          11 --balance 负载均称类型
          12 balance="0":不开启读写分离机制,所有读操作都发送到当前可用的writeHost上
          13 balance="1":全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1-S1,M2-S2 并且M1 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
          14 balance="2":所有读操作都随机的在writeHost、readHost上分发
          15 balance="3":所有读请求随机的分发到writeHst对应的readHost执行,writeHost不负担读写压力。(1.4之后版本有)
          16 --writeType 负载均衡类型。
          17 writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
          18 writeType="1",所有写操作都随机的发送到配置的 writeHost。1.5以后版本废弃不推荐。
          19 --switchType -1不自动切换
          20 1 默认值 自动切换
          21 2 基于MySql主从同步的状态决定是否切换心跳语句为 show slave status
          22 3 基于mysql galary cluster 的切换机制(适合集群)1.4.1 心跳语句为 show status like 'wsrep%'
          23 --dbType 指定后端链接的数据库类型目前支持二进制的mysql协议,还有其他使用jdbc链接的数据库,例如:mongodb,oracle,spark等
          24 --dbDriver 指定连接后段数据库使用的driver,目前可选的值有native和JDBC。使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb,其他类型的则需要使用JDBC驱动来支持。
          25 如果使用JDBC的话需要符合JDBC4标准的驱动jar 放到mycatlib目录下,并检查驱动jar包中包括如下目录结构文件 META-INFservicesjava.sql.Driver。 在这个文件写上具体的driver类名,例如com.mysql.jdbc.Driver
          26 writeHost readHost指定后端数据库的相关配置给mycat,用于实例化后端连接池。
          27 --tempReadHostAvailable
          28 如果配置了这个属性 writeHost 下面的 readHost 仍旧可用,默认 0 可配置(0、1)。
          点击查看
  • 相关阅读:
    leetcode教程系列——Binary Tree
    《Ranked List Loss for Deep Metric Learning》CVPR 2019
    《Domain Agnostic Learning with Disentangled Representations》ICML 2019
    Pytorch从0开始实现YOLO V3指南 part5——设计输入和输出的流程
    Pytorch从0开始实现YOLO V3指南 part4——置信度阈值和非极大值抑制
    Pytorch从0开始实现YOLO V3指南 part3——实现网络前向传播
    Pytorch从0开始实现YOLO V3指南 part2——搭建网络结构层
    Pytorch从0开始实现YOLO V3指南 part1——理解YOLO的工作
    让我佩服的人生 文章
    win8.1配置cordova+ionic等一系列东西
  • 原文地址:https://www.cnblogs.com/Consola/p/11901957.html
Copyright © 2011-2022 走看看