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)。
          点击查看
  • 相关阅读:
    NHbiernate 配置
    NHibernate开发入门
    Thread 线程简单例子
    C#中委托和事件
    DataGridView 去掉多余的列
    ASP.NET C# 有程序集加不了解决办法
    oracle“记录被另一个用户锁住”
    Android 控件属性
    Android 入门
    MVC 视频笔记
  • 原文地址:https://www.cnblogs.com/Consola/p/11901957.html
Copyright © 2011-2022 走看看