精华内容
下载资源
问答
  • 数据仓库基本知识

    万次阅读 多人点赞 2017-10-31 17:35:04
    数据仓库是什么 根据统计,每个企业的数据量每2~3年时间就会成倍增长,这些...于是,企业如何通过各种技术手段,并把数据转换为信息、知识避免各种无知状态和瞎猜行为,已经成了提高其核心竞争力的主要瓶颈。 ...
     
    

    数据仓库是什么

    根据统计,每个企业的数据量每2~3年时间就会成倍增长,这些数据蕴含着巨大的商业价值,而企业所关注的通常只占在总数据量的2%~4%左右。
    因此,企业仍然没有最大化地利用已存在的数据资源,以至于浪费了更多的时间和资金,也失去制定关键商业决策的最佳契机。
    于是,企业如何通过各种技术手段,并把数据转换为信息、知识避免各种无知状态和瞎猜行为,已经成了提高其核心竞争力的主要瓶颈。
    数据仓库是把数据转换为信息、知识的一种主要技术手段。
    数据仓库是面向分析的存储系统
    数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的数据集合。
    这些数据集合出于分析性报告和决策支持目的而创建,用于支持研究管理决策。
    一是为调查研究作数据支撑,二是为实现需要业务智能的企业,提供指导业务流程改进、监视时间、成本、量以及控制。
    数据仓库是一个过程而不是一个项目;数据仓库是一个环境,而不是一件产品。
    数据仓库提供用户用于决策支持的当前和历史数据,这些数据在传统的操作型数据库中很难或不能得到。

    [903014-20160322154102745-1726255952.jpg]


    目标和DEMO

    将联机事务处理(OLTP)经年累月所累积的大量数据资料,透过数据仓库理论所特有的资料储存架构,做数据的清理保存,提供给各种分析方法使用,如联机分析处理(OLAP)、数据挖掘(Data Mining),并进而创建 决策支持系统(DSS)、主管资讯系统(EIS)、研究支持系统,帮助决策者研究者快速有效的自大量资料中,分析出有价值的资讯,能够快速回应外在环境变动,帮助建构商业智能(BI),挖掘内部数据价值,产生更多高质量的内容。

    数据仓库给组织带来了巨大的变化。数据仓库的建立给企业带来了一些新的工作流程,其他的流程也因此而改变。

    数据仓库为企业带来了一些“以数据为基础的知识”,它们主要应用于对市场战略的评价,和为企业发现新的市场商机,同时,也用来控制库存、检查生产方法和定义客户群。

    通过数据仓库,可以建立企业的数据模型,这对于企业的生产与销售、成本控制与收支分配有着重要的意义,极大的节约了企业的成本,提高了经济效益,同时,用数据仓库可以分析企业人力资源与基础数据之间的关系,可以用于返回分析,保障人力资源的最大化利用,亦可以进行人力资源绩效评估,使得企业管理更加科学合理。数据仓库将企业的数据按照特定的方式组织,从而产生新的商业知识,并为企业的运作带来新的视角。

    国外知名的Garnter关于数据集市产品报告中,位于第一象限的敏捷商业智能产品有QlikView, Tableau和SpotView,都是全内存计算的数据集市产品,在大数据方面对传统商业智能产品巨头形成了挑战。

    国内BI产品起步较晚,知名的敏捷型商业智能产品有PowerBI, 永洪科技的Z-Suite,SmartBI,FineBI商业智能软件等,其中永洪科技的Z-Data Mart是一款热内存计算的数据集市产品。

    国内的德昂信息也是一家数据集市产品的系统集成商。

    [v2-da8260eae1a66096e3b61cd598b06596_hd.png]

    [v2-da8260eae1a66096e3b61cd598b06596_hd.png]

    阿里数加
    https://data.aliyun.com/


    数据仓库的特点

    数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合

    1、面向主题

    操作型数据库的数据组织面向事务处理任务,各个业务系统之间各自分离,而数据仓库中的数据是按照一定的主题域进行组织的。

    2、集成的

    数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。

    3、相对稳定的

    数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。

    4、反映历史变化

    数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。

    5、效率足够高
    数据仓库的分析数据一般分为日、周、月、季、年等,可以看出,日为周期的数据要求的效率最高,要求24小时甚至12小时内,客户能看到昨天的数据分析。由于有的企业每日的数据量很大,设计不好的数据仓库经常会出问题,延迟1-3日才能给出数据,显然不行的。


    数据仓库技术

    数据仓库技术是为了有效的把操作形数据集成到统一的环境中以提供决策型数据访问的各种技术和模块的总称。所做的一切都是为了让用户更快更方便查询所需要的信息,提供决策支持。

    从功能结构划分,数据仓库系统至少应该包含数据获取(Data Acquisition)、数据存储(Data Storage)、数据访问(Data Access)三个关键部分。

    数据获取

    数据源

    数据源是数据仓库系统的基础,是整个系统的数据源泉。通常包括企业内部信息和外部信息。内部信息包括存放于RDBMS中的各种业务处理数据和各类文档数据。外部信息包括各类法律法规、市场信息和竞争对手的信息等等;

    元数据

    对业务数据本身及其运行环境的描述与定义的数据,称之为元数据(metadata)。 元数据是描述数据的数据。 元数据的典型表现为对象的描述,即对数据库、表、列、列属性(类型、格式、约束等)以及主键/外部键关联等等的描述。 特别是现行应用的异构性与分布性越来越普遍的情况下,统一的元数据就愈发重要了。“信息孤岛”曾经是很多企业对其应用现状的一种抱怨和概括,而合理的元数据则会有效地描绘出信息的关联性。 而元数据对于ETL的集中表现为:定义数据源的位置及数据源的属性、确定从源数据到目标数据的对应规则、确定相关的业务逻辑、在数据实际加载前的其他必要的准备工作,等等,它一般贯穿整个数据仓库项目,而ETL的所有过程必须最大化地参照元数据,这样才能快速实现ETL。

    数据转换工具

    1)数据转换工具要能从各种不同的数据源中读取数据。 2)支持平面文件、索引文件、和legacyDBMS。 3)能以不同类型数据源为输入整合数据。 4)具有规范的数据访问接口 5)最好具有从数据字典中读取数据的能力 6)工具生成的代码必须是在开发环境中可维护的 7)能只抽取满足指定条件的数据,和源数据的指定部分 8)能在抽取中进行数据类型转换和字符集转换 9)能在抽取的过程中计算生成衍生字段 10)能让数据仓库管理系统自动调用以定期进行数据抽取工作,或能将结果生成平面文件 11)必须对软件供应商的生命力和产品支持能力进行仔细评估 主要数据抽取工具供应商:Prismsolutions. Carleton'sPASSPORT. InformationBuildersInc.'s EDA/SQL. SASInstituteInc.

    数据清洗ETL

    ETL分别代表:提取extraction、转换transformation、加载load。

    其中提取过程表示操作型数据库搜集指定数据,转换过程表示将数据转化为指定格式并进行数据清洗保证数据质量,加载过程表示将转换过后满足指定格式的数据加载进数据仓库。

    数据仓库会周期不断地从源数据库提取清洗好了的数据,因此也被称为"目标系统";

    实现ETL,首先要实现ETL转换的过程。体现为以下几个方面:
    1、空值处理:可捕获字段空值,进行加载或替换为其他含义数据,并可根据字段空值实现分流加载到不同目标库。
    2、规范化数据格式:可实现字段格式约束定义,对于数据源中时间、数值、字符等数据,可自定义加载格式。
    3、拆分数据:依据业务需求对字段可进行分解。例,主叫号 861082585313-8148,可进行区域码和电话号码分解。
    4、验证数据正确性:可利用Lookup及拆分功能进行数据验证。例如,主叫号861082585313-8148,进行区域码和电话号码分解后,可利用Lookup返回主叫网关或交换机记载的主叫地区,进行数据验证。
    5、数据替换:对于因业务因素,可实现无效数据、缺失数据的替换。
    6、Lookup:查获丢失数据 Lookup实现子查询,并返回用其他手段获取的缺失字段,保证字段完整性。
    7、建立ETL过程的主外键约束:对无依赖性的非法数据,可替换或导出到错误数据文件中,保证主键唯一记录的加载。

    根据以往数据仓库项目的经验,在一个数据仓库项目中,ETL设计和实施的工作量一般要占总项目工作量的40%-60%,而且数据仓库项目一般会存在二次需求的问题,客户在项目的实施过程中或者使用过程中会提出新的业务需求,而任何前端业务模型的改变都会涉及到ETL设计,因此ETL工具的选择对于整个数据仓库项目的成功是非常重要的。

    选型

    ETL工具的典型代表有:Informatica powercenter、Datastage、Oracle OWB(oracle warehouse builder)、ODI、微软DTS、Beeload、Kettle、Talend 、DataSprider、Spark、等等……

    开源的工具有eclipse的etl插件:CloverETL和Octupus

    在购买现成的工具之外,还有自己从头开发ETL程序的。

    ETL工作看起来并不复杂,特别是在数据量小、没有什么转换逻辑的时候,自己开发似乎非常节省成本。的确,主流的ETL工具价格不菲,动辄几十万;而从头开发无非就是费点人力而已,可以控制。至于性能,人大多是相信自己的,认为自己开发出来的东西知根知底,至少这些程序可以完全由自己控制。

    就目前自主开发的ETL程序而言,有人用c语言编写,有人用存储过程,还有人用各种语言混杂开发,程序之间各自独立。这很危险,虽然能够让开发者过足编码的瘾,却根本不存在架构。

    有位银行的朋友,他们几年前上的数据仓库系统,就是集成商自己用c语言专门为他们的项目开发的。单从性能上看似乎还不赖,然而一两年下来,项目组成员风雨飘零,早已物是人非,只有那套程序还在那里;而且,按照国内目前的软件工程惯例,程序注释和文档是不全或者是不一致的,这样的程序已经对日常业务造成很大阻碍。最近,他们已经开始考虑使用ETL工具重新改造了。

    扩展阅读

    数据仓库项目应该如何选择ETL工具:ETL or E-LT? http://blog.csdn.net/mengdebin/article/details/41151533

    ETL构建企业级数据仓库五步法
    http://blog.csdn.net/xcbsdu/article/details/6637775

    数据存储

    数据集市(Data Marts)

    为了特定的应用目的或应用范围,而从数据仓库中独立出来的一部分数据,也可称为部门数据或主题数据(subjectarea)。在数据仓库的实施过程中往往可以从一个部门的数据集市着手,以后再用几个数据集市组成一个完整的数据仓库。需要注意的就是再实施不同的数据集市时,同一含义的字段定义一定要相容,这样再以后实施数据仓库时才不会造成大麻烦。

    数据仓库管理

    安全和特权管理;跟踪数据的更新;数据质量检查;管理和更新元数据;审计和报告数据仓库的使用和状态;删除数据;复制、分割和分发数据;备份和恢复;存储管理。

    选型

    在大数据时代,数据仓库的重要性更胜以往。Hadoop平台下的Hive,Spark平台下的Spark SQL都是各自生态圈内应用最热门的配套工具,而它们的本质就是开源分布式数据仓库。

    在国内最优秀的互联网公司里(如阿里、腾讯),很多数据引擎是架构在数据仓库之上的(如数据分析引擎、数据挖掘引擎、推荐引擎、可视化引擎等等)。不少员工认为,开发成本应更多集中在数据仓库层,不断加大数据建设的投入。因为一旦规范、标准、高性能的数据仓库建立好了,在之上进行数据分析、数据挖掘、跑推荐算法等都是轻松惬意的事情。
    反之如果业务数据没梳理好,各种脏乱数据会搞得人焦头烂额,苦不堪言。

    数据访问

    数据仓库通常需要提供具有直接访问数据仓库功能的前端应用,这些应用也被称为BI(商务智能)应用

    有数据查询和报表工具

    应用开发工具

    经理信息系统(EIS)工具

    联机分析处理(OLAP)工具

    数据仓库建设好以后,用户就可以编写SQL语句对其进行访问并对其中数据进行分析。但每次查询都要编写SQL语句的话,未免太麻烦,而且对维度建模数据进行分析的SQL代码套路比较固定。

    于是,便有了OLAP工具,它专用于维度建模数据的分析。而BI工具则是能够将OLAP的结果以图表的方式展现出来,它和OLAP通常出现在一起。(注:本文所指的OLAP工具均指代这两者。)

    这种情况下,OLAP不允许访问中心数据库。一方面中心数据库是采取规范化建模的,而OLAP只支持对维度建模数据的分析;另一方面规范化数据仓库的中心数据库本身就不允许上层开发人员访问。而在维度建模数据仓库中,OLAP/BI工具和数据仓库的关系则是这样的:

    在维度建模数据仓库中,OLAP不但可以从数据仓库中直接取数进行分析,还能对架构在其上的数据集市群做同样工作。

    数据挖掘工具。

    信息发布系统

    把数据仓库中的数据或其他相关的数据发送给不同的地点或用户。基于Web的信息发布系统是对付多用户访问的最有效方法。

    数据可视化选型

    你想知道的经典图表全在这
    https://zhuanlan.zhihu.com/p/24168144

    R语言
    http://www.cnblogs.com/muchen/p/5332359.html

    pentaho

    FineBI

    PowerBI
    http://www.cnblogs.com/muchen/p/5389960.html

    http://www.cnblogs.com/muchen/p/5391101.html

    深入浅出BI
    https://zhuanlan.zhihu.com/p/24573880

    [903014-20160328190120316-616433149.jpg]

    [903014-20160328185819613-1426949688.jpg]


    案例

    facebook的ppt上了解到的是他们在hive上做大数据量的分析,计算结果放到oracle上做BI展示和计算 hadoop MR or hive上ETL计算完的结果表,同步到oracle中,连接传统BI工具,呈现报表,阿里、腾讯、盛大都是这样的

    [v2-3e6958278b96043f5a2379778054deae_hd.png]


    与传统数据库的对比

    企业的数据处理大致分为两类:
    一类是操作型处理,也称为联机事务处理,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。
    另一类是分析型处理,一般针对某些主题的历史数据进行分析,支持管理决策。

    数据库:传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。

    数据仓库:数据仓库系统的主要应用主要是OLAP(On-Line Analytical Processing),支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

    举个最常见的例子,拿电商行业来说好了。基本每家电商公司都会经历,从只需要业务数据库到要数据仓库的阶段。

    电商早期启动非常容易,入行门槛低。找个外包团队,做了一个可以下单的网页前端 + 几台服务器 + 一个MySQL,就能开门迎客了。这好比手工作坊时期。

    第二阶段,流量来了,客户和订单都多起来了,普通查询已经有压力了,这个时候就需要升级架构变成多台服务器和多个业务数据库(量大+分库分表),这个阶段的业务数字和指标还可以勉强从业务数据库里查询。初步进入工业化。

    第三个阶段,一般需要 3-5 年左右的时间,随着业务指数级的增长,数据量的会陡增,公司角色也开始多了起来,开始有了 CEO、CMO、CIO,大家需要面临的问题越来越复杂,越来越深入。

    高管们关心的问题,从最初非常粗放的:“昨天的收入是多少”、“上个月的 PV、UV 是多少”,逐渐演化到非常精细化和具体的用户的集群分析,特定用户在某种使用场景中,例如“20~30岁女性用户在过去五年的第一季度化妆品类商品的购买行为与公司进行的促销活动方案之间的关系”。这类非常具体,且能够对公司决策起到关键性作用的问题,基本很难从业务数据库从调取出来。

    原因在于:业务数据库中的数据结构是为了完成交易而设计的,不是为了而查询和分析的便利设计的。

    业务数据库大多是读写优化的,即又要读(查看商品信息),也要写(产生订单,完成支付)。

    因此对于大量数据的读(查询指标,一般是复杂的只读类型查询)是支持不足的。而怎么解决这个问题,此时我们就需要建立一个数据仓库了,公司也算开始进入信息化阶段了。

    数据仓库的作用在于:数据结构为了分析和查询的便利;只读优化的数据库,即不需要它写入速度多么快,只要做大量数据的复杂查询的速度足够快就行了。

    那么在这里前一种业务数据库(读写都优化)的是业务性数据库,后一种是分析性数据库,即数据仓库。

    最后总结一下:
    数据库 比较流行的有:MySQL, Oracle, SqlServer等
    数据仓库 比较流行的有:AWS Redshift, Greenplum, Hive等。
    这样把数据从业务性的数据库中提取、加工、导入分析性的数据库就是传统的 ETL 工作。

    数据仓库的方案建设的目的,是为前端查询和分析作为基础,由于有较大的冗余,所以需要的存储也较大。
    为了更好地为前端应用服务,数据仓库必须有如下几点优点,否则是失败的数据仓库方案。
    1.效率足够高。
    2.数据质量。
    3.扩展性。

    两类数据库的不同点:

    1.数据组成差别 - 数据时间范围差别

    一般来讲,操作型数据库只会存放90天以内的数据,而分析型数据库存放的则是数年内的数据。这点也是将操作型数据和分析型数据进行物理分离的主要原因。

    2.数据组成差别 - 数据细节层次差别

    操作型数据库存放的主要是细节数据,而分析型数据库中虽然既有细节数据,又有汇总数据,但对于用户来说,重点关注的是汇总数据部分。

    操作型数据库中自然也有汇总需求,但汇总数据本身不存储而只存储其生成公式。这是因为操作型数据是动态变化的,因此汇总数据会在每次查询时动态生成。

    而对于分析型数据库来说,因为汇总数据比较稳定不会发生改变,而且其计算量也比较大(因为时间跨度大),因此它的汇总数据可考虑事先计算好,以避免重复计算。

    3.数据组成差别 - 数据时间表示差别

    操作型数据通常反映的是现实世界的当前状态;而分析型数据库既有当前状态,还有过去各时刻的快照,分析型数据库的使用者可以综合所有快照对各个历史阶段进行统计分析。

    4.技术差别 - 查询数据总量和查询频度差别

    操作型查询的数据量少而频率多,分析型查询则反过来,数据量大而频率少。要想同时实现这两种情况的配置优化是不可能的,这也是将两类数据库物理分隔的原因之一。

    5.技术差别 - 数据更新差别

    操作型数据库允许用户进行增,删,改,查;分析型数据库用户则只能进行查询。

    6.技术差别 - 数据冗余差别

    数据的意义是什么?就是减少数据冗余,避免更新异常。而如5所述,分析型数据库中没有更新操作。因此,减少数据冗余也就没那么重要了。

    例如Hive是一种数据仓库,而数据仓库和分析型数据库的关系非常紧密。它只提供查询接口,不提供更新接口,这就使得消除冗余的诸多措施不需要被特别严格地执行了,可以保留冗余。

    7.功能差别 - 数据读者差别

    操作型数据库的使用者是业务环境内的各个角色,如用户,商家,进货商等;分析型数据库则只被少量用户用来做综合性决策。

    8.功能差别 - 数据定位差别

    这里说的定位,主要是指以何种目的组织起来。操作型数据库是为了支撑具体业务的,因此也被称为"面向应用型数据库";分析型数据库则是针对各特定业务主题域的分析任务创建的,因此也被称为"面向主题型数据库"。
    [4abe15bd7b3bcbc10f6b3846951b16d9_hd.jpg]


    怎么做

    1)收集和分析业务需求 确定指标

    基础数据的架构

    关键问题
    一般问题 (不完全是技术或文化,但很重要) 包括但不限于以下几点:
    业务用户想要执行什么样的分析?
    你现在收集的数据需要支持那些分析吗?
    数据在哪儿?
    数据清洗范围
    数据的清洁度如何?
    相似的数据有多个数据源吗?
    什么样的结构最适合核心数据仓库 (例如维度或关系型)?
    技术问题包括但不限于以下几点:
    在你的网络中要流通多少数据?它能处理吗?
    需要多少硬盘空间?
    硬盘存储需要多快?
    你会使用固态还是虚拟化的存储?

    2)建立数据模型和数据仓库的物理设计
    3)定义数据源
    4)选择数据仓库技术和平台
    5)从操作型数据库中抽取、净化、和转换数据到数据仓库–ETL依照模型进行初始加载、增量加载、缓慢增长维、慢速变化维、事实表加载等数据集成
    6)选择访问和报表工具
    7)选择数据库连接软件
    8)选择数据分析和数据展示软件
    9)更新数据仓库–并根据业务需求制定相应的加载策略、刷新策略、汇总策略、维护策略。

    较之数据库系统开发,数据仓库开发只多出ETL工程部分。然而这一部分极有可能是整个数据仓库开发流程中最为耗时耗资源的一个环节。
    因为该环节要整理各大业务系统中杂乱无章的数据并协调元数据上的差别,所以工作量很大。在很多公司都专门设有ETL工程师这样的岗位,大的公司甚至专门聘请ETL专家。

    [903014-20160322160747995-1497680833.jpg]

    展开全文
  • 超硬核!兔兔阿里p7学长给的面试知识库

    万次阅读 多人点赞 2021-05-26 22:14:07
    一个阿里p7学长给的nosql面试知识库,绝对真实,学会了去面呀。 最近整理了一下超硬核系列的文章和面经系列的文章,可以持续关注下: 超硬核系列历史文章:(我保证每篇文章都有值得学习的地方,并且对小白有特别大...

    一个阿里p7学长给的nosql面试知识库,绝对真实,学会了去面呀。  

    最近整理了一下超硬核系列的文章和面经系列的文章,可以持续关注下:

    超硬核系列历史文章:(我保证每篇文章都有值得学习的地方,并且对小白有特别大的提高,敢说敢负责。)

    这个系列入门级别的有万字,有些文章十万字。真的建议每篇文章都收藏

    《这是全网最硬核redis总结,谁赞成,谁反对?》六万字大合集

    超硬核!操作系统学霸笔记,考试复习面试全靠它

    超硬核!学霸把操作系统经典算法给敲完了!要知行合一

    超硬核!数据结构学霸笔记,考试面试吹牛就靠它

    超硬核十万字!全网最全 数据结构 代码,随便秒杀老师/面试官,我说的

    超硬核!数据库学霸笔记,考试/面试随便秒杀

    不骗你,全网首创的超硬核的万字SQL题

    超硬核!小白读了这篇文章,就能在算法圈混了

    当年,兔子学姐靠这个面试小抄拿了个22k

    反射全解

    synchronized使用和原理全解

    堆和栈的精华大总结

    Java的IO总结

    老师给的硬核移动端测试面试题目,大家看看靠谱吗

    超硬核!躺进BAT以后我总结了出现最多的15道数组题

    一个神奇的大学科目《软件工程》,知识点总结+测试题,包你不挂科

    超硬核!我统计了BAT笔试面试出现频率最高的五道题,学会了总能碰到一道

    当年,学姐把这份Java总结给我,让我在22k的校招王者局乱杀

    超硬核万字!web前端学霸笔记

     

    面试经验系列历史文章:

    这个系列离结束差的还特别多,会更新涵盖所有一线大厂的所有岗位,也可以关注一下。

    最容易进的大厂工作,百度经典百题

    超经典,百度最爱考的安卓Android百题

    超经典,阿里巴巴历年高频面试题汇总:前端岗

    阿里巴巴历年经典面试题汇总:Java岗

    学姐百度实习面经

    学姐,来挑战字节最牛部门

    最强阿里巴巴历年经典面试题汇总:C++研发岗

    关于我的那些面经——百度后端(附答案)

    《关于我的那些面经》滴滴Java岗(附答案)

    朋友面神策数据库,第五个问题不会,直接再见

    美女学姐面了美团阿里京东,这些经验实在太真实了

    学姐腾讯产品面经

    学姐总结奇安信18k常问面试题

    腾讯面试Android必问11题

     

    • NoSQL概述
      1. NoSQL数据库的优势:①支持超大规模的数据存储②数据模型比较灵活

    NoSQL数据库的劣势:①缺乏底层基础理论做支撑②很多nosql数据库都不支持事务的强一致性

      1. 关系数据库的优势:①具备非常完备的关系代数理论作为基础②有非常严格的标准③支持事务一致性④可以借助索引机制实现非常高效的查询

    劣势:①可扩展性非常差②不具备水平可扩展性,无法较好支持海量数据存储③数据模型定义严格,无法较好的满足新型web2.0应用需求

      1. 传统的关系数据库性能上的缺陷:①无法满足海量数据的管理需求②无法满足高并发需求
      2. NoSQL的四大类型:键值数据库  列族数据库 文档数据库 图数据库
      3. NoSQL数据库的三大理论基石:①CAP ②BASE③最终一致性(会话一致性,单调写一致性)
      4. Nosql数据库具有的三个特点:①灵活的可扩展性②灵活的数据模型③和云计算的紧密结合
      5. Nosql兴趣起的原因:①关系数据库无法满足web2.0的需求②数据模型的局限性
      6. Acid四性:A:原子性 C:一致性 I:隔离性 D:持久性
    • MongoBD简介
      1. 一个mongodb可以建立多个数据库;mongdb将数据存储为一个文档,数据结构是键值对;多个文档组成集合,多个集合组成数据库

     

      1. 数据库命名:
    • 不能是空字符串("")②不能以$开头③不能含有.和空字符串。
    • 数据库名字区分大小写(建议数据库名全部使用小写
    • 数据库名字长度最多64字节。⑥不要与系统保留的数据库名字相同,这些数据库包括:admin、local、 config等
      1. 文档是MongoDB最核心的概念,本质是一种类JSON的BSON格式的数据。
      2. BSON是由一组组键值对组成,它具有轻量性、可遍历性和高效性三个特征。可遍历性是MongoDB将BSON作为数据存储的主要原因
      3. 适用场景:海量的数据存储,json格式的数据,高伸缩性场景,弱事务型业务
      4. 使用mongdb shell访问mongdb:1)连接数据库:mongo port 27017

    2)连接远程的mongdb服务器:mongo “mongodb://mongodb0.example.com:27017”  3)查看所以数据库:show dbs   4)创建数据库:use DATABASE_NAME use database1  5)创建集合:插入数据时候自动创建集合 6)插入文档:db.cllection1.insert({name:”张三”,age:20})

    7.

    • MongoBD数据模型
      1. MongoBD数据类型:
        1. 基本数据类型:
          • Null 表示空值或者不存在的字段布尔数值类型字符串二进制数据可以保存由任意字节组成的字符串,例如:图片、视频等正则表达式:{name:/foo/} name字段含有foo的文档JavaScript 代码
        2. Date日期:new Date , 北京时间(CST) = UTC + 8个小时
        3. Timestamp(时间戳):只供mongdb数据库内部使用,用于记录操作的详细时间,new Timestamp()
        4. ObjectId:总共12字节;

    ObjectId()  用于创建ObjectID;getTimestamp() 用于取得ObjectID的时间戳; valueOf()  用于取得ObjectID的字符串表示

        1. 内嵌文档
        2. 数组
      1. Mongdb客户端的一基本命令:
    1. 连接/切换数据库 – use test01;
    2. 数据插入 -- db.stu.insert(obj);
    3. 数据查询 -- db.stu.find(query);
    4. 数据更新 -- db.stu.update(query,obj);
    5. 数据删除 -- db.stu.remove(query);
      1. 实例(好好看看)

    1、创建/切换数据库:use db1

    2、查看数据库:show dbs

    3、删除当前数据库:db.dropDatabase()

    4、创建集合:db.createCollection("c1")

    5、创建集合并添加数据

    db.dept.insert({deptno:1,deptname:"技术部",location:"beijing"})

    6、查看集合:show collections

    7、删除集合:db.collection_name.drop()

    8、查看所有文档数据:db.dept.find()

    9、查看单独的一个文档:db.dept.findOne()

    1. 删除指定文档:db.dept.remove({deptno:1})
    2. 更新文档:db.dept.update({deptno:2},{$set:{location:"shenzhen"}})
    • 数据更新
      1. 数据更新三种:插入:insert;删除:remove;修改:update
      2. Insert函数(只能作用于一个集合,集合不存在自动创建):db.集合名.insert(要插入的文档,可选参数(设置安全级别))返回值:WriteResult({“nInserted”:1});    db.collection.insertOne()

    db.collection.insertMany()

      1. Remove函数:db.集合名.remove(查询条件,可选参数(Boolean类型,只会删除满足条件的一个文档)):db.student.remove({name:”tom”},true)

    drop函数,不仅删除文档,还会删除集合中的索引,db.test.drop()

    deleteOne()和deleteMany()

      1. Bluk函数:(一共有两种,顺序和并行)
          • db.集合名.initializeUnorderedBulkOp() 并行Bulk(以随机的方式并行地执行添加到执行列表中的操作); ②db.集合名.initializeOrderedBulkOp()   顺序Bulk(按照预先定义的操作顺序);Bulk.insert()、Bulk.find.update()、Bulk.find.remove();Bulk.execute()

    var bulk=db.student.initializeOrderedBulkOp() 

    var bulk=db.student.initializeUnorderedBulkOp(); 

    bulk.insert({name:"san",age:18})

    bulk.insert({name:"si",age:18,})

    bulk.find({name:"si"}).remove();

      1. Update函数:

    db.集合名.update(查询条件(相当于where);更改的内容(相当于set);查询条件不存在时,选择{ upsert:true}插入,false:不插入;查询出多个文档,选择{multi:true}全部,false:第一条)

    返回值:WriteResult({“nMatched”:1,“nUpserted”:0,”nModified”:1})

    依次是:满足的文档个数 ;upsert:true时插入的个数;实际修改的文档个数

    更改操作符:

    • db.update_test.update({_id:1},{$inc:{age:2}})
    • db.update_test.update({_id:1},{$min:{age:3}})

    ③db.update_test.update(

     {name:"xiaoli"},

     {$set:{name:"xiaoli_update",age:28}},

     {multi:true})

      • db.update_test.update({_id:1},{$rename:{age:"年龄"}})
      • db.update_test.update({_id:1},{$unset:{年龄:""}})

    ⑥db.update_test.update({_id:1},{$unset:{年龄:1}})

    内嵌文档:①修改整个内嵌:{$set:{field1:新内嵌文档}} ②修改内嵌的某个字段:{$某个更改操作符:{“field1.field2”:value}}

    数组元素:

    ①db.array_test.insert([

    {name:"joe",scores:[60,60,61,62]},

    {name:"jack",scores:[]}

    ])

    ②db.array_test.update({name:"joe"},{$pop:{scores:-1}})

    ③db.array_test.update({name:"joe"},{$pull:{scores:{$gt:61}}})

    MongoDB为$push和$addToSet提供了一组修改器(modifiers)。通过将操作符和修改器结合使用,可以实现更多复杂的功能

    ①db.array_test.update(

    {name:"joe"},

    {$push:{scores:{$each:[90,92,85]}}})

    ②db.array_test.update(

    {name:"joe"},

    {$push:{scores:{$each:[90,92,85]}}})

    ③db.array_test.update(

    {name:"jack"},

    {$push:

      {

       scores:

        {$each:[{course:"语文",成绩:80},

                {course:"数学",成绩:95},

                {course:"外语",成绩:70},

                 ],

           $sort:{成绩:-1},$slice:2} }})

      1. mongdb提供了四种写入级别:①非确认式写入②确认式写入③日志写入④复制集确认式写入
    • 数据查询
      1. db.集合名.find(query,fields,limit,skip)

    query:指明查询条件  db.student.find({name:”joe”,age:{$lt:22}})

    fields; 用于字段映射,指定是否返回该字段,0代表不返回,1代表返回,语法格式:{field:0}或{field:1}

    limit:限制查询结果集的文档数量,指定查询返回结果数量的上限

    例如:db.student.find({name:”joe”},{“name”:1,”age”:1},2})

    skip:跳过一定数据量的结果,设置第一条返回文档的偏移量

    例如:db.student.find({name:”joe”},{“name”:1,”age”:1},2,1})

      1. ①find函数一次只能查询只能针对一个集合;②db.student.find()或db.student.find({})会返回所有文档;③排序就是sort函数:db.student.find().sort({name:1,age:-1});④db.collection.findOne()只会返回第一条数据
      2. 比较查询操作符

      1. 逻辑查询操作符

     

      1. 元素查询操作符

      1. 数据查询操作符
      2. 内嵌文档查询:①查询整个内嵌文档:当内嵌文档键值对的数量以及键值对的顺序都相同时,才会匹配②查询文档的某个字段  需要.

    db.student.find({“address.city”:”Beijing”})

      1. 数组操作符

    与位置无关:db.student.find({“score.成绩”: 80})

    与位置有关:db.student.find({“scores.2.成绩”: 95})

      1. 游标
          • 提供的函数
          • 游标的生命周期:游标的创建,使用以及销毁三个阶段
          • 创建:var cursor = db.student.find().sort({age:1}).limit(2).skip(10);
          • db.serverStatus().metrics.cursor  查看当前系统的游标状态
      2. 模糊查询:使用$regex或者正则表达式

    {<field>:{$regex:/pattern/,$options:’<options>’}};

    {<field>: /pattern/<options>}

    在$In中只能用正则;在隐式的$and只能用$regex; option包含x或s时,只能用$regex

      1. FindAndModIfy函数:

    • 索引
      1. mongdb索引的类型:

      1. mongdb索引的属性:唯一性,稀疏性,TTL属性
          • 唯一索引(Unique Index):创建db.collection.createIndex( <key and index type specification>, { unique: true } )

    为复合索引设置唯一属性时,只能保证组合索引字段的唯一性,不能确保单个或索引字段自己的唯一性;id唯一索引是自动创建的不能被删除

          • 稀疏索引(spare index):db.student.createIndex({name:1}, {sparse:true})

    指的是只为索引字段存在的文档建立索引,即使索引字段的值为null,但不会为索引字段不存在的文档建立索引。

          • TTL索引(time-to-live index):为文档设置一个超时时间,当达到预设值的时间后,该文档会被数据库自动删除。对于缓存非常有用db.eventlog.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } )

    复合键索引不具备生存时间特性

      1. Mongdb索引的管理:
          • 索引的创建(一旦创建就不能修改,除非删除重建,不能重复创建一个索引)db.collection.createIndex( <key and index type specification>, <options> )
    1. Keys 用来指明创建索引的字段以及排序方向:

    db.student.createIndex({name:1,age:-1})

    1. Options:用来设置索引的属性以及其它辅助选项

    db.student.createIndex({name:1,age:1},{name:’name_age’})

          • 索引的查看

    查看集合拥有的索引db.collection.getIndexes()

    查询建立索引的键名 db.collection.getIndexKeys()

          • 索引的重建

    重建当前集合的所有索引 db.collection.reIndex()先删除在重建

    查询索引的大小 db.a1.totalIndexSize() 

          • 索引的删除

    db.collection.dropIndex(index)

    index:可以是索引的名字,也可以是创建索引时的keys文档参数  db.student.dropIndex(‘name_age’)   //索引名

    db.student.dropIndex({name:1,age-1})        //keys参数

    删除集合中所有的索引 db.collection.dropIndexes() 

          • 索引的查询解释器

    db.collection.find().explain()

    db.stu.find({age:22}).explain()     db.stu.find({age:22}).explain(false)

    db.stu.find({age:22}).explain(“queryPlanner”) queryPlanner:查询计划的选择器,首先进行查询分析,最终选择一个winningPlan是explain返回的默认层面。

     

    hint函数:db.集合.find().hint(index) index参数可以是索引的名字(字符串)或者创建索引时使用的keys参数。

        Mongdb限制每个集合上最多只能创建64个索引

    • 特殊索引
      1. 2dsphere 球面索引-创建

      1. 2d平面索引

      1. 全文索引

    • 权限认证
      1. 创建管理员账号

    db.createUser({ user: “zhangsan”,pwd: “zhangsan123”,roles:[{ role:

    “userAdmin AnyDatabase ", db: "admin" }] })

      1. 密码认证:db.auth(“zhangsan”,”zhangsan123”)
      2. 授权:db.grantRolesToUser("accountUser01",[{role:"read", db:"stock" } ], { w: "majority" , wtimeout: 4000 } )
      3. 修改用户密码:

    db.changeUserPassword("accountUser", "SOh3TbYhx8ypJPxmt1oOfL")

    删除用户(只删除当前数据中的football用户)

      1. 删除账号:db.dropUser("football");
      2. 关闭mongdb服务:db.shutdownServer();
    • 聚合
      1. 聚合管道的概述
          • 聚合管道由阶段组成,文档在一个阶段处理完毕后,聚合管道会将结果传递给下一个阶段
          • 针对聚合功能提供三种方式:聚合管道,单目的聚合操作,MapReduce编程模式
          • MongoDB Shell使用db.collection.aggregate([{<stage>},…])来构建和使用聚合管道。
          • 聚合管道的作用:对文档进行过滤筛选符合条件的文档;对文档进行变换,改变文档输出格式
      2. 聚合管道操作符
          • $project

          • $match

          • $limit:{ $limit: <positive integer> }限制返回的文档数量

    db.article.aggregate([ { $limit : 5 } ]);

          • $skip:{ $skip: <positive integer> }跳过指定数量的文档

    db.article.aggregate( { $skip : 5 } );

          • $group:例如:db.books.aggregate( [ { $group : { _id : "$author", books: { $push: "$title" } } } ] )
          • $sort:{ $sort: { <field1>: <sort order>, <field2>: <sort order> ... } }

    排序db.users.aggregate( [ { $sort : { age : -1, posts: 1 } } ] )

          • Out:{ $out: "<output-collection>" }

    db.books.aggregate( [ { $group : { _id : "$author", books: { $push: "$title" } } }, { $out : "authors" } ] )

          • $unwind:{ $unwind: <field path> },参数是数组类型将文档按照数组字段拆分成多条文档,每条文档包含数组中的一个元素
          • $lookup:

          • 聚合管道表达式

      1. 单目的聚合操作

    常用的主要有两个:count和distinct

    • 与Java

    看雪梨TXT的第三题

     

    • GridFS文件系统
      1. GridFS是mongdb提供的二进制数据的存储解决方案,是专门为大数据文件存储提供的存储方案
      2. GridFS用两个集合来存储一个文件:fs.files 与 fs.chunks
      3. Mongofiles的使用:
          • 上传文件mongofiles  -d gfs put  d:/demo/baidu.jpg
          • 显示文件列表:mongofiles  -d gfs list
          • 下载文件:mongofiles  -d gfs get
          • 删除 delete  搜索search
    • 复制集
      1. MongoDB的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
      2. 各个节点的属性

      1. 复制集的搭建:①启动多个mongdb实例②连接任意一台mongdb实例(主节点)mongo –port27017 ③(主节点)初始化复制集 rs.initiate()④(主节点)查看复制集的状态 rs.status()⑤(主节点)另外两个从节点加入复制集rs.add(“127.0.0.1:27018”)
      2. 添加冲裁节点:①启动仲裁节点所需的mongdb实例②连接上主节点③添加仲裁节点到副本集中rs.addArb(“127.0.0.1:27020”)④查看复制集状态
      3. 将从节点变为仲裁者

    1、确认该节点与所有客户端都断开连接2、关闭该从节点3、(主节点)将从节点从REPL的配置信息中删除rs.remove(“127.0.0.1:27019”)

    4、(主节点)确认复制集已经没有该节点rs.conf()

    5、将从节点的数据目录删除或者重命名6、创建新的目录供仲裁节点使用

    7、启动仲裁节点所需的mongodb实例8、连接上主节点mongo --port 27018  9、添加仲裁节点到副本集中 10、查看复制集的状态

      1.  
    • 分片
      1. 分片的优势:使用分片来支持具有非常大的数据集和高吞吐量的操作的部署。
      2. 三种服务器:路由服务器,分片服务器,配置服务器
      3. 为了将一个集合的所有文档进行分片,mongdb通过shard key进行数据集的分割
      4. Mongdb将分片后的数据存在chunk
      5. 两种分片策略:哈希分片,范围分片
    • Redis简介
      1. redis的特性:①开源免费②支持持久化③存储类型丰富④支持数据备份
      2. redis的适用场合:①实时消息系统②排行榜③精准设定过期时间④计数器⑤最新N的数据操作
      3. redis相比memcached有哪些优势:①memcached所有的值均是简答的字符串,redis作为替代者,支持更为丰富的数据类型②redis的速度比memcached快很多③redis可以持久化其数据
      4. redis简介:本质上是一个key-value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存

     

    • Redis的数据类型及操作
      1. String

      1. List

      1. Hash 

      1. Set

      1. Zset

      1. HyperLogLog

    • Redis常用命令
      1. 键值相关命令:

     

      1. 服务器相关命令:

    • Redis高级特性
      1. 持久化
          • 快照是默认的持久化方式。这种方式是将内存中的数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。
          • Redis 是一个持久化的内存数据库
          • Redis 提供了不同级别的持久化方式(内存的数据保存到磁盘上):
          • RDB(Redis DataBase)持久化方式能够在指定的时间间隔能对你的数据进行快照(SnapShot )存储。
          • AOF(Append Only File)持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾,Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。

     

      1. Rdb的优点与缺点

    优点:①RDB是一个非常紧凑的文件②RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他IO操作,所以RDB持久化方式可以最大化redis的性能.③与AOF相比,在恢复大的数据集的时候,RDB方式会更快一些

    缺点:①数据丢失风险大 ②RDB需要经常fork子进程来保存数据集到硬盘上,当数据集比较大的时候,fork的过程是非常耗时的,可能会导致Redis在一些毫秒级内不能响应客户端的请求

      1. Aof的优点与缺点

    优点:①AOF文件是一个只进行追加的日志文件 ②使用AOF 会让你的Redis更加灵活: 你可以使用不同的fsync策略 ③redis可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写 ④AOF文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析也很轻松

    缺点:①对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积 ②根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB

      1. Redis事务的相关命令有哪几个 ①MULTI②EXEC③DISCARD④WATCH
      2. 主从复制
        1. 主从复制原理

    通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。     主从复制特点:

          • master可以拥有多个slave
          • 多个slave可以连接同一个master外,还可以互相连接
          • 主从复制不会阻塞master,在同步数据时,master可以继续处理client请求   提高系统的伸缩性
        • 主从复制过程
          • slave与master建立连接,发送sync同步命令 master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。后台完成保存后,就将此文件发送给slave slave将此文件保存到硬盘上
      • Redis发布/订阅(RUB/SUB)

      1. 安全性:设置客户端连接后进行任何命令前需要使用的密码
      2. Redis-Sentinel机制    故障切换的原理:

    展开全文
  • 从人工智能的概念被提出开始,构建大规模的知识库一直都是人工智能、自然语言理解等领域的核心任务之一。下面首先分别介绍了早期的知识库项目和以互联网为基础构建的新一代知识库项目。并单独介绍了典型的中文知识...

    从人工智能的概念被提出开始,构建大规模的知识库一直都是人工智能、自然语言理解等领域的核心任务之一。下面首先分别介绍了早期的知识库项目和以互联网为基础构建的新一代知识库项目。并单独介绍了典型的中文知识图谱项目。


    1. 早期的知识库项目


    Cyc  :  Cyc 是持续时间最久,影响范围较广,争议也较多的知识库项目。Cyc 是在 1984 年由 Douglas Lenat 开始创建。最初的目标是要建立人类最大的常识知识库。典型的常识知识如 ”Every tree is a plant” ,”Plants die eventually”等。Cyc 知识库主要由术语 Terms 和断言 Assertions 组成。Terms 包含概念、关系和实体的定义。Assertions 用来建立 Terms 之间的关系,这既包括事实 Fact 描述,也包含规则 Rule 的描述。最新的 Cyc 知识库已经包含有 50 万条 Terms 和 700 万条 Assertions。 Cyc 的主要特点是基于形式化的知识表示方法来刻画知识。形式化的优势是可以支持复杂的推理。但过于形式化也导致知识库的扩展性和应用的灵活性不够。Cyc 提供开放版本 OpenCyc。


    WordNet:WordNet 是最著名的词典知识库,主要用于词义消歧。WordNet 由普林斯顿大学认识科学实验室从1985年开始开发。WordNet 主要定义了名词、动词、形容词和副词之间的语义关系。例如名词之间的上下位关系(如:“猫科动物”是“猫”的上位词),动词之间的蕴含关系(如:“打鼾”蕴含着“睡眠”)等。WordNet3.0已经包含超过15万个词和20万个语义关系。


    ConceptNet:ConceptNet是常识知识库。最早源于MIT媒体实验室的Open Mind Common Sense (OMCS)项目。OMCS项目是由著名人工智能专家Marvin Minsky于1999年建议创立。ConceptNet主要依靠互联网众包、专家创建和游戏三种方法来构建。ConceptNet知识库以三元组形式的关系型知识构成。ConceptNet5版本已经包含有2800万关系描述。与Cyc相比,ConceptNet采用了非形式化、更加接近自然语言的描述,而不是像Cyc那样采用形式化的谓词逻辑。与链接数据和谷歌知识图谱相比,ConceptNet比较侧重于词与词之间的关系。从这个角度看,ConceptNet更加接近于WordNet,但是又比WordNet包含的关系类型多。此外,ConceptNet完全免费开放,并支持多种语言。


    2. 语义网与知识图谱


    互联网的发展为知识工程提供了新的机遇。在一定程度上,是互联网的出现帮助突破了传统知识工程在知识获取方面的瓶颈。从1998年Tim Berners Lee提出语义网至今,涌现出大量以互联网资源为基础的新一代知识库。这类知识库的构建方法可以分为三类:互联网众包、专家协作和互联网挖掘。


    Freebase: Freebase是一个开放共享的、协同构建的大规模链接数据库。Freebase是由硅谷创业公司MetaWeb于2005年启动的一个语义网项目。2010年,谷歌收购了Freebase作为其知识图谱数据来源之一。Freebase主要采用社区成员协作方式构建。其主要数据来源包括维基百科Wikipedia、世界名人数据库NNDB、开放音乐数据库MusicBrainz,以及社区用户的贡献等。Freebase基于RDF三元组模型,底层采用图数据库进行存储。Freebase的一个特点是不对顶层本体做非常严格的控制,用户可以创建和编辑类和关系的定义。2016年,谷歌宣布将Freebase的数据和API服务都迁移至Wikidata,并正式关闭了Freebase。


    DBPedia: DBPedia是早期的语义网项目。DBPedia意指数据库版本的Wikipedia,是从Wikipedia抽取出来的链接数据集。DBPedia采用了一个较为严格的本体,包含人、地点、音乐、电影、组织机构、物种、疾病等类定义。此外,DBPedia还与Freebase,OpenCYC、Bio2RDF等多个数据集建立了数据链接。DBPedia采用RDF语义数据模型,总共包含30亿RDF三元组。


    Schema.org:Schema.org是2011年起,由Bing、Google、Yahoo和Yandex等搜索引擎公司共同支持的语义网项目。Schema.org支持各个网站采用语义标签(Semantic Markup)的方式将语义化的链接数据嵌入到网页中。搜索引擎自动搜集和归集这些,快速的从网页中抽取语义化的数据。Schema.org提供了一个词汇本体用于描述这些语义标签。截止目前,这个词汇本体已经包含600多个类和900多个关系,覆盖范围包括:个人、组织机构、地点、时间、医疗、商品等。谷歌于2015年推出的定制化知识图谱支持个人和企业在其网页中增加包括企业联系方法、个人社交信息等在内的语义标签,并通过这种方式快速的汇集高质量的知识图谱数据。截止2016年,谷歌的一份统计数据显示,超过31%的网页和1200万的网站已经使用了Schema.org发布语义化的链接数据。其它采用了部分Schema.org功能的还包括微软Cortana、Yandex、Pinterest、苹果的Siri等。Schema.org的本质是采用互联网众包的方式生成和收集高质量的知识图谱数据。


    WikiData:  WikiData的目标是构建一个免费开放、多语言、任何人或机器都可以编辑修改的大规模链接知识库。WikiData由维基百科于2012年启动,早期得到微软联合创始人Paul Allen、Gordon Betty Moore基金会以及Google的联合资助。WikiData继承了Wikipedia的众包协作的机制,但与Wikipedia不同,WikiData支持的是以三元组为基础的知识条目(Items)的自由编辑。一个三元组代表一个关于该条目的陈述(Statements)。例如可以给“地球”的条目增加“<地球,地表面积是,五亿平方公里>”的三元组陈述。截止2016年,WikiData已经包含超过2470多万个知识条目。


    BabelNetBabelNet是类似于WordNet的多语言词典知识库。BabelNet的目标是解决WordNet在非英语语种中数据缺乏的问题。BabelNet采用的方法是将WordNet词典与Wikipedia百科集成。首先建立WordNet中的词与Wikipedia的页面标题的映射,然后利用Wikipedia中的多语言链接,再辅以机器翻译技术,来给WordNet增加多种语言的词汇。BabelNet3.7包含了271种语言,1400万同义词组,36.4万词语关系和3.8亿从Wikipedia中抽取的链接关系,总计超过19亿RDF三元组。 BabelNet集成了WordNet在词语关系上的优势和Wikipedia在多语言语料方面的优势,构建成功了目前最大规模的多语言词典知识库。


    NELLNELL(Never-Ending Language Learner) 是卡内基梅隆大学开发的知识库。NELL主要采用互联网挖掘的方法从Web自动抽取三元组知识。NELL的基本理念是:给定一个初始的本体(少量类和关系的定义)和少量样本,让机器能够通过自学习的方式不断的从Web学习和抽取新的知识。目前NELL已经抽取了300多万条三元组知识。


    YAGO: YAGO是由德国马普研究所研制的链接数据库。YAGO主要集成了Wikipedia、WordNet和GeoNames三个来源的数据。YAGO将WordNet的词汇定义与Wikipedia的分类体系进行了融合集成,使得YAGO具有更加丰富的实体分类体系。YAGO还考虑了时间和空间知识,为很多知识条目增加了时间和空间维度的属性描述。目前,YAGO包含1.2亿条三元组知识。YAGO是IBM Watson的后端知识库之一。


    Microsoft ConceptGraph :ConceptGraph 是以概念层次体系为中心的知识图谱。与Freebase等知识图谱不同,ConceptGraph 以概念定义和概念之间的IsA关系为主。给定一个概念如“Microsoft”,ConceptGraph 返回一组与“微软”有IsA关系概念组,如:“Company”,“Software Company”,“Largest OS Vender”等。这被称为概念化 “Conceptualization”。ConceptGraph 可以用于短文本理解和语义消歧中。例如,给定一个短文本 “the engineer is eating the apple”,可以利用ConceptGraph来正确理解其中“apple”的含义是“吃的苹果”还是“苹果公司”。微软发布的第一个版本包含超过 540 万的概念,1255 万的实体,和 8760万的关系。ConceptGraph 主要通过从互联网和网络日志中挖掘来构建。


    LOD-Linked Open Data:LOD 的初衷是为了实现 Tim Berners-Lee 在 2006 年发表的有关链接数据(Linked Data)作为语义网的一种实现的设想。LOD 遵循了Tim提出的进行数据链接的四个规则,即:(1)使用URI标识万物;(2)使用HTTP URI,以便用户可以(像访问网页一样)查看事物的描述;(3)使用RDF和SPARQL标准;(4)为事物添加与其它事物的URI链接,建立数据关联。截止目前,LOD 已经有 1143 个链接数据集,其中社交媒体、政府、出版和生命科学四个领域的数据占比超过 90%。56% 的数据集对外至少与一个数据集建立了链接。被链接最多的是dbpedia的数据。比较常用的链接类型包括:foaf:knows、sioc:follows、owl:sameAs、rdfs:seeAlso、dct:spatial、skos:exactMatch等。LOD鼓励各个数据集使用公共的开放词汇和术语,但也允许使用各自的私有词汇和术语。在使用的术语中,有41%是公共的开放术语。


    3. 中文知识图谱资源


    OpenKG.CN中文开放知识图谱联盟旨在通过建设开放的社区来促进中文知识图谱数据的开放与互联,促进中文知识图谱工具的标准化和技术普及。


    Zhishi.me :Zhishi.me是中文常识知识图谱。主要通过从开放的百科数据中抽取结构化数据,已融合了百度百科,互动百科以及维基百科中的中文数据。


    CN-DBPeidia:CN-DBpedia是由复旦大学知识工场实验室研发并维护的大规模通用领域结构化百科。CN-DBpedia主要从中文百科类网站(如百度百科、互动百科、中文维基百科等)的纯文本页面中提取信息,经过滤、融合、推断等操作后,最终形成高质量的结构化数据,供机器和人使用。CN-DBpedia自2015年12月份发布以来已经在问答机器人、智能玩具、智慧医疗、智慧软件等领域产生数亿次API调用量。CN-DBpedia提供全套API,并且免费开放使用。大规模商务调用,提供由IBM、华为支持的专业、稳定服务接口。


    cnSchema.org: cnSchema.org 是一个基于社区维护的开放的知识图谱 Schema 标准。cnSchema 的词汇集包括了上千种概念分类(classes)、数据类型(data types)、属性(propertities)和关系(relations)等常用概念定义,以支持知识图谱数据的通用性、复用性和流动性。结合中文的特点,我们复用、连接并扩展了Schema.org,Wikidata, Wikipedia 等已有的知识图谱 Schema 标准,为中文领域的开放知识图谱、聊天机器人、搜索引擎优化等提供可供参考和扩展的数据描述和接口定义标准。通过 cnSchema, 开发者也可以快速对接上百万基于 Schema.org 定义的网站,以及 Bot 的知识图谱数据 API。        





    OpenKG.CN


    中文开放知识图谱(简称OpenKG.CN)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。

    转载须知:转载需注明来源“OpenKG.CN”、作者及原文链接。如需修改标题,请注明原标题。


    点击阅读原文,进入 OpenKG 博客。

    展开全文
  • Wikidata知识库

    千次阅读 2019-07-13 11:10:44
    之前大部分知识库问答工作的知识库使用的是Freebase,但是Freebase已经停止更新,大部分dump迁移到Wikidata知识库上。 #Items 为了支持维基百科上所有可用的知识,我们首先需要一种存储这些知识表示形式的方法。这些...

    之前大部分知识库问答工作的知识库使用的是Freebase,但是Freebase已经停止更新,大部分dump迁移到Wikidata知识库上。

    #Items
    为了支持维基百科上所有可用的知识,我们首先需要一种存储这些知识表示形式的方法。这些知识的表示形式称为items

    #Item Pages
    每个条目都有自己的页面(收集关于它的所有数据)和惟一标识符。这个标识符看起来总是类似于Qxx。虽然这个标识符对于机器和用许多不同的语言表示知识很有用,但是它对人类不是很友好。

    #LABELS
    在这里插入图片描述
    1.标签类似于描述项目内容的页面标题。它应该尽可能的短(例如,Earth,而不是Planet Earth)
    2.标签不必是惟一的,因为它们可以通过描述消除歧义

    ##Descriptions
    如前所述,描述用于通过提供关于项目的更多细节来消除标签的歧义。
    例如,“2007自然纪录片”和“四大经典元素之一”都是对地球的描述——它们都不是我们生活的星球!

    ##Aliases
    在Wikidata上,项目的另一种名称(如人的昵称或动物的科学名称)称为别名。

    在《Wikidata: A Free Collaborative Knowledge Base》论文中,指出了Simple Data和Not-So-Simple Data,
    Simple Data:为了存储文本标签和语言链接之外的结构化数据,Wikidata使用了一个简单的数据模型。数据基本上是通过使用属性值对来描述的。例如,罗马这个item可能有一个“population”的property,值为2,777,979。property本身就是对象,它具有带有标签、别名和描述的Wikidata页面。然而,与item相反,这些页面没有链接到Wikipedia文章
    另一方面,property页总是指定一个数据类型,该数据类型定义property可以具有哪种类型的值。“population”是一个数字,邮政编码是一个字符串。
    Not-So-Simple Data:属性值对在许多情况下过于简单。例如,维基百科上说罗马的人口根据Istat公布的估计,截至2010年,这一数字为2,761,477。即使不考虑源信息,这些信息也很难用属性值对表示,因此,我们得到一个模型,其中分配给项的属性值对可以有附加的从属属性值对,我们称之为qualifiers。qualifiers可用于声明上下文信息,也可以用来编码三元关系。比如,梅丽尔·斯特里普(Meryl Streep)演过《铁娘子》中的Margaret Thatcher这个角色,你可以在电影这个ITEM中添加一个值为梅丽尔·斯特里普的cast member的property,和一个额外的qualifiersr, ‘role=Margaret Thatcher’.

    展开全文
  • 数据仓库相关知识

    千次阅读 2018-08-28 17:08:19
    数据仓库(Data Warehouse) 一、概念 数据仓库是这么定义的:数据仓库是在企业管理和决策中面向主题的、集成的、与时间相关的、不可修改的数据集合。 这个定义中有一个定义比较容易含混,那就是“面向主题”。...
  • 开放知识库调研

    万次阅读 2016-01-15 14:56:34
    开放知识库调研目前调研到可用的开放知识库包括:Knowledge Graph, Freebase, Wikidata。下文描述能够获取的数据以及对应最方便的接口方式。Knowledge Graph关键字搜索接口接口方式: HTTP GET数据格式: json数据内容...
  • 01 CODESYS应用基础知识数据类型

    千次阅读 2020-03-28 12:33:17
    CODESYS、数据基础类型
  • 搭建和更新知识库

    千次阅读 2019-04-10 14:49:00
    2.如何搭建多数据类型知识库KB框架: 1)准备一个文件服务器用于存放文件,给文件分类比如按文件类型,文件名称等。 在KB中保存问题和答案,问题可以是文件名称,答案是文件的url地址。 2)使用 Azure 凭据...
  • 基础知识 Redis是一个内存数据库, 所有数据基本上都存在于内存当中, 会定时以追加或者快照的方式刷新到硬盘中. 由于redis是一个内存数据库, 所以读取写入的速度是非常快的, 所以经常被用来做数据, 页面等的缓存。 ...
  • 揭开知识库问答KB-QA的面纱1·简介篇

    千次阅读 2018-05-10 14:33:45
    内容速览什么是知识库(knowledge base, KB)什么是知识库问答(knowledge base question answering, KB-QA)知识库问答的主流方法知识库问答的数据集什么是知识库“奥巴马出生在火奴鲁鲁。”“姚明是中国人。”...
  • 数据仓库和数据挖掘基础知识

    千次阅读 2019-02-15 20:13:36
    第一章 数据仓库和数据挖掘概述 一、概念题 1、数据仓库的定义是什么?  答:数据仓库是面向主题的、集成的、稳定的、不同时间的数据集合,用于支持经营管理中央决策制定过程。 2、数据仓库的特点是什么?  ...
  • 初学TypeScript之基本数据类型

    万次阅读 2019-05-02 16:38:44
    这样就可以减少我们之前提过的想要的结果数据类型与真实接收到的数据类型不一致这个问题就解决了。大大减少了开发过程中的这类问题的出错率。当然代价就是需要学习这个语言。当然,如果你的js基础很好的话再加上了解...
  • 从抽象层面看,本体最抽象,其次是知识库,最后才是知识图谱。举个例子,如果我们要做图书领域的知识库或者知识图谱,首先要对图书进行分类,这个分类就是本体,比如说,图书分为计算机类和电子类,计算机类有分为...
  • 因为硕士研究方向是基于知识图谱的医学问答系统,所以调研了下现有的生物医学(BioMedical)和医学(Medical)知识库。 首先需要对上述两个概念做个区分,从我的理解来看,生物医学更加微观,偏向于蛋白质/基因等各种...
  • 写给数据分析师的数据仓库知识(3)

    万次阅读 2020-03-16 21:26:13
    小B是一名数据分析师,他问小A XXX的所有指标给我一下,小A“鄙视的”给了他一个文档。 元数据知道多少 小B作为一名数据分析师,为什么自己没能去找到数据呢? 这就要说下数据仓库的元数据管理。我们都知道传统的...
  • 知识库构建前沿:自动和半自动知识提取   编者按:在过去几十年,人们曾尝试采用直接编辑知识、利用大众智慧、自动或半自动知识抽取三类方法来构建知识库。随着时代发展,直接编辑知识由于受时间和经济成本的...
  • 干货 | 知识库全文检索的最佳实践

    千次阅读 2018-06-07 22:41:13
    1、题记 这是stackoverflow上一篇精彩的问答...2、知识库全文检索问题抛出 重新审视一个停滞不前的项目,并寻求建议,对数千个“旧”文档进行现代化改造, 最终期望效果:通过网络访问这些文档。 文档以各种格式...
  • 定义数据中心的数据类型2.定义数据排序索引信息3.定义中国传统节日的类别和基础数据信息4.定义西医疾病名称的类别和基础信息5.定义中医疾病名称的类别和基础信息6.定义中医名词解释的类别和基础信息7.定义中药材的...
  • ——我想用es做个类似于知识库的东西,所以需要索引一些pdf、word之类的文件,这个你之前有试过吗?能给个方向吗?我的思考如下:1、pdf、Office类的文档如何被ES索引?更确切的说,pdf、Office类文档(word,ppt,...
  • hive数据类型有哪些?

    万次阅读 2018-07-05 00:09:19
    关系数据库里有表(table),分区,hive里也有这些东西,...Hive支持两种数据类型,一类叫原子数据类型,一类叫复杂数据类型。 原子数据类型包括数值型、布尔型和字符串类型,具体如下表所示:基本数据类型 类型 ...
  • 知识管理从建立知识库做起

    千次阅读 2015-06-19 09:07:28
    知识管理从建立知识库做起         在当今知识经济时代,随着竞争的加剧和产业结构的升级,越来越多的中国企业逐渐意识到知识管理的重要性以及紧迫性,这些组织迫切的需要...
  • Swift 4.0学习之:数据类型转换

    千次阅读 2018-03-14 09:25:07
    前提小知识:在Swift中,如果想要使用某一个类(cocoapods导入的三方除外),是...数据类型转换 在Swift中,没有隐式数据转换,所有的转换必须显示,举例如下: //在OC中,所有数据都存在隐式转换 int a = ...
  • 知识图谱——机器大脑中的知识库

    千次阅读 2016-11-27 19:42:16
    知识就是力量。——[英]弗兰西斯·培根 1 什么是知识图谱 在互联网时代,搜索引擎是人们在线获取信息和知识的重要工具。当用户输入一个查询词,搜索引擎会返回它认为与这个关键词最相关的网页。从诞生之日起,搜索...
  • 企业知识库管理系统

    千次阅读 2018-03-09 22:10:50
    在我看来,本系统就是两个核心点第一访问信息快速准确,第二安全科学合理的权限管理,其他还有知识分类,知识上传,下载等等。 本系统采取的后端的技术(本人负责后端):( 一、系统架构 SSM 三大框架。 通过...
  • Confluence,语雀,和钉钉知识库的比对

    万次阅读 2020-04-20 16:32:51
    钉钉知识库 可视化协同编辑 支持 支持 支持 登录登出功能 本地部署的时候可以联动ldap 或者自己管理用户 注册用户账号 .....
  • 数据仓库的基础知识(分层结构)

    万次阅读 多人点赞 2018-08-02 16:19:43
    数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。   数据...
  • 数据仓库面试题

    万次阅读 多人点赞 2020-07-20 12:49:16
    概念数据模型、逻辑数据模型、物理数据模型概念数据模型CDM逻辑数据模型LDM物理数据模型PDMSCD的常用处理方式?元数据的理解?技术元数据业务元数据数据管理系统?元数据管理功能元数据管理标准元数据管理系统印象...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 281,022
精华内容 112,408
关键字:

数据类型知识库