Nosql里典型的数据库

Nosql里典型的数据库

Redis

对网站服务器进行写入

传统关系式数据库无法过多的写入

对数据库要求:

数据库高并发读写需求

解决方案:

(1:读写分离

两台主如果同时写入会发生冲突

(2:水平分割:

关系式数据库

数据之间有操作

海量数据的高效率存储和访问的需求

用户如果在海量数据中查询某一条数据

记录

数据库的高扩展性和高可用性

###############################################

任何一个领域,如果不能通过自己的努力

去获取或者超出其他人的竞争优势的话

想胜出,确实挺困难的!!!

################################################

关系型数据库:

关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名。

元组:可以理解为二维表中的一行,在数据库中经常被称为记录。

属性:可以理解为二维表中的一列,在数据库中经常被称为字段。

域:属性的取值范围,也就是数据库中某一列的取值限制。

关键字:一组可以唯一标识元组的属性。数据库中常称为主键,由一个或多个列组成。

关系模式:指对关系的描述,其格式为:关系名(属性1,属性2,…,属性N)。在数据库中通常称为表结构。

Nosql版本

存储方式不一样

Redis

存在缓存中

很稳定资格较老,成熟方案较多

mongoDB

存在文件中

社区活跃,更新活跃

HBASE

memcached:数据只保存在缓存中

cassandra

sequoiaDB:只跟ibm捆绑

redis

通过键值存储数据

键值对应数据如变量

nosql 和关系式数据库配合使用

Memcache

速度较快、不能备份、支持十几万QPS

(对一个服务器在一个时间范围内处理

的数据量的多少)

MONGODB

文档型的数据库,查询功能强大,支持

索引,最接近关系式数据库的nosql

结构相对单一

REDIS

基于缓存,速度较快,支持多种数据结构

消耗内存相对较多,支持数万的QPS

通过其他软件配合支持本地存储

Redis 安装配置:

1:安装gcc*

/usr/src/

Redis-3.0.3.tar.gz

Tcl-8.5.7-6.e16.x86

Tar  –zxvf  redis-3.03

Cd  redis-3.03

Make

Rpm  –ivh  Tcl-8.5.7-6.e16.x86

make test

make  PREFIX=/usr/local/redis  install

redis-check-aof

redis-check-dump

以上为两种日志

Cd  !$

Vim  redis.config

/daemonize

Daemonize  yes  后台运行

如果我想看一下数据库里有什么键值

Keys  *

Set  age  19

Keys  *

Set 设置

Get 查看

测试指定的并发类型

官方网站:http://www.redis.cn/

Redis.io

String 字符串

String字符串在一个键里面只能有一个值

Set设置键

Get查看键

./redis-cli

防止覆盖:

Setnx  name zhangsan

显示为0不成功

Setnx  name1  zhangsan

显示为1则成功创建

Setex  aa 30 111  设置临时的键

Ttl  aa 查看生存周期

-1  为永久生效

-2目标键为不存在

Hexists  c  b3

批量设置多个键:

MSET a3 333 a4 444 a5 555

成功返回ok,失败返回0

mget 批量查看键

msetnx  批量设置新建,防止覆盖

MSETNX  a5 555 a6 aaa

替换操作

Set b1 ‘hi zhangsan’

Get b1

替换指定键的键值从3里面开始替换

SETRANGE b1 3 lisi

(替换的内容)

Get  b1 查看原值,并替换新值

整个内容替换成别的值并可以查看原来的值

Getset  b1 ‘hello zhangsan’查看新值并替换新值

Get  b1

Getrange b1 0 5查看部分键值

查找第一个到第五个字符

键值增减

Set c1 1

Set c2 2

Get c1

INCR c1

Get c1

以上会发生增加变化如果不想让他加1  yici加10

INCRBY  c1  +10  (必须为整数) 则依次增长10

DECRBY  c1  10 则每次执行依次减10

APPEND  b1  lisi  追加内容为lisi四个字符

Strlen b1 查看键值长度

Del b1 删除b1 只能一次删除一个

Hash 字符串

在一个键里面可以有多个值

 

Hset d1 name1 zhangsan创建一个为hash字段

键名 字段   键值

HGET d1 name1查看d1键名中name1字段值

一个键里面存放两组数据

Hsetnx  设置新建防止它覆盖

HSETNX d1 name3 xxx  1为成功

Hmget d1 name1 name2 name3 批量查看字段的值

Hkeys 查看指定键中的字段名称:

HKEYS d1 只查看名字

Hgetall查看指定键的值

HDEL d1 name3 删除指定字段

Hset  d2 a 1

字段名a 数值1

Hkeys d2

Hincrby d2 a 5增加指定字段的值

List 双向队列

双向队列就是一种特殊的string类型

只是做了一个排序有一个前后顺序

服务在建立连接的时候有个队列

如何将这些消息排成一列进行管理

有一个先后顺序服务质量

队列里的每一个数据就可以看成一个string数据类型

有两种排列顺序一种是从左到右 0 1 2 3

一种是从右到左 -1  -2  -3

0  1   2  3 个数据

Lpush list1 1 从左往右插入

Lpush list1 2

Lrange list1 0 -1查看从左边第一个到右边第一个

Rpush list2 one two three four从右往左插入

Lrange list2 0 -1  查看

Linsert  list2 before two 3 hi

After (在之后)

插入到队列lisi2中在two之前插入了hi

Lset list2 1‘five’  在list2 中从左往右第二个位置把hi改为five

Rpush  list3 hi 1 hi 2 hi 3 hi 4

Lrange  list3  0 -1  查看总共八个元素

Lrem  list3  -2  hi  删除指定队列中重复的元素

把倒数第一个第二个给删除

Lrange  list1  0  -1  查看

Ltrim  list1 1 2删除list1 表里面第1个第2个

Lrange  list1  0  -1  查看已经删除

Lpush list8 11 12 13 14 15 16 新建队列

Ltrim list8  0  3  保留前三个

Lrange list8  0 -1  查看所有

Lpop list8  删除指定队列中左边的第一个元素

Rpop list8 删除指定队列中右边的第一个元素

如果我想删除的同时还能够把这个

元素放到其他队列里

Lrange  list8  0  -1

Lrance  list2  0  -1

Rpoplpush list8  list2 将list8队列中的最后一个元素

移动到list2队列中

Llen 查看队列长度

Lien list2  1通过下标来查看队列中元素的值

Lindex list2  0

Zset  有序集合

Sorted set(zset)是set的升级版本,

它在set的基础上增加了一个顺序属性,

这一属性在添加修改元素的时候可以指定,

每次指定后,zset会自动重新按新得值调整顺序。

可以理解为有两列的mysql表,

一列存value,一列存顺序。操作中key理解为zset的名字。

Set

如qq中的好有推荐

值   分数    下标

Sadd q1 1  添加集合

Smembers q1 查看集合所有元素

Sadd q1 234

Srandmember  q1  随机调用值

Spop  q1  随机删除一个值

Srem q1 4 指定随机删除一个值

Smembers q1  查看集合所有元素

Scard  q1  查看总共有几个元素

Sismember  q1 3  查看3是否为集合里的元素

Sadd q2 1 2 3 4

Sadd q3 3 4 5 6

Sdiff q2 q3  查看查集以第一个指定集合为主

Sdiffstore q4 q3 q2 查看并把q3 q2集合写入q4

Smembers q4

Smembers q2查看集合中所有元素

Smembers q3

Sinter q2 q3 查看交集

Sinterstore q8 q2 q3 需要有一样的才能保存到新集合

查看交集并保存到新集合

Sunion q2 q3 查看并集

Sunionstore  q9 q2 q3

Smove q2 q3 1 先写源集合在写目标集合把q2的值移动到q3中

移动集合中的元素

有序集合:比原来的集合多一个分数

能够实现实时同步

Zadd z1 1 aa 3 bb 2 cc 2 dd

Zrange z1 0  -1 分数是按照从小到大的排序

查看集合内元素

Zrange z1 0 -1 withscores  分数是按照从小到大的排序

Zrevrange  z1 0 -1 withscores

会按照分数从大到小排列

Zrangebyscore z1 2  3 withscores

查看           分数从2到3的

Zrem z1 dd

删除值

Zrevrange z1 0 -1 withscores

Zincrby z1 5 aa

Zrevrange z1 0 -1 withscores

Zincrby z1 4 dd 创建出来并把分数设为4

添加分数如不存在则创建

Zrange z1 0 -1 withscores

Zrank z1 aa

按照分数从小到大的顺序获取指定值的下标

Zrevrank z1 aa 按照分数从小到大顺序获取指定值的下标

Zcard  z1  统计集合中元素个数

Zcount z1 4 10 统计指定分数范围内的元素个数

Zrange  z1 0 -1 withscores

Zrank z1 cc

Zremrangebyrank  z1 1 2 删除了bb和dd

删除下标在指定范围内的元素

Zrange z1 0 -1 withscores

Zremrangebyscore  z1 1 3

根据分数来删除1 到3 之间的

删除分数在指定范围内的元素

Zadd z2 1 one 2 two 3 three

Zadd z3 2 two 3 three 3 four

Zinterstore z4 2 z2 z3 做交集

用z4 做集合、有两个分别是z2、z3

Zrange z4  0  -1  查看他们的交集是对了两边都有

Zrange z4  0  -1  withscores 取交集并保存至新集合

有序集合取出以后分数是要叠加的

在有序集合里插集无意义 因为没有那个命令

并集:

Zrange z2 0 -1 withscores  创建one1 two2 three3

Zrange z3 0 -1 withscores  创建two2 three3 four4

Zunionstore z5 2 z2 z3 取并集并保存至新集合(分数叠加)

Zrange z5 0  -1  withscores查看新集合

全局的管理命令

Keys  *

Dbsize  统计键的数量

Exists a2 查看某个键是否存在 0 不存在 1存在

-1永久 -2 临时

Ttl a2

Expire q4 20可以设置为生效时间的键

设置q4有效时间为20秒

Ttl  q4  会有变化

Rename d1 d2 改名将d1 改为d2

Type a1  查看键的数据类型

(如string list set zset)

Info 查看版本信息

Keys  *

Select  1选择去哪一个数据库默认为0数据库

一共有0-15   16个数据库

Move d2 1 把一个键移动到其他数据库中

在当前数据库中就无法看到d2啦!

Select  1  到1 数据库里就可以看到啦!

Flushdb  清空当前数据库

Flushall  清空所有数据库(16个数据库里变量)

数据库应用

密码验证:

Yum –y install gcc*

make

make test

Cd  /usr/local/redis

Vim redis.conf  打开主配置文件

Daemonize  yes设置为后台启动

启动redis

  小P  登入

Vim redis.conf  打开主配置文件

/requirepass   搜索

Requirepass  123.com 去掉注释写入密码

Wq!

Pkill redis  重启一下redis

./bin/redis-server  ./redis.conf

./bin/redis-cli  登入

Keys  * 会看不到任何的内容

Auth 123.com 需要提供认证认证

或者登入的时候加选项指定密码 –a  123.com

备份:

Nosql是能保存数据的nosql

是怎样来保存的!

Cd  /usr/local/redis

/usr/local/redis/bin/redis-server 空格

/usr/local/redis/redis.conf  开启服务

以上为一行

/usr/local/redis/bin/redis-cli –a 123.com 登入

Keys  * 就能看到啦

Save  保存

Exit

Pkill redis

Cd  /root/

/usr/local/redis/bin/redis-server  /usr/local/redis/redis.conf

/usr/local/redis/bin/redis-cli –a 123.com

Keys  *  为空的!

Vim /usr/local/redis/redis.conf

/dir

/usr/local/redis  (修改以前为dir  ./)

/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf

开启

/usr/local/redis/bin/redis-cli  -a  123.com 登入

Keys  * 就会看到有不用去配置文件找

主从同步:

实验需求:一台服务器上做主从

需要在一台服务器上创建两个工作目录

Mysql   mysqld

1从:从服务器的配置(一台服务器上)

Cd  /usr/local/redis/ 进入工作目录

Ls     会看到主配置文件redis.conf

Cd  /usr/local/

Cp  -r  redis/  redis-slave/

Ls  就会有两个工作目录

Vim redis-slave/redis.conf

Pidfile /usr/local/redis-slave/redis.pid 修改为这个文件

Port  6380  改端口

dir /usr/local/redis-slave  (修改以前为dir ./)

/slaveof  查找/

slaveof 127.0.0.1  6379 主服务器ip、端口

masterauth  123.com

wq!

/usr/local/redis-slave/bin/redis-server 空格

/usr/local/redis-slave/redis.conf

以上两行为一行

netstat  -anpt  查看端口有6380 6379

验证登入主服务器(在一台机器上做)

/usr/local/redis/bin/redis-cli –a 123.com

Keys  * 有变量

Set  bb  111 创建一个bb

Keys  *

Exit

用从服务器登入

Keys  *

看到bb则代表创建成功

如果是在两台服务器上搭建则只需要

从服务器主配置文件里从服务器的ip地址指到主就行

Redis的五种数据结构以及使用场景介绍

String——字符串
Hash——字典
List——列表
Set——集合
Sorted Set——有序集合

1.    String——字符串

String 数据结构是简单的 key-value 类型,value 不仅可以是 String,也可以是数字(当数字类型用 Long 可以表示的时候encoding 就是整型,其他都存储在 sdshdr 当做字符串)。使用 Strings 类型,可以完全实现目前 Memcached 的功能,并且效率更高。还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 AOF 模式),操作日志及 Replication 等功能。除了提供与 Memcached 一样的 get、set、incr、decr 等操作外,Redis 还提供了下面一些操作:

1.LEN niushuai:O(1)获取字符串长度
2.APPEND niushuai redis:往字符串 append 内容,而且采用智能分配内存(每次2倍)
3.设置和获取字符串的某一段内容
4.设置及获取字符串的某一位(bit)
5.批量设置一系列字符串的内容
6.原子计数器
7.GETSET 命令的妙用,请于清空旧值的同时设置一个新值,配合原子计数器使用
 

1.Hash——字典
在 Memcached 中,我们经常将一些结构化的信息打包成 hashmap,在客户端序列化后存储为一个字符串的值(一般是 JSON 格式),比如用户的昵称、年龄、性别、积分等。这时候在需要修改其中某一项时,通常需要将字符串(JSON)取出来,然后进行反序列化,修改某一项的值,再序列化成字符串(JSON)存储回去。简单修改一个属性就干这么多事情,消耗必定是很大的,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而 Redis 的 Hash 结构可以使你像在数据库中 Update 一个属性一样只修改某一项属性值。

存储、读取、修改用户属性

1.List——列表
List 说白了就是链表(redis 使用双端链表实现的 List),相信学过数据结构知识的人都应该能理解其结构。使用 List 结构,我们可以轻松地实现最新消息排行等功能(比如新浪微博的 TimeLine )。List 的另一个应用就是消息队列,可以利用 List 的 *PUSH 操作,将任务存在 List 中,然后工作线程再用 POP 操作将任务取出进行执行。Redis 还提供了操作 List 中某一段元素的 API,你可以直接查询,删除 List 中某一段的元素

1.微博 TimeLine
2.消息队列

1.Set——集合
Set 就是一个集合,集合的概念就是一堆不重复值的组合。利用 Redis 提供的 Set 数据结构,可以存储一些集合性的数据。比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为 Redis 非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。

1.共同好友、二度好友
2.利用唯一性,可以统计访问网站的所有独立 IP
3.好友推荐的时候,根据 tag 求交集,大于某个 threshold 就可以推荐

1.Sorted Set——有序集合

和Sets相比,Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。另外还可以用 Sorted Sets 来做带权重的队列,比如普通消息的 score 为1,重要消息的 score 为2,然后工作线程可以选择按 score 的倒序来获取工作任务。让重要的任务优先执行。

1.带有权重的元素,比如一个游戏的用户得分排行榜
2.比较复杂的数据结构,一般用到的场景不算太多

二、redis 其他功能使用场景

1.订阅-发布系统

Pub/Sub 从字面上理解就是发布(Publish)与订阅(Subscribe),在 Redis 中,你可以设定对某一个 key 值进行消息发布及消息订阅,当一个 key 值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系统,比如普通的即时聊天,群聊等功能。

2:事务——Transactions

谁说 NoSQL 都不支持事务,虽然 Redis 的 Transactions 提供的并不是严格的 ACID 的事务(比如一串用 EXEC 提交执行的命令,在执行中服务器宕机,那么会有一部分命令执行了,剩下的没执行),但是这个 Transactions 还是提供了基本的命令打包执行的功能(在服务器不出问题的情况下,可以保证一连串的命令是顺序在一起执行的,中间有会有其它客户端命令插进来执行)。Redis 还提供了一个 Watch 功能,你可以对一个 key 进行 Watch,然后再执行 Transactions,在这过程中,如果这个 Watched 的值进行了修改,那么这个 Transactions 会发现并拒绝执行。

时间: 2024-10-22 20:41:46

Nosql里典型的数据库的相关文章

将从SQL2008 r2里备份的数据库还原到SQL2008中

从标题可以看出这是未解决上一篇遗留问题写的,现在我也不知道这个可不可以成功,方法似乎查到了一种,具体怎样还不清楚:而且,我想说的是“我踩雷了”. 这篇的主角是“Database Publishing Wizard”家族:实话我完全不知道有这个. 地点是“ C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Publishing\1.2\SqlPubWiz.exe”.从路径可以看到1.2这个数据,上面提到这是一个家族,根据这个1.2可知道这不是

SQL Server 2008 R2 里迁移系统数据库的方法

针对不同的场景,采用不同的步骤. 对非master以及resource系统数据库而言,分两种情况. 1.非master以及resource系统数据库正常. 这里以迁移msdb为例,将msdb从D:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\迁移到D:\SQL2K8_DATA\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\system\目录下. 首先我们检查当前msdb的路径 ? 1 2 3 SELECT name, phys

NoSQL 非关系型的数据库

关系型数据库的缺点: 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如: 1.High performance - 对数据库高并发读写的需求 web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求.关系数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQ

NoSQL 35 个非主流数据库

几乎每个Web开发人员都有自己喜欢的数据库,或自己最熟悉的数据库,但最常见的无外乎以下几种: MySQL PostgreSQL MSSQL SQLite MS Access 或是更简单的XML,文本文件等.这些数据库有优秀的文档,背后有强大的社区支持,大部分流行的CMS都使用了其中之一或多个,它们都易于使用,大多数托管服务供应商都提供了相应的产品,因此它们的使用量很多,名气也很大.但除了这些主流的数据库外,还有很多其它非主流数据库存在,其中有一些也开始受到人们的高度重视,下面我们就一起来看看吧,

NoSQL:从关系型数据库到非关系型数据库

关系型数据库 所谓关系型数据库,,就是指采用了关系模型来组织数据的数据库. 什么是关系模型,简单说,关系模型就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织. 关系模型中常用的概念: 1.关系 可以理解为一张二维表,每个关系都有一个关系名,在数据库中被称为表名 2.元组 可以理解为二维表中的一行,在数据库中被称为记录 3.属性 可以理解为二维表中的一列,在数据库中被称为字段 4.域 属性的取值范围,在数据库中为某一列的取值限制 5.关键字 一族可以唯一标识元组的

[数据库]关于三个比较典型的数据库试题

最近学习Oracle,老师讲了三个比较典型的问题,做一下总结,也便于以后复习. 下图显示的是三个题的题干和要查询的结果: ===========================================第一题============================找到员工表中工资最高的前三名: 先说明一个现象: 1 SQL> select rownum,ename from emp; 2 3 ROWNUM ENAME 4 ---------- ---------- 5 1 SMITH 6

mysql 一个典型的数据库建表建用户过程

cmd 命令不接 ";" mysql 命令后接 ";" 1.以管理员身份登录mysql mysql -u root –p 2.选择mysql数据库 use mysql; 3.创建用户并设定密码 create user 'test'@'localhost' identified by '123456'; 4.使操作生效 flush privileges; 5.为用户创建数据库 create database testdb; 6.为用户赋予操作数据库testdb的所有权

在SqlServer查询分析器里 访问远程数据库 进行数据查询更新等操作(openrowset)

启用Ad Hoc Distributed Queries: exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure 使用完成后,关闭Ad Hoc Distributed Queries: exec sp_configure 'Ad Hoc Distributed Queries',0 reconfigure exec s

Poseidon 系统是一个日志搜索平台——认证看链接ppt,本质是索引的倒排列表和原始日志数据都存在HDFS,而文档和倒排的元数据都在NOSQL里,同时针对单个filed都使用了独立索引,使用MR来索引和搜索

Poseidon 系统是一个日志搜索平台,可以在百万亿条.100PB 大小的日志数据中快速分析和检索.360 公司是一个安全公司,在追踪 APT(高级持续威胁)事件,经常需要在海量的历史日志数据中检索某些信息,例如某个恶意样本在某个时间段内的活动情况.在 Poseidon 系统出现之前,都是写 Map/Reduce 计算任务在 Hadoop 集群中做计算,一次任务所需的计算时间从数小时到数天不等,大大制约了 APT 事件的追踪效率.Poseidon 系统就是解决这个需求,能在数百万亿条规模的数据