Nosql(非关系型数据库)

Nosql(非关系型数据库)

什么是nosql

1):NoSQL(NoSQL = Not Only SQL ),直译为“不仅仅是SQL‘’泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。当数据多起来,有些关系型数据往往不能满足其持久化保存数据的目的,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

 

怎么用nosql

 

为什么用nosql

Nosql的优势

易扩展:

NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。

大数据量高性能:

NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了。

多样灵活的数据模型:

NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦。

传统RDBMS VS NOSQL的对比

RDBMS
-
高度组织化结构化数据
- 结构化查询语言(SQL)
- 数据和关系都存储在单独的表中。
- 数据操纵语言,数据定义语言
- 严格的一致性
- 基础事务

 

NoSQL
-
代表着不仅仅是SQL
- 没有声明性查询语言
- 没有预定义的模式
-键 - 值对存储,列存储,文档存储,图形数据库
- 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- CAP定理
- 高性能,高可用性和可伸缩性

 

为什么要用nosql

1): NoSQL数据库的出现,弥补了关系数据:

比如MySQL在有些方面的不足(大部分的MySQL都应该是IO密集型的,事实上,如果你的MySQL是个CPU密集型的话,那么很可能你的MySQL设计得有性能问题,需要优化了。大数据量高并发环境下的MySQL应用开发越来越复杂,也越来越具有技术挑战性。分表分库的规则把握都是需要经验的。分库分表的子库到一定阶段又面临扩展问题。还有就是需求的变更,可能又需要一种新的分库方式。MySQL数据库也经常存储一些大文本字段,导致数据库表非常的大,在做数据库恢复的时候就导致非常的慢,不容易快速恢复数据库。比如10004KB大小的文本就接近40GB的大小,如果能把这些数据从MySQL省去,MySQL将变得非常的小。关系数据库很强大,但是它并不能很好的应付所有的应用场景。还有mySQL的扩展性差(也可通过复杂技术实现解决)

在某些方面能极大的节省开发成本和维护成本。MySQLNoSQL都有各自的特点和使用的应用场景,两者的紧密结合将会给web2.0的数据库发展带来新的思路。让关系数据库关注在关系上,NoSQL关注在存储上。

 

Nosql基本操作

1): nosql的分类:

              列存储:Hbase、Cassandra、Hypertable

 

              文档存储:MongoDB、CouchDB

 

              k-v存储:TokyoCabinet、BerkeleyDB、Memcache、redis

 

              对象(图)存储:Neo4J、Versant

 

              Xml数据库:BerkeleyDB、BaseX

2):redis

下面主要讲redis(现阶段大多数使用率最多)

什么是redis

redis是一个key-value存储系统。和Memcached类似,redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系型数据库起到很好的补充作用,它支持存储的value类型相对更多,包括string(字符串)list(链表)set(集合)zset(有序集合)。这些数据类型都支持push/popadd/remove及取交集并集和差集及更丰富的操作。

 

Redis的优点

  1. 性能极高 – Redis能读的速度是110000/s,写的速度是81000/s
  2. 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets Ordered Sets 数据类型操作。
  3. 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTIEXEC指令包起来。
  4. 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

常见的redis五种数据类似操作命令

Redis的五种基本数据类型

  1. String: 字符串
  2. Hash: 散列
  3. List: 列表
  4. Set: 集合
  5. Sorted Set: 有序集合

 

字符串的命令:

      

set key value         # 保存一个键值对

       get key                 # 通过key来去对应的值

       mset key1 v1 k2 v2...    # 一次保存多个键值对

       mget k1 k2 k3              # 通过key来去对应的值

       setex key second value # 保存一个键值对,同时规定它的失效时间(second)

 

       incr key         # 对key对应值 加一,注意,只对数据字符串有效

       incrby key value    # 对key对应值 加value

 

       decr key        # 对key对应值 减一,注意,只对数据字符串有效

       decrby key value   # 对key对应值 减value

      

       strlen key              # 求key对应值的长度

       append key value  # 对key对应的值进行新的拼接

       setnx key vaule            # 如果存在key,则无效,如果不存在,则保存该键值对

 

 

hash命令:主要用来存储对象的

       u1 = User(1, "liujianhong", 16, "zhengzhou")

       u2 = User(2, "liusong", 26, "xinyang")

      

       hset key field value      # 存储key对应属性field的值

       hget key field        # 获取key对应属性field的值

       hmset key f1 v1 f2 v2...# 存储key对应多个属性field的值

       hmget key f1 f2...  # 获取key对应多个属性field的值

       hgetall key            # 获取key对象所有属性和对应的值

       hkeys key             # 获取key对象的所有属性的名称

       hvals key       # 获取key对象的所有属性的值

       hlen key        # 获取key的所有属性个数

       hstrlen    key field  # 获取key对应的属性的值的长度

       hexists key field     # 判断某个对象是否存在该属性

       hsetnx key field value   # 判断对象的属性是否存在,存在则不操作,不存在,则保存

       hincrby key field value  # 对对象的属性(必须是数字字符串)进行加法运算

 

 

 

key操作

       keys *                   # 查询当前数据库中所有key的个数

       exists key              # 判断某个key是否存在在当前数据库

       del key                 # 删除对应的key

       type key        # 判断key的类型

       expire key second value      # 为一个存在的key设置一个失效时间

       ttl key                   # 查看key的失效时间 -2表示不存在 -1 永久存在 正数表示存活的秒数

       move key db         # 移动key到db数据库中

       select index           # 切换数据库

       info [xxxx]             # 查看当前数据库的状态

       dbsize                   # 返回当前数据库的key的个数

       flushdb                 # 删除当前数据库的所有数据

       flushall           # 删除所有数据库的所有数据

 

 

 

list命令

       lpush key v1 v2...   # 从左侧将值放入list中

       rpush key v1 v2...  # 从右侧将值放入list中

       lrange key start end     # 循环显示list

       linsert key b|a piovt v   # 将值插入到对应的位置

       lpop key        # 从左侧删除第一个元素

       rpop key        # 从右侧删除最后一个元素

       llen key          # 获取list的长度

       ltrim key start stop # 切割列表

       lindex key index    # 获取索引位对应的元素

 

Set命令

SADD key member1 [member2]   #向集合添加一个或多个成员

SCARD key                     #获取集合的成员数

SDIFF key1 [key2]               #返回给定所有集合的差集

SDIFFSTORE destination key1 [key2] #返回给定所有集合的差集并存储在 destination

SINTER key1 [key2]            #返回给定所有集合的交集

SINTERSTORE destination key1 [key2] #返回给定所有集合的交集并存储在 destination

SISMEMBER key member           #判断 member 元素是否是集合 key 的成员

SMEMBERS key                  #返回集合中的所有成员

SREM key member1 [member2]     #移除集合中一个或多个成员

SUNIONSTORE destination key1 [key2] #所有给定集合的并集存储在 destination 集合中

SSCAN key cursor [MATCH pattern] [COUNT count] #迭代集合中的元素

 

sadd key v1 [v2 v3]    # 添加值到set集合中
    smembers key        # 迭代遍历set集合
    sismember key value    # 判断是否存在一个元素在set集合中
    scard key        # 得到set的元素个数

    sinter s1 s2        # 求两个集合之间的交集
    sdiff s1 s2        # 求两个集合之间的差集
    sunion s1 s2        # 求两个集合之间的并集

 

Sorted Set

ZADD key score1 member1 [score2 member2]

向有序集合添加一个或多个成员,或者更新已存在成员的分数

ZCARD key      #获取有序集合的成员数

ZCOUNT key min max  #计算在有序集合中指定区间分数的成员数

ZINTERSTORE destination numkeys key [key ...] 
#计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key

ZRANGE key start stop [WITHSCORES] 
#通过索引区间返回有序集合成指定区间内的成员

ZRANK key member 
#返回有序集合中指定成员的索引

ZREMRANGEBYSCORE key min max 
#移除有序集合中给定的分数区间的所有成员

#ZUNIONSTORE destination numkeys key [key ...] 
计算给定的一个或多个有序集的并集,并存储在新的 key

ZREVRANGE key start stop [WITHSCORES] 
#返回有序集中指定区间内的成员,通过索引,分数从高到底

ZSCAN key cursor [MATCH pattern] [COUNT count] 
#迭代有序集合中的元素(包括元素成员和元素分值)


    zadd key s1 v1 s2 v2... # 为有序集合增加元素,该元素存在一个权重,用于判断位置
    zcard key        # 求有序集合的元素个数
    zrange key start stop    # 遍历整个集合
    zcount key min max    # 统计两个权重的元素个数
    zscore key 元素        # 返回该元素在集合中的权重

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值