• 数据模型与查询语言


    一、数据模型

    主流的数据模型包括:关系模型、文档模型、图状数据模型

    1、关系模型

    数据被组织成关系,在SQL中成为表(table),其中每个关系都是元组(turples)的无序集合(在SQL中成为行)

    2、文档模型

    也就是NoSQL,采用它有这样几个驱动因素,包括:
    • 适用于一对多的数据模型
    • 比关系数据库更好的扩展性需求,包括支持超大数据集或超高写入吞吐量
    • 普遍偏爱免费和开源软件而不是商业数据库产品
    • 关系模型不能很好地支持一些特定的查询操作
    • 对关系模式一些限制性感到沮丧,渴望更具动态和表达力的数据模型
    • MySQL执行Alter Table时会把现在的整张表复制,因而当表很大时可能会需要几分钟甚至几小时的停机时间,尽管现在有各种辅助工具可以解决这个限制
    文档模型的劣势:
    • 文档模型不适用于表达多对多的关系
    • 适用需要同时访问文档大部分内容的场景。由于数据库通常会加载整个文档,如果应用只是访问其中的一小部分,则对于大型文档数据来讲就有些浪费。
    • 对文档更新时,通常会重写整个文档,而只有修改量不改变源文档大小时,原地覆盖更新才更高效。因此,通常建议文档应该尽量小且避免写入时增加文档大小。
    文档数据库有时被称为无模式,但这具有误导性,因为读数据的代码通常采用某种结构因而存在某种隐形模式,而不是数据库强制执行。更准确的术语应该是读时模式(数据的结构是隐式的,只有在读时才解释),与写时模式相对应。读时模式类似编程语言中的动态(运行时)类型检查,而写时模式类似于静态(编译时)类型检查。

    3、图状数据模型

    • 非常适用于多对多关系的数据模型
    • 图由两种对象组成:顶点(也成为节点或实体)和边(也称为关系)。
    • 可以建模为图的典型例子:社交网络(顶点是人,边指示哪些人彼此认识);Web图(顶点是网页,边表示与其他页面的HTML链接)
    • 图并不局限于同构数据,图更为强大的用途在于,提供了单个数据存储区中保存完全不同类型对象的一致性方式。

    二、数据查询语言

    1、查询语言分类

    • 声明式查询语言
    select * from animals where famiy='Sharks'
    • 命令式查询语言
    function getSharks(){
        var sharks = [];
        for(var i=0; i<animals.length; i++){
            if(animals[i].family === "Sharks"){
                  sharks.push(animals[i]); 
             }
         }
         return sharks;
    }
     
    声明式查询语言比命令式API更加简洁和容易使用。更重要的是,它对外隐藏了数据库引擎的很多实现细节,这样数据库系统能够在不改变查询语句的情况下提高性能。

    2、MapReduce查询

     
    db.observations.mapReduce(
        function map(){
           var year = this.observationTimestamp.getFullYear();
            var month = this.observationTimesstamp.getMonth()+1;
            emit(year + "-" +month, this.numAnimals);
     
        },
        function reduce(key, values){
              return Arrays.sum(values);
        },
        {
              query:{family : "Sharks"},
              out: "monthlySharkReport"
        }
    );
     

    3、Cypher查询语言

    最早为Neo4j图形数据库而创建(它以电影“黑客帝国”中的一个角色命名,与密码学中的密码无关)
     
    •  建模需求
    • 采用图数据库建模及查询的方式
     
     
     
     
    • 采用关系数据库建模及查询的方式
     
     
     
    如果相同的查询可以用一种查询语言写4行代码完成,而另一种查询语言则需要29行代码,这足以说明不同的数据模型适用于不同的场景。因此,选择适合应用程序的数据模型非常重要
  • 相关阅读:
    【洛谷P3469】[POI2008]BLO-Blockade
    【洛谷P3225】[HNOI2012]矿场搭建
    【洛谷P4568】[JLOI2011]飞行路线
    读入优化与输出优化模板
    7.29NOIP模拟赛
    【洛谷P3627】[APIO2009]抢掠计划
    【洛谷P1582】倒水
    运lucky
    【数据结构】浅谈倍增求LCA
    【题解】洛谷P4180 [BJWC2010] 严格次小生成树(最小生成树+倍增求LCA)
  • 原文地址:https://www.cnblogs.com/bestzrz/p/10499955.html
Copyright © 2020-2023  润新知