No sql培训笔记

来源:互联网 发布:美工的素材网站 编辑:程序博客网 时间:2024/04/26 02:10

No sql培训笔记

---------------------------------------------------------------------------

淘宝

基本信息->关系型数据库(mysql/oracle)
图片->分布式文件系统(GFS,hdfs,TFS,NFS,EXT4)
描述->文档数据库(Mongodb,CouchDB..)
关键字-》搜索引擎(Isearch..)
评价-》文档数据库
热点数据-》内存-》分布式内存数据库(redis,
根据数据属性不同,会引入不同的数据源
大部分数据源属于NOSQL的范围---Not only sqls


一般的公司会在这些数据源上面用一个数据平台封装,使得这些数据源不可见,APP是在数据平台上使用。


关系型数据库 ACID---》事务
考虑:13年的双11-》第一分钟的的交易量1000万
下单--》提高下的TPS-》数据库存储架构
要提高关系型数据库的TPS--》拆分


下单业务-》买家产生订单记录
卖家产生订单记录
减少库存
发短信,发旺旺
统计销售量
最核心的是:买家下订单
卖家查看订单
卖家修改价格
买家卖家要解耦不能用分布式事务


关系型数据库走向分布式的过程:
   切片:不同数据源数据是不一样的
垂直拆分--》按功能模块拆分
读写分离--》master/slave
水平拆分-》按记录拆分-》分表,分库(区)分表
淘宝订单:16库,每库64表,1024表
   复制:不同数据源中的数据是不一样的


NOSQL
1.关注性能,降低ACID要求,分类细致,某一种产品关注某方面的需求
2.NOSQL的分类。
2.1key/value结构。 内存数据库。 redis/memcached
2.2文档数据库。(bson格式)Mongodb
2.3列数据库。 (name/value格式) Cassandra,Hbase
2.4图数据库。(放的是关系)FlockDB,Neo4J
3.数据模型
---》面向聚合的数据模型
---》图数据库除外
4.分布式模型
4.1--》一致性
4.2--》CAP
      三者只能选其二
C->强一致性
A->高可用性
P->分布式
    互联网应用 AP + BASE
4.3ebay竞拍
--->最后几秒是高并发的
--->如何在最后几秒不阻塞任何人的出价
4.4读写规划
--》一致性的hash原理
--》WRN




key/value之  ------》Memcached---》c实现
1.特点
1.1内存存储
对内存要求高,对CPU要求低。部署的时候和内存要求低,CPU要求高的应用部署在一起。
1.2集中式的缓存
Memcached每台实例都是独立的,是集中式的。
实例之间不通讯。
单点问题---》断电,重启等都会使得数据丢失。
分布式是要把客户端包含进来,通过客户端来控制各个实例。
横向扩展也是由客户端来控制。
1.3socket通讯
---》只要支持socket通讯的语言,都可以作为它的客户端
---》客户端如果存对象,对象需要序列化
---》socket通讯支持的NIO性能非常好
1.4内存分配机制特殊
---》预分配
---》懒删除
---》最大的value只能1M
1.5缓存机制简单
key/value 就是c写的hashmap结构
1.6几个应用点
小对象的缓存,session的缓存(MSM-》Memcached session management),token信息的缓存,数据库的前端缓存


2.基本操作
启动--》./memcached -d -m 512 -u root
./memcached -h    ---判断是否链接成功
连接--》telnet 127.0.0.1 11211  ---->放在防火墙的后面
记住两个重要的启动参数
-n ------>内存预先分配,每块内存的大小划分和n参数有关
-f ------>不同slab递增的规则

内存分配的机制
启动命令可以添加-v 或者-vv 或者 -vvv
slab  --->每个1M
item/chunk  --》-n参数和-f参数来调节
page

不需要频繁的分配内存,回收内存
避免了内存碎片



set key 类型(数字) 有效时间 长度 回车
敲入内容 回车
add 添加不存在的key,如果key存在就会通知不成功
replace替换
get  普通查询
gets 带版本号查询
cas 命令  修改的时候带版本号
incr/desc/delete
stats
stats settings
stats items
stats size
stats slabes
version
flush_all



3.分布式
3.1一致性的hash原理
3.2客户端来操作集群
c的客户端---》libMemcached 包装了一致性hash算法
新浪--》Memcachedb 做了持久化并且提供了一致性算法
java客户端
----》memcached client for java jar包
     基本使用
      一些缺点---》初始化是硬编码--》是否可以修改成配置文件的方式
       --->客户端读取数据是单字节读取---》改造成批量读取
       ---》线程处理方式是java5之前---》改造成java5之后的线程处理方式
       --->如果自己使用Memcached缓存----》隔离缓存引用---》提炼结构做适配器隔离


支持了一致性的hash


----》xMemecached
--->一致性Hash
---》修改了读取方式,线程方式
-----》spyMemcached
--->一致性Hash
---》修改了读取方式,线程方式
--->不太稳定
------》淘宝客户端
---》包装了官方提供的memcached client for jav
---》接口提炼
---》以配置代替硬接口
---》修改了线程方式和单字节读取
----》做了cluster备份
----》做了本地缓存,减轻了Memcached的压力








key/value之  ------》redis
注意版本的问题
1.安装启动
安装之后---》redis.conf文件  有些windows版本可能没有这个文件,需要单独下载下来
启动 进入src ./redis-server radis.conf(位置到文件)
./redis-cli


2.数据类型和使用场景
key/value  ---->value的类型更加丰富
2.1string
2.2list
2.3hashes
2.4set
2.5sorted-set
考虑下服务器提供给我的一些运算操作


3.丰富的key命令操作
redis有数据库的概念,默认数据库是0,通过select 1打开1数据库


4.reids支持事务
redis的事务和关系型数据库的事务不是一回事


5.redis支持持久化---》持久化对性能会有很大的损耗,新的版本逐渐在慢慢改进
rdb持久化  ---》产生rdb文件
----》save 900 1
     save 300 10
     save 60 10000
----->优缺点
在时间间隔内,如果宕机,会丢失部分数据
当数据很大时,写rdb会导致服务器停止服务
aof持久化  ---》记录的是日志
redis是通过配置文件来支持持久化--->redis.conf文件
---->配置
----》优缺点

如果只是打开rdb持久化,重启之后会通过rdb文件恢复数据
如果只是打开aof持久化,重启之后会通过aof文件恢复数据
如果即打开了rdb,又打开了aof持久化,redis会通过aof恢复数据
也可以不做持久化




6.radius支持master/slave机制
输入命令:slaveof masterip masterport,重启之后必须重新配置
通过配置文件:在slave实例的配置文件中配置即可
了解 复制的过程
复制的缺陷(注意版本,新版本已经改进)
没有增量复制的概念
可以通过aof文件模拟这样的概念完成增量复制
可以通过多写的方式完成,一致性要求高
新版本已经解决这个问题
读写分离
------->分布式环境会有一些中间件的出现
-----》数据切分及整合的中间件
-----》mysqlProxy
----->amoeba for mysql(alandin,mongodB)
----->考虑:是否要增加代理层(中间件---》twemproxy)
     把集群对应用透明
-----》高可用
     master宕机之后,slave自动升级为master
     redis自动支持该功能----》切换比较慢
     通过keepalived实现快速切换
-----》master开启持久化的对性能影响比较大
      master不开启持久化,而在slave上做持久话,提高Master的性能
-----》在线扩容
      在一台机器上部署多个实例
      当内存不够时,加机器安装实例,作为之前多个实例中的slave




7.redis.conf文件中的配置信息
8.redis服务器管理
所有的配置信息,在redis通过命令在运行时刻进行干预
动态修改配置信息 config get
config set
9.redis内存优化
-----》hashes类型,list类型,sets中放的是int类型
redis可以对他们进行适当的编码处理,可以让空间节约,甚至让空间节约9/10.
10.redis客户端
java客户端 jedis
11 redis3.0版本实现了cluster
   ------>集群完全自动管理




文档数据库之Mongodb
1.特点
1.1数据格式是bson格式-----》二进制的json
1.2支持条件查询,支持索引
1.3支持存储过程,支持MapReduce
2.基本操作
概念:数据库(dbs)---》数据库
     集合(collections)-----》表
     文档(document)-----》记录


基本命令:
     启动命令Mongod --depath=目录
                连接 mongo
     show dbs;
     use 数据库
     show collections;
基本结构:在数据目录下 有数据文件
其它基本操作命令:
导入导出工具:
在安装目录的\bin
支持存储过程,用JS语法
3.Capped Collection

4.导入文件 mongofiles
5.MapReduce
6.Mongodb支持索引
创建索引
查询时可以查看执行计划
思考---》 sql调优
7.客户端
---》Mongodb client for java
--->spring-data框架
spring-data-for Mongodb
spring-data-for redis
spring-data-for hbase




列数据库之cassandra
--->简单认识数据结构


cedar_c@163.com






0 0