学习总结

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)。
        点击查看
原文地址:https://www.cnblogs.com/Consola/p/11901957.html