1、Neo4J粗谈粗谈数据库历史1923年,CTR发明了首款电动打孔机数据库历史1 9 5 0 年雷明顿兰德公司推出的 Univac I 一秒钟可以输入数百条记录的磁带驱动器数据库历史汞延迟线汞延迟线数据库历史1956 年IBM生产出第一个磁盘驱动器Model 305 RAMAC数据库历史60 年代数据库系统的萌芽。1961:通用电气 开发了第一个数据库管理系统IDS1969: E.F. Codd发明了关系数据库。1973:Cullinane公司开发了 IDMS一个针对IBM主机的基于网络模型的数据库。1976:Honeywell公司推出了Multics Relational Data Store
2、第一个商用关系数据库产品。1979:Oracle公司引入了第一个商用SQL关系数据库管理系统。1983:IBM推出了DB2数据库产品。1985:为Procter & Gamble系统设计的第一个商务智能系统产生。1991:W.H.“Bill” Inmon发表了”构建数据仓库”。数据库历史数据库历史NoSQL数据库数据库总排名http:/db- Number of mentions of the system on websites. General interest in the system. Frequency of technical discussions about the syst
3、em. Number of job offers, in which the system is mentioned. Number of profiles in professional networks, in which the system is mentioned. Method of calculating the scores of the DB-Engines Ranking引言 1999 我们十位工程师花去了他们大部分的时间与关系型数据库抗衡。 起因,我们意识到我们的软件不是管理一堆个体的、孤立的、离散的数据项,而是管理他们之间的关系关系。 虽然能够很容易的将离散数据存入关系
4、表中,但是对于其关系数据的存储是具有很大挑战的,并且查询速度也是慢的惊人 现在版本2.0.1缘起“Neo4j”NeoInvestorsNeo Technology is a privately held company funded by Fidelity Growth Partners Europe, Sunstone Capital and Conor Venture PartnersRod JohnsonMagnus ChristersenJohan SvenssonNikolaj NyholmNeo Technology, Inc.founder of the Spring Frame
5、workVice President of Intentional Software CorpCEO of Polar RoseCTO of Neo TechnologyEmil EifremCEO of Neo Technologyheadquartered in San Mateo, CAFeatured CustomersHow much faster is a graph database在一个社交网络,需要找到用户所有的朋友的朋友。甚至是朋友的朋友的朋友。于是,用同样为100万用户的MySQL和Neo4j执行这个查询,并且结果是非常惊人的。friends of friends fri
6、ends of friends of friends .一个非常有意思的实验一个非常有意思的实验Neo4j Developer Productivity IncreaseWhat is a Graph Database?图论1736年哥尼斯堡七桥哥尼斯堡七桥开创了数学的一个新的分支开创了数学的一个新的分支 图论与几何拓扑图论与几何拓扑欧拉欧拉A Graph contains Nodes and RelationshipsA Graph records data in Nodes which have PropertiesRelationships organize the GraphNodes
7、 are organized by Relationships which also have PropertiesLabels group the NodesNodes are grouped by Labels into Sets Query a Graph with a TraversalA Traversal navigates a Graph; it identifies Paths which order NodesIndexes look-up Nodes or RelationshipsAn Index maps from Properties to either Nodes
8、or Relationships A Graph Database manages a Graph and also manages related IndexesNeo4j is a Graph DatabaseComparing Database ModelsA Graph Database transforms a RDBMSA Graph Database elaborates a Key-Value Store Column Family (BigTable-style) databases are an evolution of key-value, using families
9、to allow grouping of rows. Stored in a graph, the families could become hierarchical, and the relationships among data becomes explicit.A Graph Database relates Column-FamilyA Graph Database navigates a Document StoreNeo4j HighlightsLanguage DriversFriends of Neo4j speak many languages, and work in
10、many frameworks. http:/www.neo4j.org/download下载启动启动WebadminBrowserThe Neo4j Graph DatabaseNodesRelationshipsRelationships一个关系包含两个节点,而且开始和结束节点是有效的。关系总是有方向的,关系可以被看做相关节点的进和出,这对于图的遍历是很有用的注意,一个节点可以对自己产生关系Properties节点和关系都可以有属性。属性是一个键值对,KEY是一个String。属性值可以是原始类型或者一个原始类型的数组。举例,String,int和int都是设立的属性值。Propertie
11、sLabelsLabel是一个图结构,用来将节点组成集合,所有用同一个label被标记的节点属于一个集合。许多数据库查询可以运行在这些集合中而不是整个图,这样使得查询更易编写和更有效率。一个节点可以被多个label标记,也可以没有label,label是图的可选项。Label 用于定义约束和为属性增加属性。PathsPath是一个或者多个节点和他们之间的关系,代表一个查询或遍历的结果。Paths最短的path长度为0:长度为1的path其他长度为1的path Traversal 一个图就是根据一些规则访问他的节点和一个图就是根据一些规则访问他的节点和关系。大多数情况下只有子图被访问,就像你已经
12、关系。大多数情况下只有子图被访问,就像你已经知道从图的哪里可以找到感兴趣的节点和关系。知道从图的哪里可以找到感兴趣的节点和关系。TraversalSchemaIndexes创建索引可以提升性能,可以提升在数据库中查找节点的速度。ConstraintsNeo4j可以帮助你的数据整洁。用一些特殊的规则来定制约束。任何破坏这些规则的改变将被拒绝。Neo4j是一个schema可选的图数据库。Cypher Query LanguageCypher相当于关系型数据库中的SQL。Cypher书写直观可以不用编写复杂的查询代码即可实现对图数据库的操作。-百度百科Cypher是一种声明式图查询语言,且对于图存储
13、的查询及更新操作具有高可读性和高效性。 Cypher 是一种非常简单而且强大的语言。通过Cypher 可以表达非常复杂的数据库查询。因此让你可以更关注你的领域,而不是迷失在数据库存储里面。IntroductionMATCH: 图模式匹配。这是最常用的从图里面获取数据的途径。WHERE: 理论上不算一个从句, 应该算是 MATCH、OPTIONAL MATCH 和 WITH的一部分。为一个模式添加约束,或者通过WITH过滤中间结果。RETURN: 返回Structure例子1找出John和John的朋友们(间接的朋友关系)并返回John和所有找到的间接朋友。MATCH (john name: J
14、ohn)-:friend-()-:friend-(fof)RETURN john, fof例子2找出朋友名字以S开头的组合MATCH (user)-:friend-(follower)WHERE user.name IN Joe, John, Sara, Maria, Steve AND follower.name = S.*RETURN user, follower.name CREATE (and DELETE): 创建(删除)节点和关系。 SET (and REMOVE):在节点上用SET设置属性的值或者添加Label,并用REMOVE 删除他们。 MERGE: 匹配现有的或者创建新的节
15、点和模式。这对于连接独特的约束条件是非常有用的。Structure嵌入式的数据库图的创建图的查询实例根本原因分析CREATE (A1:Device name: A1, status: normal),(A2:Device name: A2, status: normal),(B1:Device name: B1, status: normal),(B2:Device name: B2, status: normal),(B3:Device name: B3, status: unavailable),(B4:Device name: B4, status: normal),(C1:Device
16、 name: C1, status: unavailable),(C2:Device name: C2, status: normal),(C3:Device name: C3, status: normal),(C4:Device name: C4, status: unavailable),创建图MATCH (n) RETURN n;返回全图MATCH p=(d10:Devicename:D10)-conn:connection*1.-(anyDevice:Device)WHERE anyDevice.status = unavailableRETURN p;查找D10的宕机原因MATCH p=(d1:Devicename:D1)-r*1.-(anyNode)WHERE anyNode.status = unavailableRETURN p;查找D1的宕机原因相关查询neo4j-manual-milestoneO_Reilly.Graph.Databases.2013图论七周七数据库参考读物谢谢!