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