从编程小白到全栈开发:数据 (1)

有些事情时刻都在发生,但是我们通常很少意识到它们的存在。比如,当我们使用网页或移动应用的时候,其实在不断的产生着数据:注册一个网站或app的账号、发一条微博、写一篇简书文章、提一个知乎问题、亦或是给别人点了一个赞,甚至,只是你的鼠标或手指在界面上随意的滑来点去的。这些数据都可能被通过网络发送到网站或app的服务端,被存储起来以供后续的处理和使用。

这些数据之后可能还会被你自己再次使用,比如你登录网站或app的时候,本次输入的账号密码会拿来和你注册时输入的账号密码进行比对,校验通过后才能确认你的合法使用者身份;或者,这些数据也可能会被发送到其他用户那边去,被其他人看到,比如你写的文章会被其他人搜索和阅读;亦或者,这些数据只会被网站或app的开发运营者使用,通过分析这些数据,了解你的阅读爱好、年龄层次、使用何种设备上网等等,最后他们可能会根据分析结果来进一步改善网站或app的使用体验,或者用于向你推荐更多符合你口味的文章、推销你可能想买的商品等等。

数据的存储与处理,是软件开发中极其重要和有价值的一个部分,因此,我们肯定需要好好的了解和掌握它。在后面的文章中,让我们花多一点时间来学习这方面的内容吧,主要会集中在数据收集、数据传输、数据存储、以及数据的再使用等方面。

数据收集

数据收集,就是从数据源处获得数据。数据收集有很多种不同形式,比较典型的有:

  • 设计一些网页表单,让用户填写该表单
  • 在代码中埋点,当代码执行到指定的埋点位置,即向服务器发送相应数据
  • 对接第三方系统API、硬件传感器等,由第三方主动推送、或由己方拉取数据
  • 编写数据爬虫,选取固定格式或无视格式的从其他网站上抓取数据
  • 手动收集数据,整理成比较规整的结构,比如csv,excel文件等

没记错的话,在之前的文章中我们其实已经涉及到了一些如何将前端的数据发送到服务端的知识,比如在简易计算器的例子中就有一个网页表单,通过该表单,我们可以收集到用户输入的数字和操作符,并发送到服务端进行数学运算。

数据传输

数据从客户端发送到服务端,我们通常会根据实际的应用场景,来决定使用什么方式进行传输,比如我们通常会考虑以下情况:

  • 是否需要进行实时传输
  • 网络状况是否稳定
  • 传输过程是否需要对数据进行加密

由于存在这类诸多原因,因此有了各种各样应用在数据传输过程中的网络应用层协议,比如HTTP、HTTPS、WebSocket、FTP、MQTT等等,以应对不同数据源和不同网络的要求。

数据存储

当我们从目标数据源获取到了数据后,肯定不希望数据就放在计算机的内存里,因为这样数据可能很快就丢了,下次要用的时候找不到了。因此我们需要将数据进行持久化,保证我们在以后需要使用这些数据的时候,能顺利的再次调出数据。

我们最熟悉的数据持久化形式,就是我们硬盘中的各种文件,通过文件的形式,我们可以将数据长期保持起来,想查看的时候可以随时查看,并可以进行分类整理,或者想分享给别人的时候可以通过网络发送给别人、或是通过U盘等介质复制给别人。

不过这种单纯的文件形式,在数据查询和数据操作上的能力还是非常弱的,比如我想从我硬盘上一堆文件中,得知文件内容中含有“一斤代码”四个字的文件的总字数,这个需求要通过纯文件的方式来实现,恐怕是比较难的。

为了实现这种数据持久化和数据管理方便性等问题,出现了一种系统软件:数据库软件。你可能听说过下面中的某些:MySQL,Oracle,SQL Server,DB 2,PostgreSQL等等,这些就是一些我们当今比较常用的数据库软件了,它们可以实现对数据进行高效组织、快速管理和查询。此外,数据库软件也分为关系型(SQL)和非关系型(NoSQL),关系型数据库主要比较擅长于存储和处理结构化的数据(就是数据集合中每条数据的字段都是事先定义好的,比如一张记录用户登录信息的表格中,你总事先定义出这张表格所包含的字段,如登录名,密码,性别,生日等等);而非关系型数据库则更擅长于存储和处理非结构化的数据,比如百货公司要在一张表里存储货物信息,而用于存储描述水果和刀具所需要的字段是不太一样的,如果用结构化的描述,很可能会出现一些冗余字段,比如对水果来说,用于描述刀具的厚度这个字段肯定是不需要的;而对于刀具来说,用于描述水果的保质期字段也显得多余。而如果使用非结构化的数据库,则我们就不需要考虑这样的情况了,在同一个表里容许数据之间的格式不统一。

像上面提到的MySQL,Oracle,SQL Server,DB 2,PostgreSQL等都是关系型数据库;而非关系型数据库近年来也呈飞速发展态势,比如著名的有MongoDB,Redis,CouchDB,Cassandra等。

关系型和非关系型数据库各有其长处和短处,目前来说并不是某一种数据库能包治百病。在实际使用过程中,需要好好调研,根据项目自身的实际情况,切实的清楚要解决什么问题,以此来决定选用何种数据库,或结合选用多种数据库。

数据的再使用

当我们把收集到的数据存储到数据库后,后面的事情就是对这些数据根据我们的业务需要进行使用了。最常见的就是使用后端开发语言比如Java、Python等,连接数据库并进行对数据的查询、新增、修改、删除等操作。也可以将数据库中的数据,按照某些业务逻辑,导出成报表,供用户下载查看等。或者将数据输入到某些数学模型,进行模型的训练,比如最近非常热门的人工智能机器学习,就需要使用大量数据对其数学模型进行训练。

今天就讲这么多吧,给大家一个比较笼统的概念,虽然笼统,但总比完全没有概念好,哈哈~祝大家学习愉快。

DT时代,数据就是生产力! 欢迎关注一斤代码的系列课程《从编程小白到全栈开发》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯移动品质中心TMQ的专栏

精准测试之精简用例

1 背景 手机管家目前有6年多的历史了,一直在持续不断的加入新特性,每次发布前除了新增功能之外,旧的核心功能也是发布之前必须确保的。 1.1当前用例情况 6年的...

2288
来自专栏嵌入式程序猿

MQTT,你绝对要学习的物联网通信协议

随着物联网的火热,从google,亚马逊,微软到国内的百度,腾讯,阿里等巨头都发布物联网平台以及开发套件,支持MQTT(Message Queuing Tele...

4117
来自专栏浪淘沙

java学习day1--JDK

2018.6.4 今天是实训的第一天,从今天起,我将每天在这里记录每天的学习知识。 1、Java是跨平台的语言。 因为字节码是在虚拟机上运行的,而不...

872
来自专栏DevOps时代的专栏

特性分支与特性开关哪家强?

合并冲突 新产品研发初期代码量较少,团队规模也不大,这种时候并不需要太多正式流程。 然而,即使一个团队只有两名开发人员,为了有效避免冲突,仍然建议不要在同时对...

2217
来自专栏KaliArch

Serverless初探

无服务器计算是指开发者在构建和运行应用时无需管理服务器等基础设施,应用被解耦为细粒度的函数,函数是部署和运行的基本单位。用户只为实际使用的资源付费。这些代码完全...

5.3K5
来自专栏王亚昌的专栏

UNIX编程艺术之“模块性”

     本章主要讨论模块划分、接口设计,提出了几个很重要的概念,包括紧凑性、正交性、自顶向下和自底向上的设计、SPOT原则、分层、插件化。下面就这几个概念,谈...

1062
来自专栏北京马哥教育

脱贫利器 | PYTHON多线程行情抓取工具实现

? ? 思路 ? 借助python当中threading模块与Queue模块组合可以方便的实现基于生产者-消费者模型的多线程模型。Jimmy大神的tushar...

4686
来自专栏编程派的专栏

小白学 Scrapy 爬虫系列之一:准备实验机器

本系列文章中,笔者将带领大家从零开始学习爬虫编写。在跟随笔者一起实操之前,要求大家有一定的 Python 基础。之前没接触过的同学也不用担心,Python 号称...

2600
来自专栏架构师之路

互联网分层架构之-DAO与服务化

互联网分层架构的本质,是数据的移动。 互联网分层架构演进的核心原则: 让上游更高效的获取与处理数据,复用 让下游能屏蔽数据的获取细节,封装 这些在上一篇《互联网...

4228
来自专栏JAVA高级架构

JAVA架构师面试题,如何成为架构师

经常面试一些候选人,整理了下我面试使用的题目,陆陆续续整理出来的题目很多,所以每次会抽一部分来问。答案会在后面的文章中逐渐发布出来。 基础题目 Java线程的...

99111

扫码关注云+社区

领取腾讯云代金券