【DW12月-推荐系统】Task02 数据库的基本使用

参考链接:https://github.com/datawhalechina/fun-rec

一、Mysql 基础

1.1 SQL书写规范

  • 1.以分号“;”结尾;
  • 2.不区分关键字大小写(表名和列名也一样);
  • 3.表中的数据区分大小写;
  • 4.常数的书写方式固定,日期字符串用引号括起来,数字直接书写。

1.2 数据类型

1.2.1 数值型

数值型包含整型和浮点型:

  • 整型数据:TINYINT、INTEGER、SMALLINT、MEDIUMINT、DECIMAL 、NUMERIC 和BIGINT。
  • 浮点型数据:DECIMAL、FLOAT、REAL 和 DOUBLE PRECISION。

1.2.2 时间型

  • 表示时间值的有日期和时间,具体类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

1.2.3 字符串型

  • 常见的字符串类型是指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

1.3 数据库的基本操作

创建:create
选择:use,alter
插入:insert into
增加:add
删除:drop,delete
更新:update,modify,change

1.4 常用函数

where:对表进行条件过滤,然后再进行分组处理。
Group by:根据指定的列名,对表进行分组。
Having:为聚合结果指定条件。
Order by:对表的查询结果根据某指定的字段进行排序。

二、Mongodb 基础

2.1 MongoDB简介

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值对(key=>value)组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

2.2 MongoDB主要特点

  • 1.MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
  • 2.可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
  • 3.可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
  • 4.如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
  • 5.Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • 6.MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
  • 7.Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
  • 8.Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
  • 9.Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
  • 10.GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
  • 11.MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
  • 12.MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
  • 13.MongoDB安装简单。

2.3 MongoDB 创建数据库

  • 一个mongodb中可以建立多个数据库。
    MongoDB的默认数据库为"db",该数据库存储在data目录中。
    MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

  • "show dbs" 命令可以显示所有数据的列表。
    执行 "db" 命令可以显示当前数据库对象或集合。
    运行"use"命令,可以连接到一个指定的数据库。

2.4 MongoDB 创建集合

  • 使用 createCollection() 方法来创建集合。db.createCollection(name, options)
  • 使用 drop() 方法来删除集合。db.collection.drop()

2.5 MongoDB 文档操作

文档的数据结构和 JSON 基本一样,所有存储在集合中的数据都是 BSON 格式,BSON 是一种类似 JSON 的二进制形式的存储格式,是 Binary JSON 的简称。

  • 使用 insert()或save()方法向集合中插入文档。
    save()方法:如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。
    insert()方法: 若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。
  • 使用 update() 和 save() 方法来更新集合中的文档。
  • 使用 remove() 函数是用来移除集合中的数据。
  • 使用 find() 方法查询文档,find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。
  • OR 条件语句使用了关键字 $or。
  • 使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
  • 使用 update_one() 方法修改文档中的记录。
  • 使用 delete_one() 方法来删除一个文档。
  • delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档。

三、Redis 基础

3.1 Redis简介

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。内存数据库,读写非常高速,可达10w/s的评率,一般应用于数据变化快、实时通讯、缓存等。但内存数据库通常要考虑机器的内存大小。Redis 是完全开源免费的,遵守 BSD 协议,是一个灵活的高性能 key-value 数据结构存储,可以用来作为数据库、缓存和消息队列。
相比于其他的 key-value 缓存产品有以下三个特点:

  • Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载到内存使用。
  • Redis 不仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。
  • Redis 支持主从复制,即 master-slave 模式的数据备份。

3.2 Redis 基本操作命令

  • 使用/etc/redis/redis.conf下面的配置文件来启动Redis。
  • 通过redis-cli,可以连上服务器端的redis服务。
  • 通过 redis-cli 停止Redis,或通过杀掉redis服务进程。
  • 通过select命令进行切换。
  • 使用FLUSHDB删除当前选择的数据库中的所有数据,使用FLUSHALL删除所有数据库里面的数据。
  • 使用DBSIZE查看当前选择的库中key的数量。

3.3 Key的操作命令

  • 设置过期时间。
    expire 命令设置 key 的过期时间,时间过期后,key 会被自动删除,设置成功返回1,key不存在返回0。
    ttl 命令以秒为单位返回key的剩余过期时间,如果key不存在返回 -2 key 存在但没有关联超时时间则返回 -1 。
  • type命令以字符串的形式返回存储在 key 中的值的类型,可返回的类型有:string, list, set, zset,hash 和 stream,如果key值不存在返回none。
  • del命令删除指定的key,不存在的key忽略,返回0,如果key存在,返回删除的key的个数。
  • set命令将key指定为指定的字符串,如果key存在,则会覆盖原来的值。
  • get命令返回与键 key 相关联的字符串值。
  • append命令将指定的key追加值。如果key存在,并且是字符串,则会将value追加到key原值的末尾,如果key值是非字符串则会报错,当key不存在时候,改命令类似于set,简单将key设定为value。
  • incr 命令将 key 中储存的数字值增一。如果key不存在,key值会被初始化为0,在进行incr操作。如果字符串类型的值不能表示为数字,则会报错。
  • decr命令将 key 中储存的数字值减一,和incr命令相似。
  • Strlen 命令将获取指定 key 所储存的字符串值的长度,如果key存储的不是字符串类型或不存在时,返回错误。
  • Setrange命令是将从偏移量 offset 开始, 用 value 参数覆盖键 key 储存的字符串值。
  • Getrange命令返回存储在 key 中的字符串的子串,由 start 和 end 偏移决定(都包括在内)。负数偏移提供相对字符串结尾的偏移。并且该命令会通过将结果范围限制为字符串的实际长度来处理超出范围的请求。
  • MSET命令设置多个 key 的值为各自对应的 value。如果key存在,则会用新值替换旧值,如果key不存在,会重新创建,该命令总是返回“OK”,因为 MSET不会失败。
  • MGET命令返回所有(一个或多个)给定 key 的值,值的类型是字符串。 如果给定的 key 里面有某个 key 不存在或者值不是字符串,那么这个 key 返回特殊值 nil 。

四、总结

通过学习mysql,mongodb,redis这三个数据库可知,每个数据库有各自的优势。Mysql是一个非关系型数据库,拥有较为成熟的体系;MongoDB 并不是单纯的内存数据库,它由 C++ 语言编写,是一个基于分布式文件存储的开源数据库系统;Redis是一个内存数据库,所有数据都是放在内存中的,持久化是使用 RDB 方式或者 aof 方式。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容