2、第八周 - 网络编程进阶 - 数据库类型的理解

前言

1、关系型数据库与非关系型数据库

A、什么是数据库?

数据库是数据的仓库。数据库与普通的文件系统的主要区别:数据库能快速查找对应的数据。

B、什么是关系型数据库?

关系型数据库是依据关系模型来创建的数据库。所谓关系模型就是“一对一、一对多、多对多”等关系模型,关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。关系模型包括数据结构(数据存储的问题,二维表)、操作指令集合(SQL语句)、完整性约束(表内数据约束、表与表之间的约束)。

常见的关系型数据库:

Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL

关系型数据库的特点:

  • 安全(因为存储在磁盘中,不会说突然断电数据就没有了);
  • 容易理解(建立在关系模型上);
  • 但不节省空间(因为建立在关系模型上,就要遵循某些规则,好比数据中某字段值即使为空仍要分配空间)

C、什么是非关系型数据库?

非关系型数据库主要是基于“非关系模型”的数据库(由于关系型太大,所以一般用“非关系型”来表示其他类型的数据库)。

非关系型模型比如有:

  • 列模型:存储的数据是一列列的。关系型数据库以一行作为一个记录,列模型数据库以一列为一个记录。(这种模型,数据即索引,IO很快,主要是一些分布式数据库)
  • 键值对模型:存储的数据是一个个“键值对”,K/v模式。
  • 文档类模型:以一个个文档来存储数据,有点类似“键值对”。

常见非关系模型数据库:

  • 列模型:Hbase
  • 键值对模型:redis,MemcacheDB
  • 文档类模型:mongoDB

非关系型数据库的特点:

  • 效率高(因为存储在内存中)。
  • 但不安全(断电丢失数据,但其中redis可以同步数据到磁盘中),现在很多非关系型数据库都开始支持转存到磁盘中。

2、NoSQL 缓存数据库介绍

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。

NoSQL数据库的四大分类:

  • 键值(Key-Value)存储数据库:数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
  • 列存储数据库:数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。如:Cassandra, HBase, Riak.
  • 文档型数据库:文档型数据库模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb。
  • 图形(Graph)数据库:图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph。

NoSQL数据库在以下的这几种情况下比较适用:

  • 数据模型比较简单;
  • 需要灵活性更强的IT系统;
  • 对数据库性能要求较高;
  • 不需要高度的数据一致性;
  • 对于给定key,比较容易映射复杂值的环境。

NoSQL数据库的四大分类表格分析:

3、 Mongodb\redis\memcached 区别

Redis和Memcache区别:

  • Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等。
  • 数据类型--Memcache在添加数据时就要指定数据的字节长度;redis不需要。
  • 虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘。LRU算法。
  • 过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10
  • 分布式--设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从
  • 存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)。
  • 灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复。

三者区别如下:

原文地址:https://www.cnblogs.com/chen170615/p/9061981.html

时间: 2024-11-05 19:01:07

2、第八周 - 网络编程进阶 - 数据库类型的理解的相关文章

4、第八周 - 网络编程进阶 - Mysql数据库操作

数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.以下是关于数据库一些术语: 数据库: 数据库是一些关联表的集合.. 数据表: 表是数据的矩阵.在一个数据库中的表看起来像一个简单的电子表格. 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据. 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据. 冗余:存储两份数据,冗余可以使系统速度更快.例如不同表中的相同字段(表

3、第八周 - 网络编程进阶 - Redis消息缓存

Redis概念 Redis是主流的key-value nosql 数据库之一.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集并集和差集及更丰富的操作.,redis支持各种不同方式的排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据

5、第八周 - 网络编程进阶 - Python 连接 Mysql

Python操作MySQL主要使用两种方式:原生模块:pymsql 其中pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.ORM框架:SQLAchemy Mysql pymysql 基本步骤 1.pymysql 基本结构语法如下: import pymysql #创建连接 conn = pymysql.connect(host='10.10.28.5',port=3306,user='chen',passwd='Chen1203..',db='school',

Java网络编程丶数据库编程丶XML解析技术。

Java网络编程 物理层. 数据链路层. 网络层. 传输层. 会话层. 表示层. 应用层. TCP/IP分层接口包括用于协作层分别完成以下的功能: 网络接口层. 网络互联层. 传输层. 应用层. 套接字: Socket.套接字.是一种抽象层. // 创建客户端Socket向服务器发起连接请求 Socket socket = new Socket("127.0.0.1", 30001); /* 利用已建立的socket创建输入输出流,处理与服务器端的连接 */ // 向服务器写入数据 B

Python网络编程06----django数据库的增删改查

首先定义model如下. class UserInfo(models.Model): username=models.CharField(max_length=50,null=True,primary_key=False,db_index=True) #可以为空,不是主键,创建索引 password=models.CharField(max_length=50,error_messages={"invalid":"出错"}) #定义出错信息 gender=model

网络编程进阶及并发编程

并发编程之多进程 进程理论 进程 进程:正在运行的一个过程或一个任务.负责执行任务的是cpu. 程序与进程的区别:程序只是一堆代码,而进程指的是程序的运行过程. 注意同一个程序执行两次,是两个进程.比如打开两个QQ,登陆的是不同人的QQ号. 并行与并发 无论是并行还是并发,在用户看来都是'同时'运行的,不管是进程还是线程,都只是一个任务而已,真是干活的是cpu, cpu来做这些任务,而一个cpu同一时刻只能执行一个任务. 并发:并发是看起来像是一起执行,实际上是通过在不同人物之间快速切换,使任务

day8--socket网络编程进阶

socket:socket就是实现服务器和客户端数据的交换,服务器端接收并发送数据,客户端发送并接收数据,并且需要注意的是,在python3中,socket值接收字节.因为客户端在发送连接给服务器的时候,要转换为字节码:服务器端在返回给客户端的时候,也要转换为字节码. 如下所示: 服务器端: import socket,os server = socket.socket() server.bind(("localhost",9999)) server.listen() while Tr

Socket网络编程进阶与实战

第1章 课程导学(Java语言教学)[说明:课程案例部分以Java语言实现]本章节首先会对课程进行导学讲解,包括为什么应该学习本课程,课程目标与收获,课程内容安排,适合人群和学习建议等,接着会讲解代码规范与开发注意事项,目的全在于希望极大的方便同学进行本课程的学习.... 第2章 Socket网络编程快速入门本章首先整体介绍什么是Socket网络编程:让大家对Socket有个大概的概念与方向.之后通过几个小Case引出课程的主角,轻松愉快的让你体验到Socket编程的快感.本章节主要收获:1.

第八章网络编程进阶

####一.问答题 1.简述计算机操作系统中的"中断"的作用? 中断指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程 计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得cpu暂时中断当前正在执行的程序而转去执行相应的事件处理程序. 待处理完毕后又返回原来被中断处继续执行或调度新的进程执行的过程.它使计算机可以更好更快利用有限的系统资源解决系统响应速度和运行效率的一种控制技术. 实时响应 + 系统调用 2.简述计算机内存中的"内核态