精华内容
下载资源
问答
  • SQL查询数据库中某一字段

    有些时候我们经常需要哪里用到了一些表,又或者什么时候执行了某一个存储过程。整理出了在某段时期内数据库执行的sql查询。也可以查询到数据库中某些字段的存放处。很好很强大,希望能帮到大家~

    SELECT TOP 1000 
    --创建时间 
    QS.creation_time, 
    --查询语句 
    SUBSTRING(ST.text,(QS.statement_start_offset/2)+1, 
    ((CASE QS.statement_end_offset WHEN -1 THEN DATALENGTH(st.text) 
    ELSE QS.statement_end_offset END - QS.statement_start_offset)/2) + 1 
    ) AS statement_text, 
    --执行文本 
    ST.text, 
    --执行计划 
    QS.total_worker_time, 
    QS.last_worker_time, 
    QS.max_worker_time, 
    QS.min_worker_time 
    FROM 
    sys.dm_exec_query_stats QS 
    --关键字 
    CROSS APPLY 
    sys.dm_exec_sql_text(QS.sql_handle) ST 
    WHERE 
    QS.creation_time BETWEEN '2013-12-0309:00:00' AND '2014-12-03 11:00:00' 
    AND ST.text LIKE '%BK_TSESTATU%' 
    ORDER BY 
    QS.creation_time 


    其中下面一段代码中BK_TSESTATU就是你要模糊搜索的字段

    ST.text LIKE '%BK_TSESTATU%' 


    展开全文
  • 时期Oracle数据库优化设计和对策研究.pdf
  • 时期SQL Server数据库应用维护技术分析.pdf
  • 时期铁路企业oracle数据库应用维护技术探讨.pdf
  • 大学生数据库作业

    2018-12-24 11:32:25
    大学时期数据库作业,学生管理,内有学生成绩和学生档案两个表格以及学生信息窗体和各种SQL查询,希望被采纳
  • 四大基本概念(1)数据--Data① 数据的定义② 数据的种类③ 数据的特点④ 数据举例(2)数据库--Database① 数据库的定义② 数据库的基本特征(3)数据库管理系统--DataBase Management System① 什么是DBMS?...


    0.思维导图

    在这里插入图片描述

    1.四大基本概念

    (1)数据–Data

    • 数据(Data)是数据库中存储的基本对象

    ① 数据的定义

    描述事物的符号记录

    ② 数据的种类

    文本、图形、图像、音频、视频、学生的档案记录、货物的运输情况等

    ③ 数据的特点

    数据与其语义是不可分的

    ④ 数据举例

    • 数据的含义称为数据的语义,数据与其语义是不可分的。

    例如 93是一个数据
    语义1:学生某门课的成绩
    语义2:某人的体重
    语义3:计算机系2003级学生人数
    语义4:请同学给出。。。

    学生档案中的学生记录
    (李明,男,197205,江苏南京市,计算机系,1990)
    语义:学生姓名、性别、出生年月、籍贯、所在院系、
    入学时间
    解释:李明是个大学生,1972年5月出生,江苏南京市人,1990年考入计算机系

    (2)数据库–Database

    ① 数据库的定义

    数据库(Database,简称DB)是长期储存计算机内有组织可共享的大量数据集合

    ② 数据库的基本特征

    • 数据按一定的数据模型组织、描述和储存
    • 可为各种用户共享
    • 冗余度较小
    • 数据独立性较高
    • 易扩展

    (3)数据库管理系统–DataBase Management System

    ① 什么是DBMS?

    DBMS是位于用户与操作系统之间的一层数据管理软件。是基础软件,是一个大型复杂的软件系统

    ② DBMS的用途

    科学地组织和存储数据、高效地获取和维护数据

    ③ DBMS的主要功能

    • 数据定义功能
      提供数据定义语言(DDL)
      定义数据库中的数据对象

    • 数据组织、存储和管理
      分类组织、存储和管理各种数据
      确定组织数据的文件结构和存取方式
      实现数据之间的联系
      提供多种存取方法提高存取效率

    • 数据操纵功能
      提供数据操纵语言(DML)
      实现对数据库的基本操作 (查询、插入、删除和修改)

    • 数据库的事务管理和运行管理
      数据库在建立、运行和维护时由DBMS统一管理和控制
      保证数据的安全性、完整性、多用户对数据的并发使用
      发生故障后的系统恢复

    • 数据库的建立和维护功能(实用程序)
      数据库初始数据装载转换
      数据库转储
      介质故障恢复
      数据库的重组织
      性能监视分析等

    • 其它功能
      DBMS与网络中其它软件系统的通信
      两个DBMS系统的数据转换
      异构数据库之间的互访和互操作

    (4)数据库系统–Database System

    ① 什么是数据库系统(Database System,简称DBS)

    在计算机系统中引入数据库后的系统构成

    ② 数据库系统的构成

    • 数据库 Database
    • 数据库管理系统(及其开发工具)Database Management System
    • 应用系统
    • 数据库管理员 Database Administrator

    在这里插入图片描述

    ③ 数据库系统的特点

    ❶ 数据结构化
    • 整体数据的结构化是数据库的主要特征之一

    • 整体结构化
      不再仅仅针对某一个应用,而是面向全组织
      不仅数据内部结构化,整体是结构化的,数据之间具有联系

    • 数据库中实现的是数据的真正结构化
      数据的结构用数据模型描述,无需程序定义和解释
      数据可以变长
      数据的最小存取单位是数据项

    ❷ 数据的共享性高,冗余度低,易扩充
    • 数据库系统从整体角度看待和描述数据,数据面向整个系统,可以被多个用户、多个应用共享使用。
    • 数据共享的好处
      减少数据冗余,节约存储空间
      避免数据之间的不相容性与不一致性
      使系统易于扩充
    ❸ 数据独立性高
    • 物理独立性
      指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。当数据的物理存储改变了,应用程序不用改变。
    • 逻辑独立性
      指用户的应用程序与数据库的逻辑结构是相互独立的。数据的逻辑结构改变了,用户程序也可以不变。
    • 数据独立性是由DBMS的二级映像功能来保证的
    ❹ 数据由DBMS统一管理和控制

    DBMS提供的数据控制功能

    • (1)·数据的安全性(Security)保护·
      保护数据,以防止不合法的使用造成的数据的泄密和破坏。
    • (2)数据的完整性(Integrity)检查
      将数据控制在有效的范围内,或保证数据之间满足一定的关系。
    • (3)并发(Concurrency)控制
      对多用户的并发操作加以控制和协调,防止相互干扰而得到错误的结果。
    • (4)数据库恢复(Recovery)
      将数据库从错误状态恢复到某一已知的正确状态。
    ❺ 应用程序与数据的对应关系(数据库系统)

    在这里插入图片描述

    2.数据管理技术的产生和发展

    (1) 什么是数据管理

    • 对数据进行分类、组织、编码、存储、检索和维护
    • 数据处理的中心问题

    (2) 数据管理技术的发展过程

    • 人工管理阶段(20世纪40年代中–50年代中)
    • 文件系统阶段(20世纪50年代末–60年代中)
    • 数据库系统阶段(20世纪60年代末–现在)

    (3)时期

    • 20世纪60年代末以来

    (4) 产生的背景

    • 应用背景 大规模管理
    • 硬件背景 大容量磁盘、磁盘阵列
    • 软件背景 有数据库管理系统
    • 处理方式 联机实时处理,分布处理,批处理
    展开全文
  • 最全中华古诗词数据库, 唐宋两朝近一万四千古诗人, 接近5.5万首唐诗加26万宋诗. 两宋时期1564位词人,21050首词。
  • 韩锋阿里云高级产品专家dbaplus社群联合发起人,CCIA(中国计算机协会)常务理事;Oracle ACE,具有丰富的一线数据库架构、设计、开发经验,著有《SQL优化最佳实践》《数据库...

    韩锋

    阿里云高级产品专家

    • dbaplus社群联合发起人,CCIA(中国计算机协会)常务理事;

    • Oracle ACE,具有丰富的一线数据库架构、设计、开发经验,著有《SQL优化最佳实践》《数据库高效优化》等书籍。

    大家好,我是韩锋,一个数据库领域资深从业者(好吧,我是个70后)。近些年来,主要从事数据库产品、架构等工作。本文我将以个人感受,谈谈在新时期下数据库架构优化工作的一些问题,供大家参考。

    下面的分享,我将从外部环境对数据库架构的影响、当前架构中若干热门的技术问题、之前的架构实践经历,以及个人如何成长等方面谈谈我的感受。

    新时期数据库架构优化 - 环境篇

    首先谈下外部因素对架构工作的影响。有些同学可能会感到疑惑,架构问题不是技术问题嘛,为什么还要考虑外部因素?这里是有个误区的,架构的本质是为了解决企业的业务问题,针对某一问题可能有很多种解法,选择最为合适的(而非最优的)是考验一个架构师的核心能力。

    正如上图中,右下角的描述“脱离企业环境的架构,都是耍流氓”。那么影响架构的外部因素有哪些呢?

    • 单位属性:包括企业、事业、军工等。不同单位属性,对架构诉求点是有差异的,粗浅的理解企业单位是追求利益最大化的、事业单位更多会从公共视角考虑问题、而军工则会从国防安全角度思考;

    • 行业属性:包括互联网、金融、制造业、能源、交通等等。不同行业属性,同样存在差异。例如互联网企业往往比较激进,容易考虑一些自研、开源产品;金融企业则相对稳健,多从稳定安全角度考虑等;

    • 用户属性:可简单划分为C端、B端、G端,对应个人用户、企业用户、政府用户。个人用户需求,对架构灵活度、可扩展能力往往有较高要求;而企业客户则更为强调稳定服务、生态兼容等因素;政府客户则对数据安全、高可用方面有着更高的要求;

    • 发展阶段:企业处于不同发展阶段,对架构的要求也不同。初创期的企业,往往看重架构快速构建能力,满足业务发展初期的多变性和时间性;快速增长期的企业,则看重架构扩展能力和演进发展能力;稳定期的企业,看重架构的稳定服务能力和TCO;而衰退期,看重架构的TCO和可裁剪性;

    • 大环境:外部大环境,对整体经济面影响,也会影响到企业对于架构的选择。当经济下行的时候,更多的企业会考虑架构稳定和TCO,而非创新;

    • 新增长点:在某新兴领域的增长点,对于架构往往会带来特殊的要求。这也是业务特点所导致的,需要有个技术逐步摸索的过程。例如物联网、直播、电商等都如此。会有非常鲜明的带有特殊背景的技术诉求。

    1、内外部需求

    下面将以一个较为传统的企业客户视角,看看其内外部的需求是什么?这些因素都将对后续的架构设计,带来很大的影响。

    1)外在需求

    对于外在需求部分,可分为如下几个方面(有优先级顺序):

    • 服务:在数据库架构上,传统企业通常使用大型商业数据库多年,已经习惯于“交钥匙”的模式。非常看重其完备的服务能力,使得企业可以安心于业务。使每年付出昂贵的服务费,但企业仍然可以接受;

    • 生态:在过去二三十年,国外大型商业数据库在中国取得不错的成绩,这不仅其自身功能很强大,其周边生态也颇为完善。这里不仅包括上下游的配套软件、工具,还包括成熟的架构、设计、开发、运维、测试全栈技术以及积累多年基数很大的技术人才基础;

    • 安可:作为国家的政策要求,对于某些行业自主可控是必须要考虑的。这一点,无疑对国产厂商有很大的优势。但需要注意的是,对于开源软件的使用,企业也要注意评估风险。一方面是可能存在的法律风险(毕竟开源协议比较繁杂);另一方面是技术风险,对开源代码的理解掌握也是需要企业很大投入的;

    • 性价比:作为商业行为,价格因素也是企业重点考虑的。这里需要关注两点:一是价格本身不仅包括一次性采购,还要计算长期服务的问题;二是对于云服务,可能短期较少,但需要关注其长期费用。

    2)内在需求

    对于内在需求部分,可分为如下几个方面(有优先级顺序):

    • 可靠性:数据安全,是数据库的底线。保证数据准确、不丢失,是很多企业第一位去考虑的因素;

    • 可用性:持续可服务,SLA指标在一个较高的水平,也是企业的考察重点。特别是对于核心业务而言;

    • 功能:在功能上,应做到尽量完备。特别是对于已经习惯于大型商业数据库的用户。诸如视图、存储过程、支持复杂SQL等很多备受互联网摒弃的需求,对传统企业而言仍然是必选项。要全部适配改造,其代价往往是无法承担的。此外,对于一些新型功能,如多模、混合负载等,也是功能上的加分项;

    • 扩展性:数据库产品,应具备较为完善的计算、存储的扩展能力,来应对企业可能遇到的业务发展或转型。如果在扩展性上有显式的瓶颈,也应提前告知用户。在整个扩展过程中,应做到尽量顺滑、风险可控;

    • 易用性:尽量降低用户的使用门槛,一个窍门是向大厂靠近,符合大多数人的传统习惯。这一点是很多国产厂商,需要重点加强的。

    2、考量因素

    企业、部门、团队的情况,也会对架构选择有所影响。

    1)公司因素

    如之前环境篇开篇谈到的问题,公司所处行业、性质及发展阶段对架构选择存在不同影响,这里就不赘述了。

    2)部门因素

    • 部门定位:部门定位如何?是否与公司业务强相关?是否有足够的架构主导权?这些都会影响架构选择;

    • 管理者:不同管理者,对架构的选型、落地起着重要作用。毕竟架构的变更,需要花费大量资源,且存在一定技术风险。管理者的态度、做事方式、技术敏感度、所领导团队的执行力等,都会直接或间接影响架构的落地。很难想象一个抱残守缺的管理者,会支持推广一个激进的技术革新;

    • 考核方式:架构调整,意味着变化,可能有收益?可能有风险?这些对个人来说,会直接影响到其考核情况。一个相对宽松、容忍试错的环境,对于架构变更是更为合适的。

    3)团队因素

    • 发展阶段:一个稳定的,受到公司认可的团队,对于架构的落地很重要。否则,采取小步迭代、先边缘后核心的策略,将更为合适;

    • 团队氛围:团队的情况,包括配置、资源、氛围等,对架构也很重要;

    • 个人角色:个人在团队中的角色,能发挥出多大作用?如何从边缘角色中逐步脱颖而出,是值得考虑的。

    新时期数据库架构优化 - 技术篇

    下面的技术篇中,我将谈到企业使用数据库的方式及对当前一些技术选择的个人观点。

    1、使用数据库的N种姿势

    1)商业数据库 + 商业服务

    这是较为传统的一种方式。企业购买大型商业数据库软件,并对应购买服务支持工作。在过去三、四十年里,这是主流方式。可以说也很好地满足了各类企业的快速发展。只是随着近二十年来,互联网化的变革,对此种方式产生了不小的冲击。

    这种方式适合传统企业,对数据库要求较高,自有技术能力有限,未来发展相对固定的情况。未来发展随着商业数据库的发展而变化,从总体来看,未来云化的需求对其冲击较大。此外,在国产化、自主可控化等要求下,也会对这个模式影响较大。

    风险分析:

    • 技术风险:技术封闭、不开放;不符合自主可控要求。

    • 政治风险:如是外商产品,还易受到政治环境的影响。

    • 财务风险:容易受到厂商绑架,经济投入上不太可控。

    • 人员风险:受厂商技术人员技术能力水平影响很大,自有人员无法承担,长期得不到成长。

    • 功能风险:成熟商业产品,很难定制化满足客户个性需求;且存在与其他组件集成风险。

    • 转型风险:采用某商业产品后,想转型其他产品较为困难。

    2)商业数据库 + 自主服务

    这一方式也较为常见。在前一方式中,随着企业使用商业软件的深入,自有服务需求就变得迫切起来。通过建立自有服务体系,可以更好地满足企业自身需求。这种方式,适合有一定技术积累的传统企业。未来发展随着商业数据库的发展而变化,总体相对稳定。

    风险分析:

    在风险方面,与前者类似。其中技术风险上,自有人员对商业产品的把控,较原厂还是有所差距。当然对应人员风险就降低,通过自有人员对产品把控力更大。

    3)开源数据库 + 商业服务

    随着开源数据库的日益成熟,越来越多的企业开始使用开源数据库。但相较于商业数据库,开源方案对企业自有技术能力要求较高。因此,很多考虑搭上开源浪潮的企业,采用这种方式。适用于转型中的企业,从商业走向开源,这种方式可以在一定程度上规避风险。但一般为过渡阶段,长期来看还是要培养企业自有的服务能力。

    风险分析:

    • 技术风险:开源数据库自身技术风险、企业技术选型风险及商业服务能力风险。

    • 人员风险:受厂商技术人员技术能力水平影响很大,需要认真评估。

    • 功能风险:一般而言,开源数据库在功能上相较于商业数据库,还是有所欠缺。因此这部分要仔细评估。

    4)开源数据库 + 自主服务

    这是典型的“互联网”玩法,也是较为常见的一种方式。适用于规模较大,企业定制化要求较高的场景。发展成熟可考虑向企业内部私有云或数据库产品、方案方向发展,甚至对外赋能。

    风险分析:

    风险分析与上者类似,突出人员风险,需长期培养投入。

    5)开源定制数据库 + 商业服务

    这是方案3的一种特殊情况。企业不是使用原生开源产品,而是使用第三方公司定制开源方案,可能是纯软件,也可能是软硬一体式。这类方式,会针对开源软件的不足,做定制化改进,满足企业级软件的需求。但这种方式一般企业无法自己独立运维,需要借助第三方公司的商业支持。对数据库的企业级特性有较高要求,但原生开源数据库又无法满足的情况。对于短期内有去除商业数据库的需求场景,非常适合。随着国内对开源数据库使用水平不断深入,有越来越多的此类初创型企业出现。非常看好这种模式的未来发展。

    风险分析:

    • 技术风险:定制化部分不开放,企业不可把控;此外,原生开源的版本变化,可能短期无法适用到方案中。

    • 人员风险:受厂商技术人员技术能力水平影响很大,需要认真评估。

    • 转型风险:受限于方案,存在一定转型的风险。

    6)私有云 + 云化服务

    企业私有化部署方案,是一种云化折中方案。受限于一些特殊国情,有些企业无法直接使用公有云,但又急需类似公有云的平台能力。因此,某些云厂商或数据库厂商提供了一种私有云化部署方案,可简单理解为将云搬回家。

    过去有种说法,说私有云会逐步萎缩,公有云会一统天下。但从近两年的国内云市场发展来看,私有云的发展速度某些指标甚至超过公有云。当我们现在大谈“toB”市场成为下一个蓝海时,这种模式也是toB服务市场的一个重要组成部分。这种方式,适合于大型企业,长期看好。

    风险分析:

    其风险点除了在财力方面,更多是考虑在对厂商的技术依赖性。相较于传统方案,这种方式的依赖性甚至更高。厂商一般提供很好的私有云,及对应其自有公有云的打通方案;但对其他公有云或企业自有平台,则较难打通。

    7)裸云 + 开源数据库 + 自主服务

    这是一种上云使用的初级阶段,企业仅使用云的IaaS部分,其余均自建。这种方式可充分利用公有云带来的弹性优势,将企业原有的技术积累延续到云端。对于企业来说,这种方式也是最为“平滑”的,甚至应用可以不做更多感知,仍然像使用企业内部IT资源一样,使用公有云资源。很适合于有多云、跨云需求的场合。但缺点是无法利用云厂商技术能力带来的附加值。

    风险分析:

    风险不大,仅仅是依赖公有云底层,很容易迁移到其他云厂商或迁回自有。

    8)裸云 + 商业数据库 + 第三方服务/自主服务

    这是一种较为特殊的情况。企业选择将商业数据库,构建在公有云上。但其没有选择云厂商提供的,而是自主构建或选择第三方厂商协助完成。这往往是一些中小型的企业,其规模不足以支持私有化部署,而应用又依赖于商业数据库产品。企业想要充分利用云的弹性,因此组合出这种使用方式。

    风险分析:

    风险在于,某些商业数据库针对云场景的不予支持,企业有一定技术风险。要么有比较强大的自主技术能力,要么依赖于第三方服务厂商。

    9)云数据库(开源) + 云平台服务

    这是云厂商推出的最为“传统”的数据库服务,也是目前最多的一种选择。云厂商基于开源的数据库版本+自有的平台服务,构建其数据库产品。其核心的数据库与开源的版本,是完全一致的,各家比拼的更多是平台服务能力。这种方式对于企业的运维要求很低,基本可以依赖于云厂商提供的能力(除了个别高可用、容灾需求外)。这一方案比较适合于初期上云企业,可逐步摸索云与原有方式的区别。

    风险分析:

    数据库自身风险不大,毕竟其使用的与开源同一版本,技术上可迁移至其他云厂商。当数据库版本升级后,也可以享受到对应的技术红利。但对平台服务,是存在一定依赖的,各家能力不同,需要有适应过程。此外,运维依赖云厂商,也存在一定技术风险。自主的技术能力,会逐步丧失。

    10)云数据库(开源定制) + 云平台服务

    云厂商除了提供与开源一致版本外,一般还提供私有定制版本。它往往是基于某开源数据库某一版本的深度定制,针对某些特性做了加强。当然有些以反馈社区的方式,回馈给开源(可能未来会merge入新版),但很多仅存在“云私有DB”。如企业有针对某一特殊场景(如秒杀)或其他方面(如金融级数据同步)的强需求,可考虑使用此方案。当然使用也意味着与云厂商深度绑定。此外,在平台服务方面,与上面情况类似。这种方案比较适合于对数据库有一定要求,而原生开源版本又不支持的情况。

    风险分析:

    风险在于绑定单一厂商,一般很难下来。这与使用大型商业数据库的情况类似。当然可以在应用端做个设计,尽量减少对特性的依赖。此外,因为是定制版本,未来开源版本的升级可能不会短时间内支持,甚至可能不会考虑支持,完全走向独立分支的道路。针对这点,企业也是需要关注的。

    11)云原生数据库(自研) + 云平台服务

    某些大的云厂商,除了上述两种外,可通过自研数据库方式,增加未来的产品竞争力。从最新的Gatner报告来看,更多的云厂商加入进来,这也给数据库整体市场带来了活力。从预测来看,均一致看好云原生数据库的未来发展。相较于前两种方式,这类数据库更是诞生于云,从设计之初就更多考虑了云化环境特点,因此极具竞争力。

    当然,从目前来看,现有云原生还处于“初级”阶段,未来在解决了更大规模扩展性、多读多写能力等后,其将真正进入井喷式发展。现有各大厂,在这一领域纷纷重点布局,加大投入。对企业而言,无疑又多了一种选择,特别是某些场景(如海量数据等),原生开源、扩展开源产品均无法满足。

    风险分析:

    风险类似上面,甚至有过之。企业应用将完全依赖于厂商产品。尽管很多是宣传兼容开源或商业数据库,但毕竟不是同一产品。这点还需要企业仔细评估。此外,针对兼容性、备份恢复、高可用、数据同步、跨云容灾等,都是值得投入研究的。

    12)云数据库(自研) + 云服务 + 云托管平台

    这是一类小众的方案,其背景是缘起于数据库厂商与云厂商的蛋糕划分问题。有些数据库厂商(如MongoDB)不希望将云数据库市场由云厂商主导,而是希望可由自身主导,构建不依赖于云厂商的独立生态。目前这种方式国内见得不多。

    2、使用开源的利与弊

    受到众多互联网公司的影响,很多传统企业对于开源方案也是跃跃欲试。但在选择之前,也要看到,开源方案并不是免费的“蛋糕”。让我们来看看,开源方案的利与弊。

    1)“利”的方面

    • 成本价格:这往往是企业最先看到的一点。开源软件,可节省大量的商业采购费用。当然,我们这里要算一笔综合的经济账:价格=采购成本+维护成本+人员成本+时间成本+机会成本;

    • 简单、灵活:相较于商业产品,开源产品往往比较简单、配置灵活、不依赖于特有硬件等。在满足企业的技术要求下,这些确实是开源的优势;

    • 可定制:开源的一大特点,就是源码公开,企业可以根据自身特点进行有针对性的改造。对于企业的某些特殊要求,确实只能通过定制化才能完成;

    • 人才+技术:随着近些年来对开源软件的使用,开源的人才已相对较多,企业可以较为容易地招聘到人才。且企业大规模使用开源,也可逐步提升企业自主技术水平,有利于企业的长期发展。

    2)“弊”的方面

    • 服务:服务,特别是规模化后的服务。开源方案,一般重点着力于核心功能,其周边功能往往比较薄弱,这对于后期服务很不利。通常企业是依靠自身的人员完成服务。这通常需要一定的投入,且整体服务质量较成熟的商业产品仍有较大差距。这一问题,可通过“开源软件+商业服务”的模式,或者通过云服务来提升整体服务水平;

    • 产品责任:这就是所谓的“兜底”问题。国内的企业,往往已经习惯于有外部厂商帮助其兜底,尽量规避自身风险。使用开源,难以找到指定的责任方,兜底更无从谈起。虽然可依靠某些第三方服务商,但其对开源的掌控能力需要评估;

    • 运维复杂度:成熟商业产品,通常经过完备的设计开发、丰富的周边生态、系统的文档化及多年的锤炼积累,其运维复杂度较低,可快速搭建起完善的运维体系。但对于开源而言,需要从头来做,自己独立完成整个过程;

    • 技术演进路线:开源技术的发展,通常没有固定的主导方。企业很难把控,开源软件未来的发展方向。某些企业急需的特性或bug fix,也很难得到及时的响应。企业整体是缺乏把控力的;

    • 性能:开源软件,在一般简单场景下,其性能不差,甚至好于很多商业产品。但从整体综合性能来看,特别是在复杂场景下,其性能往往表现不佳。因此,针对开源方案,往往强调前期架构设计很重要,发挥其强点、规避弱点。但这对于传统企业尤为困难,企业有很多沉重的历史包袱,很难短时间内完全重构。即使决定重构,也需要逐步摸索,小步迭代;

    • 用户体验:开源软件的第一诉求,是功能的实现,其针对用户体验往往考虑不多。使用惯商业产品的用户,需要一个“由奢入俭”的适应过程;

    • 企业级特性:企业用户,对数据库的使用是有其专有特性,例如:安全审核、数据加密等等。这类功能对于企业很重要,但对其他类用户相对意义不大。很多开源软件,不会在这些上大做功夫。

    3、云与传统数据库的差异

    1)云DB与传统DB的差异

     ① 核心功能

    对于托管类数据库产品而言,其核心功能还是要跟官方产品走。当然,各个大厂都有着自己多年丰富的实践经验,并具备一定的内核研发能力。于是,往往针对原生产品做一些定制化的改造,进而提供与原生产品差异化的能力。改造方向上,往往倾向于下面几类:

    • 性能:深度优化后的产品,往往较原生性能有较大的提升。这也变相为用户提高了综合性价比;

    • 功能:针对原生产品功能不足,增强其功能。特别是对于有些企业级功能,更为需要优先满足。这也成为很多线下客户,选择云数据库产品的重要考量因素;

    • 业务:有些大厂根据自己在某业务领域的积累,有针对性地增加了特定场景下的数据库端解决方案。这对于同行业客户来说,非常具有吸引力。

    针对上述定制化后产品,有时就成为某种“银弹”,对于企业客户很具吸引力;但事情也具有两面性,对于这些特殊之处的依赖,也会导致客户对产品的依赖。这也是某些客户犹豫之处。在我看来,这个问题的要点在于企业处于的发展阶段。不同阶段的企业,核心诉求不同,在此处的考虑角度也会不同。

     ② 外围功能

    除了核心功能外,还有些非数据库核心能力,但对于企业使用必不可少的功能。例如:监控、备份恢复、优化、容灾等等。如果没有云的话,这些能力往往是需要企业花费精力去自建的。哪怕企业数据库规模不大、使用复杂度不高,使用开源数据库也能满足需求,但上述需求还是要满足的。于是,前两年平台很火,很多企业都自建了自己的内部运维平台,构建上述能力。当然这种方式有利有弊。利之处在于,企业可以根据自身需求度身定制,满足个性化需求;弊之处在于,构建能力及花费资源长期维护。

     ③ 云功能

    如果说,上述功能企业还是可以较容易具备的,那么云功能则相对门槛有些高了。这里所说的“云功能”,是指例如弹性扩缩容等类。这类能力,往往需要依托于强大的底座能力,是需要较大的研发投入和长期积累才能具备。在某些特定的场合下,这一能力对企业很具吸引力,例如业务形态、幅度变化很大的企业客户。

     ④ 生态功能

    企业选择上云,往往不是仅依靠一两款产品,而更多是看中云端生态功能。对于企业来讲,如何通过云端打通技术瓶颈,快速具备业务能力成为核心。例如从数据埋点、数据捕捉、数据存储、数据计算到分析展示,如果全流程都可以在云端无缝集成,对于企业来说,是很具有吸引力的。

    2)如何看待云上成本

     ① 人力成本

    无疑,这是云数据库颇具优势的方案。企业如果想通过自建方式解决类似问题,没有高素质的人才是不行的。然而,一方面此类人才稀缺且价格不菲;另一方面即使已有人才,也要面临如何留住等问题。毕竟对于大多数企业来说,专业技术人员更多是辅助性岗位,对高级专业人员来说也面临长期发展等问题。而云数据库方案,则不存在此问题,你大可以在很短时间内享受到大厂的“脑力”资源,而且不必担心出现断档等问题。

     ② 财力成本

    针对这点,是需要企业充分衡量的。如果通过自建方式,是初期投入大,中长期投入较少,存在一个明显的波动性。如果通过外购云服务方式,则相对较为平均。两者的财力分配方式不同。当然,云有一个明显的优势,就是弹性。企业可根据自身情况,灵活选择,随时调整。

     ③ 时间成本

    这是企业往往容易忽略的问题,时间投入也是一种成本。当你的企业快速发展,需要短时间具备某种能力;当你面临新业务上线,而后台IT就迟迟跟不上节奏。隐形的时间成本,有时对企业颇为重要;对稍纵即逝的业务机会来说,稳健、敏捷的IT支撑能力很重要。

     ④ 风险成本

    很多企业是需要一个“兜底”的服务,即尽量降低企业的IT风险,保证企业的正常运营。自建的方式可以解决,但需要构建起整套的能力,投入不小;也可以通过购买外部服务的方式,这种就需要考察对方的技术实力、并解决互相扯皮等问题。云厂商,则不存在此问题,基本可做到风险可控。

    4、如何看待国产化

    1)产品技术成熟

    作为三大核心基础软件之一,数据库在整个IT技术中占据重要的位置。随着近些年来中国经济的快速发展,特别是庞大的人口基数带来的红利效应,互联网技术在中国蓬勃发展。甚至在某些技术场景下,相较于国外有着更高的要求。这也促进国内企业在IT基础技术(包括数据库)上取得了长足的进步。国内企业对数据库的使用大致走过了“商业->开源->开源+定制->自研”逐步演进的道路。近些年来,随着技术、资本、人才的积累,国内的数据库领域取得很大的突破。

    从数据库技术本身而言,随着分布式、云原生、软硬一体化、人工智能等技术的出现,为自研数据库代替大型传统商业数据库,实现弯道超车提供了可能。同时这些技术的出现,也解决了很多传统数据库固有的问题,突破了旧有架构的缺陷,更好地满足客户对海量、弹性、安全、性能等方面的要求。没有传统数据库厂商的历史包袱,新兴厂商站在更高的起点上,实现对传统厂商的超越。

    2)经验积累丰富

    虽然有些企业在去除大型商业数据库实践上,已经有十余年的时间;但大多数都是限于企业内部。受限于其内部场景,很多实践经验是很难复用到外部企业。且也没有一个完整、成熟的商业化产品提供此类服务。但是近些年来,已可以明显看到一些变化,以云厂商为代表,正在将企业内部多年的经验积累以产品的化的方式输出,帮助广大客户完成这一过程。

    针对这样一个基础软件的替换,我们需要清醒地认识到,不是简单的“苹果换成桔子”的过程。这需要从架构设计、程序开发、运维安全等多个角度去看待。之前很多企业在抛弃传统商业数据库上举步维艰,正是因为缺乏必要的经验指导,无法将好的技术快速落地并稳定运行。在这里需要重点强调的是,很多企业认为选择一个功能非常强大的数据库,就可以帮着自己摆脱传统商业数据库。其实,这是一个大大的误区。功能强大的产品,不一定是适合你,要想完成这一过程,云数据库厂商的实施经验不可或缺。只有“好的产品+丰富经验+良好服务”,才能最终达成这一目标。

    3)服务方式提升

    企业(特别是传统企业)在数据库使用上,按需求的优先级排序,可分为服务、生态、自主、成本等多个因素。这里最被企业看中的,正是“服务”一环。很多企业使用大型商业数据库多年,已经习惯于传统数据库厂商的“交钥匙”工程,非常看重其完备的服务能力,使得企业可以安心于业务。即使每年付出昂贵的服务费,企业仍然可以接受。这点也是国内厂商的短板,要在短时间内建立其等同于国外数十年积累的企业服务能力,不是一朝一夕的功夫。这是需要国内厂商静下心来,苦练内功,加大投入。经过几年来的积累,国内的云厂商已具备了较为成熟交付服务提醒,形成了规范化的服务能力。

    4)成本收益驱动

    传统大型商业数据库,颇令人诟病的一点就是“贵”。究其根本原因,一方面是其商业策略有关,此外也有人力成本、服务方式等因素有关。此外,还有很容易忽略的一点,就是旧有架构的问题。随着新架构的演进、技术的突破,特别是“数据库+云”的结合,为客户提供更灵活、更具性价比的数据库方案成为可能。

    5)业务模式创新

    随着数字经济的到来,各类企业都在做着数字化转型,新的业态也不断涌现。这对于支撑企业数字化转型的重要基础设施—数据库,提出了更高的要求。如何满足快速多变的业务模式创新?如何满足快速发展的业务规模需求?等等诸如此类的问题,都是数据库产品需要考虑的。国产数据库正是站在这一高点,从国内情况出发,有针对性地推出很多功能,满足这种创新。

    新时期数据库架构优化 - 实践篇

    下面以笔者之前在某公司的实践过程,谈谈对架构实践的理解。这里将从需求、资源、路径、成长角度来谈。

    1、痛点与需求

    第一步,就是现状分析。俗话说,磨刀不误砍柴工,只有对现状充分的了解,找出核心痛点,才能有助于问题的解决。无论是从架构调整还是其他工作都是如此,只有解决痛点才是对公司有价值的。

    2、路径与演进

    第二步,就是路径演进。很多架构工作或其他技术工作,都不是一蹴而就的,而是有个逐步演进的过程。正如上面提到的,在之前公司的数据库开发设计规范的落地,也是走过了文档化->技术宣讲->自研平台的过程。

    3、资源与成长

    团队的情况也很重要。只有统一思想、明确方向,才能有助于最终落地起效。

    新时期数据库架构优化 - 个人成长篇

    最后,我们谈谈对架构师作为个人成长方向的一些问题。相信很多做技术的同学都存在上述的问题:做技术还是做管理?年龄因素怎么看?技术革新太快,如何破?等等。

    1、数据应用层次

    首先我们从企业内部数据应用层次来看,从最为原始的满足事务型处理需求,DBA更多是充当救火队员的角色;到逐步规模化、体系化,DBA通过平台处理运维工作甚至可做到预防性运维;再到运维工作已不是主要矛盾,企业开始关注数据库设计、开发质量问题,DBA需要更多考虑架构侧问题;最终到脱离具体变相的库的形态,而从更为维的数据层面考虑企业内的数据架构问题。

    企业内部对数据的应用层次的演进,其实也是DBA从运维、平台、设计、优化、架构的演进过程。可以说,伴随者企业发展,数据一线从业者都会慢慢具备一定的架构类职能。这也是技术人,比较理想的一个发展路线。

    2、DBA所受冲击

    从一段时间来看,DBA职业正受到很大的冲击,这里包括:

    • 去IOE所代表的去商业数据库冲击,仅仅掌握一两门商业数据库技能已经不足以支撑你的职业发展;

    • 开源与商业的选择,决定了越来越多的开源方案受到重视,DBA的技能不在满足于对商业产品的诉求,而是要考虑开源及随之带来的研发类的技能要求;

    • 管理方式的变化,从之前的手工命令方式、到脚本进而到工具乃至平台。管理方式的变化,也意味着对DBA技能的不断提高;

    • 云,作为未来发展趋势,已成为共识。在云化环境下,对DBA的能力要求又有了新的变化,很多之前的技能将变得不在重要,急需要人员掌握新的技能。

    3、选择技术or管理

    这是个老生常谈的问题,做技术还是做管理?我的观点是,选择哪条路径,取决于个人特质,不同的思维方式适合做不同的工作。不要勉强自己做不适合的职业选择。

    4、阶段性

    技术的路能走多长?这是很多人的疑问。难道每个人都能发展成为CTO吗?显然这是不现实的。无论是技术路线还是管理路线,其发展都是有阶段性的。对于迈入到更高的台阶,都存在一定比例的选择率。大部分人,是无法上升到更高的阶段,要理性地看待这一问题。并在达到自己阶段瓶颈后,找出后续的发展路线。说句时髦的话,就是所谓第二成长曲线。

    5、突破点

    承接上面,每个人发展都是存在一个阶段性上限。当达到这一阶段时,你会发现很难突破自己,此时可以考虑所谓T字性人才发展策略,即横向发展。但这里需要注意的是,一定是在某一领域内接近自己所能达到上限,因为这会决定你的“视野”问题。在横向发展的选择上,可以有很多。例如右面列出的技术上的其他领域、业务方向的沉淀或者参与人的工作(管理)之中。

    Q & A

    Q1:如何看待列式数据库的前景以及其在互联网企业中应用场景?

    A:列式数据库,主要是说数据存储方式采用列存方式。现在很多数据库都支持行、列混存的模式。其面对数据分析类场景时,列式存储天然有其优势。企业中的分析场景,可以考虑使用列式存储。

    Q2:开源数据库的安全隐患大吗?安全性是否需要重点考虑?

    A:开源数据库的安全问题,不能一概而论。只是一般意义上,开源产品在某些企业特性上较商业产品还是有所欠缺,安全性是其中之一。当然,随着很多开源产品在企业中的到日益广泛的应用,安全性问题也得到很多开源的重视,不断补齐、增强这方面的能力。

    Q3:如何选择国产数据库?

    A:随着近些年来国产数据库的蓬勃发展,无论从产品数量、成熟度还是使用广泛程度,都取得了长足的进步。在企业考虑选择使用国产数据库时,个人建议优先考虑功能、服务、生态、性能的因素(有优先级顺序)。

    Q4:如何看待国产数据库,特别是分布式国产数据库的前景?

    A:无论从内外部环境,还是IT本身发展规律,都很看好国产数据库的发展。这也是我们必要需要经历的一个过程。比较欣喜的看到,近些年来国产数据库发展很快,并逐步获得很多关注。相信在不久的未来,必将得到更大的发展和普及。

    分布式数据库,是一个发展方向,其在解决容量、性能等核心问题上,有着天然的优势。随着学术上的成熟,在工程领域已经很多产品出现,并取得不错的成绩。

    Q5:分库分表清除历史数据有什么需要注意的点?

    A:分库分表架构下,对于清理数据会带来一定的复杂度。核心点在于有统一的清除标识,方便进行清理工作。

    Q6:请问CK数据库怎么解决并发支持不高的情况?

    A:对CK了解不多,谈写粗浅认识。对于分析型数据库而言,并发问题是个老大难问题。其核心问题是在于资源瓶颈。场景的解决方式:1.通过扩展资源,提高吞吐能力,变相提升并发支持能力;2.通过资源隔离方式,满足部分高并发场景需求;3.通过拆分方式,分流并发需求等。

    Q7:类似于TiDB这种整合的数据架构解决方案,前景您怎么看?

    A:非常看好类似TiDB的整合方案。整合方案的核心点在于,数据集中存储、统一接口、统一管理,这对于用户是很有吸引力的。解决了用户对于管理、运维、人力、开发、成本等多方面的问题。当然,还是有小部分场景无法通过整合架构解决,但对于大多数客户、大多数场景,整合架构还是适用的。

    Q8:对于数据库技能的积累上,是如何储备的呢?SQL、NoSQL、NewSQL是否都有必涉足?

    A:存储哪些技能,核心还是取决于现实需求。这里不仅包括数据库技能,也包括其他技能是同样的道理。技术发展演进是很快的,需要人员具备快速学习的基本能力。只有适应这种变化,才能更好地适应未来发展。

    Q9:请评估一下阿里的AnalyticDB这种实时分析型数据库,并且还能支持高并发?

    A:AnalyticDB是阿里云自研的云原生数据仓库。在其初始设计中,就考虑了高并发的需求。在其前端接入节点部分,是支持扩展能力,可提供近似线性的扩展能力支持。

    Q10:数据库架构师的方向可以突破35岁的限制吗?

    A:架构方向,是技术人发展的一个方向。对于人员的知识结构、经验积累等,均有较高的要求。在年龄方面,限制度较其他岗位(如研发)要宽泛很多。我本人经历,也是在35+,才开始转型到架构方向。

    特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:
    
    
    

    长按订阅更多精彩▼
    
    如有收获,点个在看,诚挚感谢
    
    展开全文
  • 针对在系统运行中遇到的错误、bug等,还有应用系统的升级,经常需要调整后台程序,数据库开发人员经常遇到这样一种尴尬的事情,维护到一定时期,开发库和运行库之间出现了一些差异,而这些差异又是什么。还有一种...
  • NoSQL数据库

    千次阅读 2019-01-19 14:49:19
    通常NoSQL数据库具有以下几个特点: (1)灵活的扩展性。 (2)灵活的数据模型。 (3)与云计算紧密结合。 2. NoSQL兴起的原因 关系型数据库已经无法满足web2.0的需求。主要表现在以下几个方面: 关系型数据库已经无法...

    1. NoSQL简介

    在这里插入图片描述
    通常NoSQL数据库具有以下几个特点:
    (1)灵活的扩展性。
    (2)灵活的数据模型。
    (3)与云计算紧密结合。

    2. NoSQL兴起的原因

    1. 关系型数据库已经无法满足web2.0的需求。主要表现在以下几个方面:
      (1)无法满足海量的数据管理需求。
      (2)无法满足数据高并发的需求。
      (3)无法满足高可扩展性和高可用性的需求。

    在这里插入图片描述
    MySQL集群是否可以完全解决问题?

    • 复杂性:部署、管理、配置很复杂。
    • 数据库复制:MySQL主备之间采用复制方式,只能是异步复制,当主库压力较大时可能产生较大时延,主备切换可能会丢失最后一部分更新事务,这时往往需要人工介入,备份和恢复不方便。
    • 扩容问题:如果系统压力过大需要增加新的机器,这个过程涉及数据重新划分,整过过程比较复杂,且容易出错。
    • 动态数据迁移问题:如果某个数据库组压力过大,需要将其中部分数据迁移出去,迁移过程需要总控节点整体协调,以及数据库节点的配合。这个过程很难做到自动化。
    1. “One size fits all”模式很难适用于截然不同的业务场景
      •关系模型作为统一的数据模型既被用于数据分析,也被用于在线业务。但这两者一个强调高吞吐,一个强调低延时,已经演化出完全不同的架构。用同一套模型来抽象显然是不合适的
      •Hadoop就是针对数据分析
      •MongoDB、Redis等是针对在线业务,两者都抛弃了关系模型

    2. 关系数据库的关键特性包括完善的事务机制和高效的查询机制。但是,关系数据库引以为傲的两个关键特性,到了Web2.0时代却成了鸡肋,主要表现在以下几个方面:
      (1 )Web2.0 网站系统通常不要求严格的数据库事务
      (2 )Web2.0 并不要求严格的读写实时性
      (3 )Web2.0 通常不包含大量复杂的SQL 查询 (去结构化,存储空间换取更好
      的查询性能)

    3. NoSQL与关系数据库的比较

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    总结
    (1 )关系数据库
    优势:以完善的关系代数理论作为基础,有严格的标准,支持事务ACID四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持.
    劣势:可扩展性较差,无法较好支持海量数据存储,数据模型过于死板、无法较好支持Web2.0应用,事务机制影响了系统的整体性能等.
    (2 )NoSQL 数据库
    优势:可以支持超大规模数据存储,灵活的数据模型可以很好地支持Web2.0应用,具有强大的横向扩展能力等.
    劣势:缺乏数学理论基础,复杂查询性能不高,大都不能实现事务强一致性,很难实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较困难等.

    总结
    关系数据库和NoSQL数据库各有优缺点,彼此无法取代
    • 关系数据库应用场景:电信、银行等领域的关键业务系统,需要保证强事务一致性.
    •NoSQL 数据库应用场景:互联网企业、传统企业的非关键业务(比如数据分析)采用混合架构.
    •案例:亚马逊公司就使用不同类型的数据库来支撑它的电子商务应用
    •对于“购物篮”这种临时性数据,采用键值存储会更加高效
    •当前的产品和订单信息则适合存放在关系数据库中
    •大量的历史订单信息则适合保存在类似MongoDB的文档数据库中

    4. NoSQL的四大类型

    NoSQL数据库虽然数量众多,但是,归结起来,典型的NoSQL数据库通常包括键值数据库、列族数据库、文档数据库和图形数据库.
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    4.1 键值数据库
    在这里插入图片描述
    在这里插入图片描述
    4.2 列族数据库
    在这里插入图片描述
    4.3文档数据库
    在这里插入图片描述
    在这里插入图片描述
    •数据是不规则的,每一条记录包含了所有的有关“SequoiaDB”的信息而没有任何外部的引用,这条记录就是“自包含”的
    •这使得记录很容易完全移动到其他服务器,因为这条记录的所有信息都包含在里面了,不需要考虑还有信息在别的表没有一起迁移走
    •同时,因为在移动过程中,只有被移动的那一条记录(文档)需要操作,而不像关系型中每个有关联的表都需要锁住来保证一致性,这样一来ACID的保证就会变得更快速,读写的速度也会有很大的提升

    在这里插入图片描述

    4.4 图形数据库
    在这里插入图片描述
    4.5 不同类型数据库比较分析
    在这里插入图片描述
    •MySQL产生年代较早,而且随着LAMP大潮得以成熟。尽管其没有什么大的改进,但是新兴的互联网使用的最多的数据库
    •MongoDB是个新生事物,提供更灵活的数据模型、异步提交、地理位置索引等五花十色的功能
    •HBase是个“仗势欺人”的大象兵。依仗着Hadoop的生态环境,可以有很好的扩展性。但是就像象兵一样,使用者需要养一头大象(Hadoop),才能驱使他
    •Redis是键值存储的代表,功能最简单。提供随机数据存储。就像一根棒子一样,没有多余的构造。但是也正是因此,它的伸缩性特别好。就像悟空手里的金箍棒,大可捅破天,小能成缩成针

    5. NoSQL的三大基石

    在这里插入图片描述

    5.1 CAP
    所谓的CAP指的是:

    • C (Consistency ):一致性,是指任何一个读操作总是能够读到之前完成的写操作的结果,也就是在分布式环境中,多点的数据是一致的,或者说,所有节点在同一时间具有相同的数据
    • A: (Availability ):可用性,是指快速获取数据,可以在确定的时间内返回操作结果,保证每个请求不管成功或者失败都有响应;
    • P (Tolerance of Network Partition ):分区容忍性,是指当出现网络分区的情况时(即系统中的一部分节点无法和其他节点进行通信),分离的系统也能够正常运行,也就是说,系统中任意信息的丢失或失败不会影响系统的继续运作。

    CAP理论告诉我们,一个分布式系统不可能同时满足一致性、可用性和分区容忍性这三个需求,最多只能同时满足其中两个,正所谓“鱼和熊掌不可兼得”(量子通信或许可以鱼和熊掌兼得)。
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    当处理CAP的问题时,可以有几个明显的选择:

    1. CA:也就是强调一致性(C)和可用性(A),放弃分区容忍性(P),最简单的做法是把所有与事务相关的内容都放到同一台机器上。很显然,这种做法会严重影响系统的可扩展性。传统的关系数据库(MySQL、SQL Server和PostgreSQL),都采用了这种设计原则,因此,扩展性都比较差
    2. CP:也就是强调一致性(C)和分区容忍性(P),放弃可用性(A),当出现网络分区的情况时,受影响的服务需要等待数据一致,因此在等待期间就无法对外提供服务
    3. AP:也就是强调可用性(A)和分区容忍性(P),放弃一致性(C),允许系统返回不一致的数据

    在这里插入图片描述

    5.2 说起BASE(Basically Availble, Soft-state, Eventual consistency),
    不得不谈到ACID。
    在这里插入图片描述

    一个数据库事务具有ACID四性:

    • A(Atomicity):原子性,是指事务必须是原子工作单元,对于其数据修改,要么全都执行,要么全都不执行
    • C(Consistency):一致性,是指事务在完成时,必须使所有的数据都保持一致状态
    • I(Isolation):隔离性,是指由并发事务所做的修改必须与任何其它并发事务所做的修改隔离
    • D(Durability):持久性,是指事务完成之后,它对于系统的影响是永久性的,该修改即使出现致命的系统故障也将一直保持
      BASE的基本含义是基本可用(Basically Availble)、软状态(Soft-state)和

    最终一致性(Eventual consistency):

    • 基本可用
      基本可用,是指一个分布式系统的一部分发生问题变得不可用时,其他部分仍然可以正常使用,也就是允许分区失败的情形出现
    • 软状态
      “软状态(soft-state)”是与“硬状态(hard-state)”相对应的一种提法。数据库保存的数据是“硬状态”时,可以保证数据一致性,即保证数据一直是正确。“软状态”是指状态可以有一段时间不同步,具有一定的滞后性

    BASE的基本含义是基本可用(Basically Availble)、软状态(Soft-state)和最终一致性(Eventual consistency):

    • 最终一致性
      一致性的类型包括强一致性和弱一致性,二者的主要区别在于高并发的数据访问操作下,后续操作是否能够获取最新的数据。对于强一致性而言,当执行完一次更新操作后,后续的其他读操作就可以保证读到更新后的最新数据;反之,如果不能保证后续访问读到的都是更新后的最新数据,那么就是弱一致性。而最终一致性只不过是弱一致性的一种特例,允许后续的访问操作可以暂时读不到更新后的数据,但是经过一段时间之后,必须最终读到更新
      后的数据。
      最常见的实现最终一致性的系统是DNS(域名系统)。一个域名更新操作根据配置的形式被分发出去,并结合有过期机制的缓存;最终所有的客户端可以看到最新的值。

    5.3 最终一致性

    最终一致性根据更新数据后各进程访问到数据的时间和方式的不同,又可以
    区分为:

    • 因果一致性:如果进程A通知进程B它已更新了一个数据项,那么进程B的后续访问将获得A写入的最新值。而与进程A无因果关系的进程C的访问,仍然遵守一般的最终一致性规则
    • “读己之所写”一致性:可以视为因果一致性的一个特例。当进程A自己执行一
      个更新操作之后,它自己总是可以访问到更新过的值,绝不会看到旧值
    • 单调读一致性:如果进程已经看到过数据对象的某个值,那么任何后续访问都不会返回在那个值之前的值
    • 会话一致性:它把访问存储系统的进程放到会话(session)的上下文中,只要会话还存在,系统就保证“读己之所写”一致性。如果由于某些失败情形令会话终止,就要建立新的会话,而且系统保证不会延续到新的会话
    • 单调写一致性:系统保证来自同一个进程的写操作顺序执行。系统必须保证这种程度的一致性,否则就非常难以编程了

    如何实现各种类型的一致性?
    对于分布式数据系统:

    • N — 数据复制的份数
    • W — 更新数据是需要保证写完成的节点数
    • R — 读取数据的时候需要读取的节点数

    如果W+R>N,写的节点和读的节点重叠,则是强一致性。例如对于典型的一主一备同步复制的关系型数据库,N=2,W=2,R=1,则不管读的是主库还是备库的数据,都是一致的。一般设定是R+W = N+1,这是保证强一致性的最小设定

    如果W+R<=N,则是弱一致性。例如对于一主一备异步复制的关系型数据库,N=2,W=1,R=1,则如果读的是备库,就可能无法读取主库已经更新过的数据,所以是弱一致性。

    对于分布式系统,为了保证高可用性,一般设置N>=3。不同的N,W,R组合,是在可用性和一致性之间取一个平衡,以适应不同的应用场景。

    • 如果N=W,R=1,任何一个写节点失效,都会导致写失败,因此可用性会降低,但是由于数据分布的N个节点是同步写入的,因此可以保证强一致性。

    实例:HBase是借助其底层的HDFS来实现其数据冗余备份的。HDFS采用的就是强一致性保证。在数据没有完全同步到N个节点前,写操作是不会返回成功的。也就是说它的W=N,而读操作只需要读到一个值即可,也就是说它R=1。

    • 像Voldemort,Cassandra和Riak这些类Dynamo的系统,通常都允许用户按需要设置N,R,W三个值,即使是设置成W+R<= N也是可以的。也就是说他允许用户在强一致性和最终一致性之间自由选择。而在用户选择了最终一致性,或者是W<N的强一致性时,则总会出现一段“各个节点数据不同步导致系统处理不一致的时间”。为了提供最终一致性的支持,这些系统会提供一些工具来使数据更新被最终同步到所有相关节点。

    6. 从NoSQL到NewSQL数据库

    在这里插入图片描述

    在这里插入图片描述

    7.1 MongoDB简介

    • MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库
      系统。
    • 在高负载的情况下,添加更多的节点,可以保证服务器性能。
    • MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
    • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
      MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档
      数组。

    在这里插入图片描述

    主要特点:

    • 提供了一个面向文档存储,操作起来比较简单和容易
    • 可以设置任何属性的索引来实现更快的排序
    • 具有较好的水平可扩展性
    • 支持丰富的查询表达式,可轻易查询文档中内嵌的对象及数组
    • 可以实现替换完成的文档(数据)或者一些指定的数据字段
    • MongoDB中的Map/Reduce主要是用来对数据进行批量处理和聚合操作
    • 支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等语言
    • MongoDB安装简单

    7.2 MongoDB概念解析

    在这里插入图片描述

    在这里插入图片描述

    举例2:在一个关系型数据库中,一篇博客(包含文章内容、评论、评论的投票)会被打散在多张数据表中。在文档数据库MongoDB中,能用一个文档来表示一篇博客, 评论与投票作为文档数组,放在正文主文档中。这样数据更易于管理,消除了传统关系型数据库中影响性能和水平扩展性的“JOIN”操作。

    在这里插入图片描述

    在这里插入图片描述

    数据库

    • 一个mongodb中可以建立多个数据库。
    • MongoDB的默认数据库为"db",该数据库存储在data目录中。
    • MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集
      合和权限,不同的数据库也放置在不同的文件中。

    文档
    文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

    一个简单的文档例子如下:
    {“site”:“dblab.xmu.edu.cn”, “name”:“厦门大学数据库实验室"}

    在这里插入图片描述

    集合

    • 集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
    • 集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
      比如,我们可以将以下不同数据结构的文档插入到集合中:
      {“site”:“www.baidu.com”}
      {“site”:“dblab.xmu.edu.cn”, “name”:“厦门大学数据库实验室"}
      {“site”:“www.runoob.com”,“name”:“菜鸟教程”,“num”:5}

    在这里插入图片描述

    7.3 安装MongoDB

    在这里插入图片描述

    7.4 访问MongoDB

    • 使用 MongoDB shell 来连接 MongoDB 服务器
      mongodb://localhost

    • 使用用户名和密码连接登陆到指定数据库:
      mongodb://admin:123456@localhost/test

    MongoDB 创建数据库
    MongoDB 创建数据库的语法格式如下:

    use DATABASE_NAME
    

    如果数据库不存在,则创建数据库,否则切换到指定数据库。

    如果你想查看所有数据库,可以使用 show dbs 命令

    创建集合
    MongoDB没有单独创建集合名的shell命令,在插入数据的时候,
    MongoDB会自动创建对应的集合。

    7.4.1 使用 MongoDB shell访问MongoDB

    MongoDB 插入文档
    文档的数据结构和JSON基本一样。
    所有存储在集合中的数据都是BSON格式。
    BSON是一种类JSON的一种二进制形式的存储格式,简称Binary JSON。
    MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:

    db.COLLECTION_NAME.insert(document)
    

    实例

    >db.col.insert({title: 'MongoDB 教程',
    description: 'MongoDB 是一个 Nosql 数据库',
    by: ‘厦门大学数据库实验室',
    url: 'http://dblab.xmu.edu.cn',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
    })
    

    7.4.2 使用Java程序访问 MongoDB

    MongoDB Java
    环境配置

    • 在Java程序中如果要使用MongoDB,需要确保已经安装了Java环境及
      MongoDB JDBC 驱动。
    • 首先必须下载mongo jar包,下载地址:https://github.com/mongodb/mongo-
      java-driver/downloads, 请确保下载最新版本。
    • 需要将mongo.jar包含在你的 classpath 中

    (1 )连接数据库

    import com.mongodb.MongoClient;
    ……//这里省略其他需要导入的包
    public class MongoDBJDBC{
    public static void main( String args[] ){
    try{
    // 连接到 mongodb 服务
    MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
    // 连接到数据库
    DB db = mongoClient.getDB( "test" );
    System.out.println("Connect to database successfully");
    boolean auth = db.authenticate(myUserName, myPassword);
    System.out.println("Authentication: "+auth);
    }catch(Exception e){
    System.err.println( e.getClass().getName() + ": " + e.getMessage() );
    }
    }
    }
    

    (2 )创建集合 可以使用com.mongodb.DB类中的createCollection()来创建集合

    public class MongoDBJDBC{
    public static void main( String args[] ){
    try{
    // 连接到 mongodb 服务
    MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
    // 连接到数据库
    DB db = mongoClient.getDB( "test" );
    System.out.println("Connect to database successfully");
    boolean auth = db.authenticate(myUserName, myPassword);
    System.out.println("Authentication: "+auth);
    DBCollection coll = db.createCollection("mycol");
    System.out.println("Collection created successfully");
    }catch(Exception e){
    System.err.println( e.getClass().getName() + ": " + e.getMessage() );
    }
    }
    }
    

    (3 )插入文档 可以使用com.mongodb.DBCollection类的 insert() 方法来插入一个文档

    public class MongoDBJDBC{
    public static void main( String args[] ){
    try{ // 连接到 mongodb 服务
    MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
    DB db = mongoClient.getDB( "test" ); // 连接到数据库
    System.out.println("Connect to database successfully");
    boolean auth = db.authenticate(myUserName, myPassword);
    System.out.println("Authentication: "+auth);
    DBCollection coll = db.getCollection("mycol");
    System.out.println("Collection mycol selected successfully");
    BasicDBObject doc = new BasicDBObject("title", "MongoDB").
    append("description", "database").
    append("likes", 100).
    append("url", "http://www.w3cschool.cc/mongodb/").
    append("by", "w3cschool.cc");
    coll.insert(doc);
    System.out.println("Document inserted successfully");
    }catch(Exception e){
    System.err.println( e.getClass().getName() + ": " + e.getMessage() );
    }
    }
    }
    

    本章小结

    • 本章介绍了NoSQL数据库的相关知识
    • NoSQL数据库较好地满足了大数据时代的各种非结构化数据的存储需求,开始得到越来越广泛的应用。但是,需要指出的是,传统的关系数据库和NoSQL数据库各有所长,彼此都有各自的市场空间,不存在一方完全取代另一方的问题,在很长的一段时期内,二者都会共同存在,满足不同应用的差异化需求
    • NoSQL数据库主要包括键值数据库、列族数据库、文档型数据库和图形数据库等四种类型,不同产品都有各自的应用场合。CAP、BASE和最终一致性是NoSQL数据库的三大理论基石,是理解NoSQL数据库的基础
    • 介绍了融合传统关系数据库和NoSQL优点的NewSQL数据库
    • 本章最后介绍了具有代表性的NoSQL数据库——文档数据库MongoDB
    展开全文
  • 关系型数据库的发展历史

    千次阅读 2019-03-12 23:15:03
    数据库发展史 信息系统产生了海量的数据,有数据必须要有数据的存放位置, 无库时代 :没有专门的数据库,数据大多以文件形式存放 层次状数据库 :使用层次状模型进行数据库设计和存放 网状数据库 :使用网状...
  • 数据库应用系统的生命周期

    千次阅读 2020-03-31 09:00:10
    二、数据库系统设计阶段 1、需求分析 2、系统设计 1)概念结构设计 2)逻辑结构设计 3)物理结构设计 四、运行与维护 1、监控(数据库管理员) 1)定期查看数据库空间是否满足业务需求。 2)定期查看数据缓冲区命中...
  • 修改sql数据库日期

    千次阅读 2021-01-27 19:43:07
    展开全部方法和操作步bai骤如下:1.首先,打开数du据库zhi并创建一个新表。由于日期格式dao的原因,所以...3.然后,在完成上述步骤之后,将查询日期显示结果设置为日期格式,可以使用数据库函数to_char实现该格式...
  • 数据库管理系统的角度看,数据库系统的结构通常分为三级模式的总体结构,在这种模式下,形成了二级映像,实现了数据的独立性。其中三级模式结构指的是外模式、模式和内模式,二级映像指的是外模式/模式映像、模式/...
  • 数据库系统概述

    2021-11-14 11:59:08
    数据库的地位 数据库技术产生于六十年代末,是数据管理的有效技术,是计算机科学的重要分支。 数据库技术是信息系统的核心和基础,它的出现极大地促进了计算机应用向各行各业的渗透。 数据库已经成为每个人生活中不...
  • 数据库的演进之路 数据库的发展-业务视角 数据库的技术演进之路 一、传统集中式数据库架构 1.查询分析处理过程 2.核心技术 二、分布式数据库架构 1. 数据分布 2. 分布式事务 3. 数据复制 4. 读写分离 5. ...
  • 从远古时期人们记录天象变化、总结四季更替、到现代人们记录设备运行状态、个人活动记录、股票变化情况等等,记录这些观测对象的变化情况,并加以分析的需求,自古至今一直存在。这种需求伴随着物联网、工业互联网、...
  • 一、数据库系统、数据库数据库管理系统 DBS包括DB和DBMS。 1、DBS是Database System的缩写,数据库系统。 2、DB是database的缩写,数据库。 3、DBMS是Database Management System的缩写,数据库管理系统。 ...
  • 今天的大数据数据库培训分享,我们就来聊聊NoSQL数据库入门。 关于NoSQL数据库,很多人刚开始学习容易误会,事实上NoSQL = Not Only SQL,指的是“不仅仅是SQL”。与之相对的是关系型数据库,NoSQL数据库弥补了...
  • 员工SQL数据库-源码

    2021-02-18 11:20:12
    从那个时期起,雇员数据库中剩下的全部是六个CSV文件。 在此分配中,您将设计表以将数据保存在CSV中,将CSV导入到SQL数据库中,并回答有关数据的问题。 换句话说,您将执行: 数据工程 数据分析 注意:您可能会...
  • 详写数据库需求分析

    万次阅读 多人点赞 2020-04-04 21:03:46
    需求分析一、数据库系统设计概述  1.数据库系统设计的内容1>数据库的结构特性设计2>数据库的行为特性设计3>数据库的物理模式设计   2.应注意的问题  3.基本方法  4.基本步骤二、系统需求分析  1....
  • 数据库系统】数据库系统概论====第十三章 数据库技术发展 13.1数据库技术发展概述 数据库技术产生于20世纪60年代中期,发展了以数据建模和DBMS核心技术为主,内容丰富的一门学科,带动了一个巨大的软件产业。 ...
  • 数据库的历史发展

    2021-03-25 13:19:29
    一、数据库技术的历史和发展 数据库技术是本世纪60年代开始兴起的一门信息管理自动化的新兴学科,是计算机科学中的一个重要分支。随着计算机应用的不断发展,在计算机应用领域中,数据处理越来越占主导 地位,数据库...
  • 球员管理系统数据库三级项目用户需求 NBA发展至今,整个联盟涵括了三十支球队,每支球队的球员名单上限在常规赛时期可以达到15位,加上不计其数的自由球员,管理并分析这些球员的生涯数据成为了一件棘手的事,NBA...
  • NewSQL数据库简介

    千次阅读 2017-07-28 19:00:56
    NewSQL数据库简介 NewSQL的未来 原创2016-10-20黄编者按:黄东旭,PingCAP联合创始人、CTO,是很多人仰望的国内分布式存储领域(NewS...
  • 分布式数据库设计系列将分为四个大的部分。将从以下四方面让大家对分布式数据库的设计和使用有深入的理解。 模块一,分布式数据历史演变及其核心原理。从历史背景出发,讲解了分布式数据库要解决的问题、应用场景,...
  • 数据库系统】数据库系统概论====第七章 数据库设计 7.1数据库设计概述 数据库设计定义 数据库设计定义 数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库...
  • 数据库领域,小型机时代促成了 Oracle等关系型数据库兴起,分布式架构时代 AWS、Snowflake等分布式数据库兴起。在计算载体变革的过程中,数据库市场往往不是简单的代替旧市场,而是不断创造新的增量。据 Garter,...
  • 这一个大学时期的.net课程设计,用数据库知识,想要添加自己的数据库只需要把代码里面的数据库链接 ,还有数据库基本表名改成自己的就行
  • 数据库发展史(上)

    千次阅读 多人点赞 2021-04-12 10:46:35
    数据库技术是信息技术领域的核心技术之一,几乎所有的信息系统都需要使用数据库系统来组织、存储、操纵和管理业务数据。数据库领域也是现代计算机学科的重要分支和研究方向。目前,在数据库领域已经产生了四位图灵奖...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,565
精华内容 23,026
关键字:

时期数据库