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”>
<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”
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)登录代理,分别执行读写操作,判断是否真的读写分离

标签