微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Nosql学习总结

实验内容
一、关系型数据库与非关系型数据库
二、典型的Nosql数据库
三、使用Redis常用命令
四、使用MongoDB常用命令

一、关系型数据库与非关系型数据库
当前主流的关系型数据库有Oracle、DB2、MysqL等。
非关系型数据库有 Nosql、Cloudant。
1、关系型数据库通过外键关联来建立表与表之间的关系;
2、非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定。

比如, 有一个学生的数据:
姓名:张三,性别:男,学号:12345,班级:二年级一班
还有一个班级的数据:
班级:二年级一班,班主任:李四

关系型数据库中,我们创建学生表和班级表来存这两条数据,并且学生表中的班级存储的是班级表中的主键。

非关系型数据库中,我们创建两个对象,一个是学生对象,一个是班级对象,
用Java来表示就是:
class Student {
String id;
String name;
String sex;
String number;
String classid;
}
class Grade {
String id;
String name;
String teacher;
}
通过设置Student类的classid等于Grade类的id来建立这种关系;

非关系型数据库中,我们查询一条数据,结果出来一个数组,关系型数据库中,查询一条数据结果是一个对象。
二、典型的Nosql数据库
临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase)

三、使用Redis常用命令
1、DEL key 该命令用于在 key 存在是删除 key
2 、DUMP key 序列化给定 key ,并返回被序列化的值
3、 EXISTS key 检查给定 key 是否存在
4、 EXPIRE key seconds 为给定 key 设置过期时间
5、 EXPIREAT key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间,不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)
6 、PEXPIRE key milliseconds 设置 key 的过期时间亿以毫秒计
7、 PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
8 、KEYS pattern 查找所有符合给定模式( pattern)的 key
9 、MOVE key db 将当前数据库的 key 移动到给定的数据库 db 当中
10 、PERSIST key 移除 key 的过期时间,key 将持久保持
11 、PTTL key 以毫秒为单位返回 key 的剩余的过期时间
12、 TTL key 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
13、 RANDOMKEY 从当前数据库随机返回一个 key
14、 RENAME key newkey 修改 key 的名称
15 、RENAMENX key newkey 仅当 newkey 不存在时,将 key 改名为 newkey
16 、TYPE key 返回 key 所储存的值的类型

四、使用MongoDB常用命令
由于以前用的数据库都是 sql 的语法,近期学习了 Nosql 之 MongoDB 后,做了以下总结:

首先,传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。
mongoDB语法:

MongoDB的好处挺多的,比如多列索引,查询时可以用一些统计函数支持多条件查询,但是目前多表查询是@R_502_6289@的,可以想办法通过数据冗余来解决多表查询的问题。
MongoDB对数据的操作很丰富,下面做一些举例说明,内容大部分来自官方文档,另外有部分为自己理解。
查询colls所有数据
db.colls.find() //select * from colls
通过指定条件查询
db.colls.find({‘last_name’: ‘Smith’});//select * from colls where last_name=’Smith’
指定多条件查询
db.colls.find( { x : 3, y : “foo” } );//select * from colls where x=3 and y=’foo’
指定条件范围查询
db.colls.find({j: {KaTeX parse error: Expected 'EOF', got '}' at position 6: ne: 3}̲, k: {gt: 10} });//select * from colls where j!=3 and k>10
查询包括内容
db.colls.find({}, {a:0});//查询除a为0外的所有数据
支持<, <=, >, >=查询,需用符号替代分别为ltlt,lt,lte,gtgt,gt,gte
db.colls.find({ “field” : { $gt: value } } );
db.colls.find({ “field” : { $lt: value } } );
db.colls.find({ “field” : { $gte: value } } );
db.colls.find({ “field” : { $lte: value } } );
也可对某一字段做范围查询
db.colls.find({ “field” : { $gt: value1, $lt: value2 } } );
不等于查询用字符ne
db.colls.find( { x : { KaTeX parse error: Expected 'EOF', got '}' at position 8: ne : 3 }̲ } ); 取模查询用字符mod
db.colls.find( { a : { $mod : [ 10 , 1 ] } } )// where a % 10 == 1
$all查询
db.colls.find( { a: { $all: [ 2, 3 ] } } );//指定a满足数组中任意值时
$size查询
db.colls.find( { a : { $size: 1 } } );//对对象的数量查询,此查询查询a的子对象数目为1的记录
$exists查询
db.colls.find( { a : { $exists : true } } ); // 存在a对象的数据
db.colls.find( { a : { $exists : false } } ); // 不存在a对象的数据
使用正则表达式匹配
db.colls.find( { name : /acme.*corp/i } );//类似于SQL中like
内嵌对象查询
db.colls.find( { “author.name” : “ritter” } );
$in & $nin 相当于 sql 中的:in & not in
sort()排序
db.colls.find().sort( { ts :

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐