您的位置:首页 > 编程语言 > Java开发

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

2013-04-25 10:41 253 查看
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)登录代理,分别执行读写操作,判断是否真的读写分离

---------------测试中--------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: