java高级工程师--------nosql和关系型数据库的重点知识

  • nosql和关系型数据库比较?

优点:

1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜

2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库

3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型

4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难

缺点:

1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。

2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本

3)不提供关系型数据库对事物的处理

  • redis的概念描述和redis结合spring的使用心得?

1)下载spring-date-redis包

2)配置Application-redis.xml配置文件

<!-- 加载redis的配置属性文件             -->

<context:property-placeholder location="classpath:redis.properties" />
<!-- 配置redis对象线程池        -->
    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="${redis.maxIdle}"></property>
        <property name="maxActive" value="${redis.maxActive}"></property>
        <property name="maxWait" value="${redis.maxWait}"></property>
    </bean>

<!-- 配置redis连接工厂容器  -->
    <bean id="jedisConnectionFactory"
        class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
        p:use-pool="true" p:host-name="${redis.host}" p:port="${redis.port}" p:pool-config-ref=
        "poolConfig"/>
<!-- 创建一个redis模板类用于对redis的CURD      -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"
        p:connection-factory-ref="jedisConnectionFactory" />
3)dao层中通过redisTemplate对redis的CURD

........

//存储数据到redis      删除connection.del    修改connection.set     查找connection.exists(key) 然后 connection.get()

public void save(){

redisTemplate.execute(new  callBack<Object>(){

      @override

    public Object   doInRedis(Connecttion connection){

connection.set(

redisTemplate.getSerializer.serialize(用户id),

redisTemplate.getSerializer.serialize(用户名)

);

return null;


}


}

)

}


4)对于redis自身配置参数的使用了解  redis/etc/redis.conf            


save *  *:第一个*表示多长时间,第二个*表示多少次写操作,就是一定时间执行多少次写操作即保存快照

appendonly:开启的话每次会记录一条日志

appendfsync:该参数就是控制系统通过日志向数据库持久化数据的周期,有每秒同步、每次写都强制同步、不调用等待系统自己同步

  • redis的快照方式和基于语句追加aof两种持久化方式

快照方式:当开启快照方式时,系统会根据redis.conf配置文件中得save 去判断一定时间执行多少次写操作,符合条件的则保存成快照,该持久化的主要缺点是定时快照只是代表一段时间内的内存映像,所以系统重启会丢失上次快照与重启之间所有的数据。优点是存储快,恢复也快

基于语句追加:每条会使Redis内存数据发生改变的命令都会追加到一个log文件中,也就是说这个log文件就是Redis的持久化数据。

aof的方式的主要缺点是追加log文件可能导致体积过大,当系统重启恢复数据时如果是aof的方式则加载数据会非常慢,几十G的数据可能需要几小 时才能加载完,当然这个耗时并不是因为磁盘文件读取速度慢,而是由于读取的所有命令都要在内存中执行一遍。另外由于每条命令都要写log,所以使用aof 的方式,Redis的读写性能也会有所下降。

比较:

相比于aof快照的特点是速度快,恢复的速度也快。但是宕机的时候丢失的数据相对多一点。

当aof和快照同时开启的时候。

数据恢复时会首先使用 aof的文件来恢复,恢复失败的时候再去考虑快照。

 





  • 关系型数据库中如何进行数据库水平分割,垂直分割

数据库水平分割:是指当数据库当数据记录条数特别多,就可以考虑分表的方式进行数据库分割,典型案例是电信话单按月分割存放。主要过程要重复访问部分行时,最好将被重复访问的这些行单独形成子集表(冗余储存),这在不考虑磁盘空间开销时显得十分重要,缺点是在分割表以后,增加了维护难度,要用触发器立即更新、或存储过程或应用代码批量更新,这也会增加额外的磁盘I/O开销。
水平分割会给应用增加复杂度,它通常在查询时需要多个表名,查询所有数据需要union操作。

数据垂直分割:当主要过程反复访问部分列时,最好将这部分被频繁访问的列数据单独存为一个子集表(冗余储存),这在不考虑磁盘空间开销时显得十分重要;但这增加了重叠列的维护难度,要用触发器立即更新、或存储过程或应用代码批量更新,这也会增加额外的磁盘I/O开销



  • 关系型数据库中如何进行数据库读写分离技术

1)配置主从复制

2)安装mysql-proxy代理

3)测试主服务创建数据库、表、插入记录,从服务器也相应执行这些操作

4)登录代理,分别执行读写操作,判断是否真的读写分离

---------------测试中--------------------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值