精华内容
下载资源
问答
  • 什么要学习数据库以及数据库的选择
    千次阅读
    2022-01-06 08:16:30

    一、为什么要学习数据库

            1.数据库概念

            数据库(Database),就是暗转数据结构来组织、存储和管理数据,建立在计算机存储设备上的仓库。我们可以吧数据库看成电子化的文件库,也就是存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。

            2.为什么需要数据库

            一般情况向下,要保存用户的数据,一个最简单的方法是吧用户数据据写入文件。例如,要保存用户密码信息,可以写入下面的文件中txt文件:

            保存用户购买的道具prop.txt

            但是,随着应用程序的功能越来越复杂,数据量越来越大,如何管理这些数据就成了大问题:

    • 读写文件并解析出数据需要大量重复代码;
    • 从成千上万的数据中快速查询出指定数据需要复杂的逻辑;
    • 数据缺乏安全感

            如果每个应用程序都各自写自己的读写数据的代码,一方面效率低,容易出错,另一方面,每个应用程序访问数据数据的接口都不相同,数据难以复用。

            所以,数据库作为一种专门管理数据的软件就出现了。应用程序不需要子句管理数据,二十通过数据库软件提供的接口来读写数据。至于数据本身如何存储到文件在,那是数据库软件的事情,应用程序自己并不关心。

            这样以来,白那些应用程序的时候,数据读写的功能就被大大地简化了。

    二、程序员为什么要学习数据库

    •  几乎任何一个企业级应用,都要用到数据库。(QQ、淘宝、京东、微信.......)
    • 无论开发、测试、运维还是架构师,数据库都是加分神器
    • 小的软件企业分工不明确,全能型人才能得到更多的机会(就业和提升)
    • 外包和自由程序员必备

     三、数据库的选择

    1.主流数据库简介

            当今市面上的数据库产品众多,每种数据库都有自己的优势和缺点,或出于数据库的性能和易用性考虑,或出于商用和开源考虑,如何选择自己合适的数据库产品,成为重中之中。

             主要的数据库产品有如下几种:

            Oracle - 作为一种商业性数据库,在事务处理方面有自己独到的优势,功能比较强大,市场占有率也比较高。oracle数据库是一种大型的关系型数据库,在使用上会收费。在部署上,可以根据自己的环境采用单节点或者集群部署。经常会使用于银行和金融机构,存储大量数据,可以对海量数据进行分析处理,在安全性上使用访问控制和多种数据备份机制,可靠性高。

            Mysql - 作为一种开源的轻量级数据库,在开源数据库中比较流行,由于小巧安装方便快捷,经常会用于互联网公司,维护也比较方便。因为开源,使用上比较灵活,mysql还有许多第三方的存储引擎,可以根据自己的需要进行安装。在功能上mysql可能没有oracle强大,但是对于资源的占用非常少,数据恢复快。在维护上,追求稳定的性能和易用性。

            Redis - 作为一种缓存数据库,对于数据的读写特别快,redis之所以快,是因为它数据放在内存中,但是内存比较贵,另一方面,内存也是有限制的,当内存不够时,就需要使用redis的分布式方案。redis作为一种非关系型数据库,可以适用于高并发场景,配合关系型数据库作为做高速缓存,也可以降低磁盘IO,使用键值对存储,不适用于结构复杂的sql数据

             另外MongoDB, SQL Server等数据库也是常用的数据库。

            2.选择数据库

            选择数据库时,既要考虑成本,还有考虑维护的稳定和便利性,结合自己的设备规模。最重要的,需要结合我们的业务,如果高安全性,海量数据,能承担高昂的成本,可以选择oracle;一般应用的快速查询,高并发访问,一般情况下都可以选择mysql,另外特殊情况特殊处理!

            1.使用MySQL的优势

            如今很多主流网站都选择MySQL数据库来存储数据,比如阿里巴巴的淘宝。那么,MySQL到底有什么优势,吸引了这么多用户?主要是基于以下几点原因:

            开源
            开源软件是互联网行业未来发展的趋势。MySQL是开放源代码的数据库,这就使得任何人都可以获取MySQL的源代码,并修正MySQL的缺陷,并且任何人都能以任何目的来使用该数据库,这是一款自由使用的软件。对于很多互联网公司来说,选择使用MySQL是一个化被动为主动的过程,无须再因为依赖封闭的数据库产品而受牵制。

            成本因素
            MySQL社区版是完全免费的,企业版基于服务和支持收费。相比之下,Oracle、DB2和SQL Server价格不菲,再考虑到搭载的服务器和存储设备,那么成本差距是巨大的。

            跨平台性
            MySQL不仅提供Windows系列的版本,还提供UNIX、Linux和Mac OS等操作系统对应的版本。因为很多网站都选择UNIX、Linux作为网站的服务器,所以MySQL具有跨平台的优势。

            容易使用
            MySQL是一个真正的多用户、多线程SQL数据库服务器,能够快速、高效、安全地处理大量的数据。MySQL和Oracle性能并没有太大的区别,在低硬件环境下,MySQL分布式的方案同样可以解决问题,而且成本比较经济,从产品质量、成熟度、性价比来讲,MySQL都是非常不错的。另外,MySQL的管理和维护非常简单,初学者很容易上手,学习成本较低。

            2.版本选择

            MySQL从5.7版本直接跳跃发布了8.0版本,可见这是一个令人兴奋的里程碑版本。MySQL 8版本在功能上做了显著的改进与增强,不仅在速度上得到了改善,还提供了一系列巨大的变化,为用户带了更好的性能和更棒的体验。
    三个字形容,就是比以前的更棒 棒 棒!

    更多相关内容
  • 本文档参考:孔丽红老师主编的《数据库原理》总结,包括超星学习通练习及期末复习资料,适合工程大数据库原理期末复习使用
  • 数据库原理学习记录

    2020-12-14 10:52:51
    数据库原理学习记录1前言设置服务器支持中文设置中文字符SQLyog本地连接失败的问题 前言 用来记录学习过程中的问题及解决方式,督促自己不断学习。 设置服务器支持中文 注意win10不允许直接改,需要先复制到其它盘,...
  • 数据库原理与应用ppt

    2018-09-11 15:39:07
    数据库原理与应用(电子讲稿_翁小兰)
  • 数据库原理教案.doc

    2020-03-04 14:54:09
    数据库原理教案,数据库是计算机科学与技术、软件工程、网络工程、信息安全专业的一门必修课。在计算机技术深入发展和广泛应用的今天,数据库技术已成必不可少的重要分支。例如在管理信息系统、办公室自动化技术、...
  • 如果能再把离散数学、数字电路、体系结构、数据结构/算法、编译原理学通透,再加上丰富的实践经验与领域特定知识,就能算是一个优秀的工程师了。 ​ 计算机其实就是存储/IO/CPU三大件; 而计算说穿了就是两个东西:...

    只会写代码的是码农;学好数据库,基本能混口饭吃;在此基础上再学好操作系统和计算机网络,就能当一个不错的程序员。如果能再把离散数学、数字电路、体系结构、数据结构/算法、编译原理学通透,再加上丰富的实践经验与领域特定知识,就能算是一个优秀的工程师了。

    计算机其实就是存储/IO/CPU三大件; 而计算说穿了就是两个东西:数据与算法(状态与转移函数)。常见的软件应用,除了各种模拟仿真、模型训练、视频游戏这些属于计算密集型应用外,绝大多数都属于数据密集型应用。从最抽象的意义上讲,这些应用干的事儿就是把数据拿进来,存进数据库,需要的时候再拿出来。

    抽象是应对复杂度的最强武器。操作系统提供了对存储的基本抽象:内存寻址空间与磁盘逻辑块号。文件系统在此基础上提供了文件名到地址空间的KV存储抽象。而数据库则在其基础上提供了对应用通用存储需求的高级抽象

    互联网应用大多属于数据密集型应用,对于真实世界的数据密集型应用而言,除非你准备从基础组件的轮子造起,不然根本没那么多机会去摆弄花哨的数据结构和算法。甚至写代码的本事可能也没那么重要:可能只会有那么一两个Ad Hoc算法需要在应用层实现,大部分需求都有现成的轮子可以使用,主要的创造性工作往往在数据模型与数据流设计上。实际生产中,数据表就是数据结构,索引与查询就是算法。而应用代码往往扮演的是胶水的角色,处理IO与业务逻辑,其他大部分工作都是在数据系统之间搬运数据

    在最宽泛的意义上,有状态的地方就有数据库。它无所不在,网站的背后、应用的内部,单机软件,区块链里,甚至在离数据库最远的Web浏览器中,也逐渐出现了其雏形:各类状态管理框架与本地存储。“数据库”可以简单地只是内存中的哈希表/磁盘上的日志,也可以复杂到由多种数据系统集成而来。关系型数据库只是数据系统的冰山一角(或者说冰山之巅),实际上存在着各种各样的数据系统组件:

    • 数据库:存储数据,以便自己或其他应用程序之后能再次找到(PostgreSQL,MySQL,Oracle)
    • 缓存:记住开销昂贵操作的结果,加快读取速度(Redis,Memcached)
    • 搜索索引:允许用户按关键字搜索数据,或以各种方式对数据进行过滤(ElasticSearch)
    • 流处理:向其他进程发送消息,进行异步处理(Kafka,Flink,Storm)
    • 批处理:定期处理累积的大批量数据(Hadoop)

    架构师最重要的能力之一,就是了解这些组件的性能特点与应用场景,能够灵活地权衡取舍、集成拼接这些数据系统。绝大多数工程师都不会去从零开始编写存储引擎,因为在开发应用时,数据库已经是足够完美的工具了。关系型数据库则是目前所有数据系统中使用最广泛的组件,可以说是程序员吃饭的主要家伙,重要性不言而喻。

    架构演化:一种分拆方法

    对玩具应用而言,使用内存变量与文件来保存状态也许已经绰绰有余了。但随着系统的增长,我们会遇到越来越多的挑战:软硬件故障把数据搞成一团浆糊(可靠性);状态太多而内存太小放不下(可伸缩性);并发访问控制导致代码复杂度发生爆炸(可维护性),诸如此类。这些问题相当棘手,却又相当普遍,数据库就是用来解决这些问题的。分拆是架构演化的重要方法论,数据库将状态管理的职能从应用程序中分拆出来,即所谓的“状态与计算相分离”。数据库将程序员从重复造轮子的泥潭中解救出来,极大地解放了生产力。

    每个系统都服务于一个目的,解决一类问题。问题比方法更重要。但现实很遗憾,以大多数学生,甚至相当一部分公司能接触到的现实问题而言,拿几个文件甚至在内存里放着估计都能应付大多数场景了(需求简单到低级抽象就可以Handle)。没什么机会接触到数据库真正要解决的问题,也就难有真正使用与学习数据库的驱动力,更别提数据库原理了

    所以我也理解当前这种填鸭教学现状的苦衷:工作之后很难有这么大把的完整时间来学习原理了,所以老师只好先使劲灌输,多少让学生对这些知识有个印象。等学生参加工作后真正遇到这些问题,也许会想起大学好像还学了个叫数据库的东西,这些知识就会开始反刍。


    数据库,尤其是关系型数据库,非常重要。那为什么要学习其原理呢?

    ​ 对优秀的工程师来说,只会数据库是远远不够的。学习原理对于当CRUD BOY搬砖收益并不大,但当通用组件真的无解需要自己撸起袖子上时,没有金坷垃怎么种庄稼?设计系统时,理解原理能让你以最少的复杂度代价写出更可靠高效的代码;遇到疑难杂症需要排查时,理解原理能带来精准的直觉与深刻的洞察。

    ​ 数据库是一个博大精深的领域,存储I/O计算无所不包。其主要原理也可以粗略分为几个部分:数据模型设计原理(应用)、存储引擎原理(基础)、索引与查询优化器的原理(性能)、事务与并发控制的原理(正确性)、故障恢复与复制系统的原理(可靠性)。 所有的原理都有其存在意义:为了解决实际问题。

    ​ 例如数据模型设计中范式理论,就是为了解决数据冗余这一问题而提出的,它是为了把事情做漂亮(可维护)。它是模型设计中一个很重要的设计权衡:通常而言,冗余少则复杂度小/可维护性强,冗余高则性能好。具体来说,冗余字段能加快特定类型的读取(通过消除连接),但在写入时就需要做更多的工作:维护多对象副本间的一致性,避免多对象事务并发执行时发生踩踏。这就需要仔细权衡利弊,选择合适的规范化等级。数据模型设计,就是生产中的数据结构设计不了解这些原理,就难以提取良好的抽象,其他工作也就无从谈起。

    ​ 而关系代数与索引的原理,则在查询优化中扮演重要的角色,它是为了把事情做得快(性能,可扩展)。当数据量越来越大,SQL写的越来越复杂时,它的意义就会体现出来:怎样写出等价但是更高效的查询?当查询优化器没那么智能时,就需要人来干这件事。这种优化往往有四两拨千斤的效果,比如一个需要几秒的KNN查询,如果知道R树索引的原理,就可以通过改写查询,创建GIST索引优化到1毫秒内,千倍的性能提升。不了解索引与查询设计原理,就难以充分发挥数据库的性能。

    估算表膨胀率的复杂SQL一例,能在50ms内完成

    ​ 事务与并发控制的原理,是为了把事情做正确。事务是数据处理领域最伟大的抽象之一,它提供了很多有用的保证(ACID),但这些保证到底意味着什么?事务的原子性让你在提交前能随时中止事务并丢弃所有写入,相应地,事务的持久性则承诺一旦事务成功提交,即使发生硬件故障或数据库崩溃,写入的任何数据也不会丢失。这让错误处理变得无比简单,所有可能的结果被归结为两种情况:要么成功完事,要么失败了事(或重试)。有了后悔药,程序员不用再担心半路翻车会留下惨不忍睹的车祸现场了。

    另一方面,事务的隔离性则保证同时执行的事务无法相互影响(在可序列化隔离等级下)。更进一步,数据库提供了不同的隔离等级保证,以供程序员在性能与正确性之间进行权衡。编写并发程序并不容易,在几万TPS的负载下,各种极低概率,匪夷所思的问题都会出现:事务之间相互踩踏,丢失更新,幻读与写入偏差,慢查询拖慢快查询导致连接堆积,单表数据库并发增大后的性能急剧恶化,比如我遇到的一个最灵异的例子是:快慢查询总量都减少,但因相对比例变化导致数据库被压垮。这些问题,在低负载的情况下会潜伏着,随着规模量级增长突然跳出来,给你一个大大的惊喜。现实中真正可能出现的各类异常,也绝非SQL标准中简单的几种异常能说清的。 不理解事务的原理,意味着应用的正确性与数据的完整性可能遭受不必要的损失。

    隔离等级与一致性

    故障恢复与复制的原理,可能对于普通程序员没有那么重要,但架构师与DBA必须清楚。高可用是很多应用的追求目标,但什么是高可用,高可用怎么保证?读写分离?快慢分离?异地多活?x地x中心?说穿了底下的核心技术其实就是复制(Replication)(或再加上自动故障切换(Failover))。这里有无穷无尽的坑:复制延迟带来的各种灵异现象,网络分区脑裂存疑事务 ,诸如此类。 不理解复制的原理,高可用就无从谈起。

    ​ 对于一些程序员而言,可能数据库就是“增删改查”,包一包接口,原理似乎属于“屠龙之技”。如果止步于此,那原理确实没什么好学的,但有志者应当打破砂锅问到底的精神。私认为只了解自己本领域知识是不够的,只有把当前领域赖以建立的上层领域摸清楚,才能称为专家。在数据库面前,后端也是前端;对于程序员的知识栈而言,数据库是一个合适的栈底。


    ​ 上面讲了WHY,下面就说一下 HOW

    ​ 数据库教学的一个矛盾是:如果连数据库都不会用,那学数据库原理有个卵用呢?

    ​ 学数据库的原则是学以致用只有实践,才能带来对问题的深刻理解;只有先知其然,才有条件去知其所以然。教材可以先草草的过一遍,然后直接去看数据库文档,上手去把数据库用起来,做个东西出来。通过实践掌握数据库的使用,再去学习原理就会事半功倍(以及充满动力)。对于学习而言,有条件去实习当然最好,没有条件那最好的办法就是自己创造场景,自己挖掘需求。

    ​ 比如,从解决个人需求开始:管理个人密码,体重跟踪,记账,做个小网站、在线聊天App,实用微信小程序。当它演化的越来越复杂,开始有多个用户,出现各种蛋疼问题之后,你就会开始意识到事务的意义。

    ​ 再比如,结合爬虫,抓一些房价、股价、地理、社交网络的数据存在数据库里,做一些挖掘与分析。当你积累的数据越来越多,分析查询越来越复杂;SQL长得没法读,跑起来慢出猪叫,这时候关系代数的理论就能指导你进一步进行优化。

    ​ 当你意识到这些设计都是为了解决现实生产中的问题,并亲自遇到过这些问题之后,再去学习原理,才能相互印证,并知其所以然。当你发现查询时间随数据增长而指数增长时;当你遇到成千上万的用户同时读写为并发控制焦头烂额时;当你碰上软硬件故障把数据搅得稀巴烂时;当你发现数据冗余让代码复杂度快速爆炸时;你就会发现这些设计存在的意义。

    ​ 教材、书籍、文档、视频、邮件组、博客都是很好的学习资源。教材的话华章的黑皮系列教材都还不错,《数据库系统概念》这本就挺好的。


    纸上得来终觉浅,绝知此事要躬行。写了这么多,不带点“私货”也不合适哈?实践方能出真知,新手上路选哪家?我个人推荐PostgreSQL,如果能再选一样就加个Redis。对开发而言,这是相当实用的组合。PostgreSQL号称世界上最先进的开源关系型数据库,源代码写的非常漂亮,有很多值得学习的地方。很多国外的数据库课程与教科书都使用PostgreSQL作为教学样例。

    PostgreSQL在现实世界中也表现不俗,在我们的实践中,在250WTPS与200TB数据的量级下,单一PostgreSQL选型依然能稳如狗地支撑业务。而且其功能丰富到不可思议,能在很可观的规模内做到一专多长,除了本职的OLTP,Pg还在相当长的时间里兼任了缓存,OLAP,批处理,甚至消息队列的角色。当然如“架构演进”一图所示,神龟虽寿,犹有竟时。最终这些兼职功能还是要逐渐分拆出去由专用组件负责,但那已经是近千万日活时的事了。

    所以,关系型数据库虽然强大,却绝非数据处理的终章。数据库的世界非常精彩,尽可能地去尝试各种各样的组件吧~。

    还有就是这我总结出了一些架构视频资料和互联网公司java程序员面试涉及到的绝大部分面试题和答案做成了文档和架构视频资料还有完整高清的java进阶架构学习思维导图免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。 资料领取方式:关注 私信关键字【资料】即可免费获取!!!

    如果您喜欢本文章,可以点击关注,每天将有更多精彩文章与您分享!

    展开全文
  • 学习数据库原理.pdf

    2021-10-05 23:33:37
    学习数据库原理.pdf
  • 数据库原理

    2018-01-04 16:21:33
    目前比较好的学习数据库知识的书籍,作者也是国内知名的数据库方面的教授专家,结合国外著作,详细讲述了数据库知识
  • 数据库原理这门课已经了一周多了,基础概念知识比较多,也比较杂,下面整理一下,也算是增加一点记忆。 ** 数据库的四个基本概念 ** 数据(Data):数据是描述事物的符号记录,数字,文字,图像,音频,视频,学生...
  • 海 无 涯 关于数据库原理与运用学习心得体会 摘要 信息资源已成为社会各行业的重要资源和财富,作为实施有效 信息处理的信息系统已成为一个企业或组织生存和发展的重要 基础条件由于数据库技术是信息系统的核心和...
  • 自考 04735 数据库系统原理 2018版 各章节思维导图 个人整理,供各位考友学习复习使用,其他自考资源会陆续上传
  • 内容为数据库系统原理及MySQL应用教程习题答案,适用于学习本书的人
  • 所有答案都验证过3遍,符合题意且结果正确,如疑问可留言 1. 创建数据库数据库表 这么简单自己按照表建 2. 简单的数据查询 查询所有同学的基本信息,包括:学号s_no、班级号class_no、姓名s_name、性别s_sex、...
  • 经典数据库学习实践题目,包含常见的数据库操作案例,正在学习数据库或者想要学习数据库的小伙伴快来下载吧
  • 数据库期末考试,数据库试题,数据库原理与应用,数据库开发技术。 数据库中国人民大学数据库题库,数据库期末考试,数据库试题,数据库原理与应用,数据库开发技术。 数据库中国人民大学数据库题库,数据库期末...
  • 数据库原理课件

    2018-12-17 15:05:39
    用于期末复习自己平时学习数据库
  • 实验六 数据库原理综合实验 1 实验目的 (1) 运用所的数据库设计技术,针对一个具体的应用系统,完成系统数据库的概念模型、逻辑模型和物理模型的设计。以巩固理论课程上所的知识,更好地掌握数据库设计技术...
  • 自考 04735 数据库系统原理 2018版 各章节思维导图 个人整理,供各位考友学习复习使用,其他自考资源会陆续上传,建议去下载那个常考操作,比较全,这些章节没那个细致
  • 高科学院 数据库原理及应用课程设计 专 业 软件工程 班 级 1802 班 号 2018090242 姓 名 拓岩松 指 导 教 师 陶永芹 课程设计时间 2020.7.1 成 绩 批 改时间 一 系统需求分析 1.1 从读者角度考虑的数据流程图 图 ...
  • 学习之数据库原理.pdf

    2021-10-05 23:30:44
    学习之数据库原理.pdf
  • 实时数据库原理

    2018-07-13 14:37:36
    实时数据库就是其数据和事务都显式定时限制的数据库。系统的正确性不仅依赖于事务的逻辑结果,而且依赖于该逻辑结果所产生的时间。本资源是某公司对实时数据库的介绍,仅供感兴趣者下载学习。
  • 学院 课程教学进度计划表 20 20 学年第二学期 课 程 名 称 NoSQL数据库原 授 课 时 48 主讲责任教师 参与教学教师 授课班级/人数 专业教研室 填 表 时 间 专业 教研室主任 教务处编印 年 月 一课程教学目的 NoSQL...
  • 学习数据库原理与应用试题及答案.pdf
  • 数据库原理实验报告四 ( 答 案) 南 京 晓 庄 数据库原理与应用 课程实验报告 实验四 查询设计实验 所在院 ( 系: 数学与信息技术学院 班级 学号 姓名 1.实验目的 (1) 了解查询的目的掌握 SELECT 语句的基 本...
  • 自考 04735 数据库系统原理 2018版 各章节思维导图 个人整理,供各位考友学习复习使用,其他自考资源会陆续上传
  • 自考 04735 数据库系统原理 2018版 各章节思维导图 个人整理,供各位考友学习复习使用,其他自考资源会陆续上传
  • 自考 04735 数据库系统原理 2018版 各章节思维导图 个人整理,供各位考友学习复习使用,其他自考资源会陆续上传
  • 数据库原理书籍

    2018-08-15 12:51:17
    数据库书籍,通过学习这本书,发现数据库其实是一种很容易就可以掌握的技术
  • 把今天数据库原理的学习笔记收集整理,供日后复习使用。* 是我认为重要的知识点~ 文章目录数据库系统的基本概念(一)数据库系统的目的(二)*数据的存储方式在文件处理系统中存储组织信息的主要弊端(三)数据库与...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 308,745
精华内容 123,498
关键字:

学数据库原理有什么用