数据库与服务端

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2023-3-1 12:56:28 | 显示全部楼层
啥是数据库?

数据库是存储数据的地方,我们平时使用电脑或者手机,接触到的都是图形化界面,不能直接接触到数据库,其实,数据库无处不在,我们使用的绝大多数需要记录的数据都存储在数据库中,可以说,现如今的便捷生活,就是建立在数据库的基础上的。
登录网站时,用户的账号和密码都存储在服务器的数据库中。
购买火车票、机票、汽车票时,显示的余票记录、个人购买记录,也都是存储在数据库中。



我们在网上买东西、订外卖、订酒店、订电影票,这些信息都存储在数据库中。
我们听音乐、看视频、读书,个人账户的所有信息也存储在数据库中。
每个人的身份信息也放在公安部的系统中,我们使用身份证,证明自己是自己,就是把自己的身份信息与数据库中的身份信息对比。
那么数据库长啥样?
1)服务器
数据库本身是存储数据的软件,既然是软件,就要在硬件中运行,这个硬件就是服务器,中小型企业使用一台服务器就可以存储所有的数据,对大公司而言,数据较多,一台服务器不能存储所有的数据,通常多台数据库服务器共同来存储。
2)数据库
数据库服务器可以有多个数据库,比如,对电商平台而言,会建立用户数据库、商品数据库、卖家数据库等,不同的数据库之间可以相互独立,也可以存在数据上的联系。



数据库与数据表

3)数据表
每个数据库又可以有很多个数据表。比如用户数据库,可以有多张数据表,不同数据表用来存储用户的不同数据,用户的账号、密码存储在用户数据表中,用户的购买记录存储在购买记录数据表中,用户操作数据存储在操作记录数据表中。
下面的表格就是个简单的数据表,跟我们经常使用的Excel很像,包括行和列,每一列代表一个属性,每一行代表一条记录。这个用户数据表,有5列,分别是id、name、password、gender、birthday,分别代表编号、姓名、密码、性别、出生时间,有3行,分别表示小明、小红、小军的个人等信息。



SQL、NoSQL数据库

数据库大致可以分为两大类,SQL数据库和NoSQL数据库。SQL (Structured Query Language) 数据库,指关系型数据库,主要代表有SQL Server,Oracle,MySQL。NoSQL(Not Only SQL)指非关系型数据库,主要代表有MongoDB,Redis。
SQL、NoSQL在存储数据类型和存储方式上有较大的不同。
第一,储存数据类型不同。
关系型数据库适合存储结构化数据,如用户的帐号、地址等。这些数据通常需要做结构化查询,比如选出所有的90后用户,使用SQL查询就非常方便,这时候,关系型数据库就要胜出一筹。
NoSQL适合存储非结构化数据,如发微博、文章、评论等。一方面,这些数据通常是海量的,增长的速度难以预期,NoSQL数据库通常可以存储这些无限增长的数据。另一方面,这些数据类型比较复杂,可能同时包括文字、图片、音频、视频等,使用SQL无法直接存储,只能借助NoSQL。
第二,储存方式不同。
数据类型不同,造成存储的方式也不同。
SQL数据存在特定结构的表中,而NoSQL则更加灵活和可扩展,存储方式可以是JSON文档或者其他方式。
比如,储存用户账号、密码、性别、出生日期,使用SQL存储的数据表如下。


NoSQL存储方式比较灵活,比如使用类JSON文件存储上表中的个人信息。


SQL和NoSQL存储的数据类型、存储方式有较大不同,在某种程度上是互补关系,因此许多大型互联网项目都会采用SQL+NoSQL的组合存储方案。

数据从哪里来?

数据库是存储数据的,没有数据的数据库,就不能称之为数据库,个性推荐、运营分析等也需要大量的数据,那么数据从哪里来呢?
数据库中的数据大致可以分为两类,不同类型的数据,收集方式也不尽相同。
第一类是用户必要数据。比如,用户购买过什么商品,收藏过什么文章,这些内容都需要保存在数据库中,当用户查看的时候,可以从该数据库中获取,并显示出来。这些数据往往都是通过代码获取并保存到数据库中,比如,小红在淘宝看上了一件衣服,加入购物车之后,购物车对应的数据库也会添加一条衣服的记录,小红付款之后,买到商品的数据库也会添加对应的记录。


京东APP我的订单
第二类数据是运营、挖掘用的数据,这类数据用户可能并不需要,而是公司为了实现个性推荐、运营分析使用的数据。
获取这类方式主要使用埋点技术,即在产品流程关键部位植入相关统计代码,用来追踪每次用户的行为,并上传到服务器。比如,为了实现个性推荐,电商平台会统计用户浏览时间、点击情况等关键信息,方便之后的个性化推荐。再比如,为了实现运营分析,需要统计APP下载情况、用户分布情况、注册页面转化率、VIP用户数量等,结合漏斗模型,使用这些数据可以发现运营中的短板并不断改进。
在程序中插入统计代码,并搭建相应的服务器,开发工作量大,周期长,因此市场上也有第三方提供的工具,比如友盟、百度移动统计、Sensors Data、GrowingIO、Talking Data等,在软件中直接调用这些工具,就可以实现快速开发。

服务端是干啥的?

服务端是与前端对应的概念。前端包括Web网页、Android客户端、iOS客户端等,负责与用户交互,服务端则为前端提供支持。
比如,用户注册登录的时候,前端会显示对话框,用户输入账号、密码之后,数据会被传递到服务端,由服务端实现账号、密码的验证。再比如,用户使用新闻客户端查看新闻的时候,手机APP显示新闻列表,每条新闻还有对应的标题、正文、图片,这些数据都存储在服务器上,手机APP从服务端获取这些数据并显示在手机屏幕上。
服务器端的开发通常使用Java、PHP、Python语言,数据库通常使用MySQL、Oracle数据库。


更具体地,服务端实现下列功能。
第一,储存和传递信息。
数据存储在服务器中,当我们访问网页时,服务器可以返回HTML网页数据,也可以返回PDF、图片、视频等类型的文件。服务器同样可以实现数据转发,比如,我们使用的微信、QQ等,发送的消息都是先传递到腾讯的服务器中,接收方再从服务器中接收。
将数据放在服务器中,可以实现客户端之间的切换,比如用户使用浏览器看电影时,服务器会存储播放记录,当用户切换到手机端观看时,可以接着看。
第二,控制访问内容。
服务器允许站点限制对用户的访问,并仅提供允许用户查看的信息,这就保证了数据的安全。除此之外,将数据集中存放,比分开放在不同的地方,维护起来更简单,也更能避免出现数据泄露等风险。
第三,数据分析。
服务器还可以对存储的数据进行分析,比如个性推荐,服务器会收集用户搜索、购买、点击、停留时间等数据,这些数据都存储在数据库中,服务端的软件可以实现数据挖掘、个性推荐。

常见的服务器架构

(1)最简单的服务器架构



最初,服务器的架构非常简单,应用程序、数据库、文件等所有的资源都在一台服务器上。比如使用Linux作为操作系统、Apache作为服务器软件、MySQL作为数据库、PHP作为服务端编程语言,这个组合被称为LAMP。
简单、成本低,可以满足日常的需求,个人网站和小公司网站通常就使用这种服务器架构,但是对于更大的公司,这种方式就不能满足对速度、存储容量的需求了。
(2)应用服务和数据服务分离



随着系统访问量的增加,服务器的带宽和响应速度成为系统的瓶颈,特别是访问图片、视频等较大的文件时,下载速度会特别慢。
为了提高相应速度,通常会将应用程序、数据库、文件分别放置在不同的服务器中,提供处理能力,即使用应用服务器、文件服务器、数据服务器,分别实现相应的功能。
(3)使用缓存改善性能



从数据库中读取数据要花费较长的时间,为了提高响应速度,会将一些经常访问的内容拿出来,放在缓存中,提高响应速度。比如,微博热搜的访问量非常大,通常都有几千万甚至上亿的访问量,如果把热搜数据保存在数据库中,每次都需要从数据库中读取,会花费大量的时间,但是如果把热搜的数据直接保存在缓存中,就不需要每次都从数据库读取,响应速度会大大提高。有时候,为了提高缓存的容量,还会建一个缓存服务器。
(4)使用应用服务器集群和分布式数据库



随着用户、数据量的进一步增加,原有的系统已经不能满足响应速度和存储容量需求,服务器集群和分布式数据库应运而生。
服务器集群主要解决服务器响应速度问题。举个例子,有1万个用户同时访问服务器,应用服务器的访问量只有1万,服务器可以实现在短时间内响应。但如果有1000万个用户同时访问服务器,单个应用服务器端服务器的访问量就有1000万,此时系统根本无法响应,就需要多个服务器同时工作,比如有1000个服务器,平均每台服务器只有1万个用户。
为了分配访问流量,通常还需要负载均衡。比如1000万个用户,1000个服务器,如果没有负载均衡,在1000万个用户可能会访问1000个服务器中的某些服务器,造成局部过载,添加了负载均衡,可以是1000万个用户较为均匀分配在这1000台服务中。
单个数据库服务器、文件服务器无法满足系统对存储容量和响应速度的要求,同样要使用多个数据服务器和文件服务器,也就是采用分布式数据库和分布式文件系统,据统计,Google的数据中心有7万台服务器同时工作!
服务器的架构随着需求的变化不断演进,相信以后会有更加先进的架构。

服务端与客户端的数据交互

服务端与客户端通过网络进行数据传输,那又是如何传输数据的呢?比如用户使用账号、密码登录,但这些数据并不能直接传递,而是需要编码之后才能传递,否则在传输的过程中很容易出现错误,密码等敏感信息通常还会加密。
常见的有两种编码方式,分别是XML编码和JSON编码。
扩展标记语言 (Extensible Markup Language, XML) ,用于标记数据使其具有结构性,是一种允许用户对自己的标记语言进行定义的源语言。 XML格式统一,跨平台和语言,早已成为业界公认的标准。
概念有些拗口,我们举个例子,比如中国部分省市。


使用XML表示这些数据。



JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性,可在不同平台之间进行数据交换,使用JSON表示上面的表格:


从编码的可读性来说,XML有明显的优势,JSON读起来更像一个代码,读起来就比较费解了,不过,我们读起来费解的语言,恰恰是适合机器阅读。
从编码效率上看,XML包含很多重复的标记字符,长度也要长很多,相比之下JSON要短不少,因此JSON的通信效率更高。
因为上面的这些原因,JSON的使用范围比XML使用范围要更广。

八卦: 前端赚钱多还是后端赚钱多?

前端是与用户直接交互的部分,包括页面所有的视觉内容,从字体颜色到图片大小,从页面布局到用户菜单。
Web工程师一般需要精通HTML、CSS、JavaScript语言,还要熟悉常用的一些编程框架,以便于快速开发,Android工程师需要精通Android或者Kotlin开发,iOS工程师需要精通Swift或者Objective-C开发。
前端开发者通常要与设计师密切合作,帮助构建产品原型,参与从产品开发到发布的全过程,一些优秀前端开发者甚至能准确发现影响用户体验的问题,并给出建议或者代码解决方案。





Web前端工程师招聘要求和工资

后端也就是服务端,为Web网页、Android APP、iOS APP提供支持,具体工作职责通常包括服务器软件开发、数据库开发。
后端程序员通常需要精通一门或者多门编程语言,比如Java、Python等。他们往往并不直接面对客户,而是在产品经理或者前端程序员的要求下,完成相应的开发。





后端工程师招聘要求和工资

通过这些不完全招聘信息,我们可以看出,前端工程师和后端工程师的工资差不多,程序员的工资差别主要源于自身级别的高低和技术实力的高下。技术总监的工资高于程序员,高级程序员比普通程序员的工资高。
回复

举报 使用道具

2

主题

6

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2023-3-1 12:57:24 | 显示全部楼层
文章写的很棒,有了新的认识[赞同]
回复

举报 使用道具

2

主题

4

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2023-3-1 12:58:15 | 显示全部楼层
我觉得写的很棒 很清楚
回复

举报 使用道具

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2023-3-1 12:59:09 | 显示全部楼层
想请教一下几个问题,困惑了好久了,一,用户上传本地图片到网页,那后端又如何接收并存储他的图片到数据库呢;二,数据库又是如何存储图片的呢,知道数据库应该存路径,那图片原文件又放在哪呢,也在数据库里面的什么地方吗
回复

举报 使用道具

1

主题

4

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2023-3-1 12:59:58 | 显示全部楼层
非科班出身,看懂了[惊喜]
回复

举报 使用道具

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2023-3-1 13:00:06 | 显示全部楼层
讲的太好了
回复

举报 使用道具

您需要登录后才可以回帖 登录 | 立即注册
快速回复 返回顶部 返回列表