有些事情时刻都在发生,但是我们通常很少意识到它们的存在。比如,当我们使用网页或移动应用的时候,其实在不断的产生着数据:注册一个网站或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时代,数据就是生产力!
欢迎关注一斤代码的系列课程《从编程小白到全栈开发》