当前位置:文档之家› 图形数据库Neo4J简介

图形数据库Neo4J简介

图形数据库Neo4J简介
图形数据库Neo4J简介

图形数据库Neo4J简介

最近我在用图形数据库来完成对一个初创项目的

支持。在使用过程中觉得这种图形数据库实际上挺有意思的。因此在这里给大家做一个简单的介绍。NoSQL数据库相信

大家都听说过。它们常常可以用来处理传统的关系型数据库所难以解决的一系列问题。通常情况下,这些NoSQL数据库分为Graph,Document,Column Family以及Key-Value Store等四种。这四种类型的数据库分别使用了不同的数据

结构来记录数据。因此它们所适用的场景也不尽相同。

其中最为特别的便是图形数据库了。可以说,它和其它的一系列NoSQL数据库非常不同:丰富的关系表示,完整的事务支持,却没有一个纯正的横向扩展解决方案。在本文中,我们就将对业界非常流行的图形数据库Neo4J进行简单的介绍。图形数据库简介相信您和我一样,在使用关

系型数据库时常常会遇到一系列非常复杂的设计问题。例如一部电影中的各个演员常常有主角配角之分,还要有导演,特效等人员的参与。通常情况下这些人员常常都被抽象为Person类型,对应着同一个数据库表。同时一位导演本身也可以是其它电影或者电视剧的演员,更可能是歌手,甚至是某些影视公司的投资者(没错,我这个例子的确是以赵薇为模板的)。而这些影视公司则常常是一系列电影,电视剧的

资方。这种彼此关联的关系常常会非常复杂,而且在两个实体之间常常同时存在着多个不同的关系:在尝试使用关系型数据库对这些关系进行建模时,我们首先需要建立表示各种实体的一系列表:表示人的表,表示电影的表,表示电视剧的表,表示影视公司的表等等。这些表常常需要通过一系列关联表将它们关联起来:通过这些关联表来记录一个人到底参演过哪些电影,参演过哪些电视剧,唱过哪些歌,同时又是哪些公司的投资方。同时我们还需要创建一系列关联表来记录一部电影中哪些人是主角,哪些人是配角,哪个人是导演,哪些人是特效等。可以看到,我们需要大量的关联表来记录这一系列复杂的关系。在更多实体引入之后,我们将需要越来越多的关联表,从而使得基于关系型数据库的解决方案繁琐易错。这一切的症结主要在于关系型数据库是以为实体建模这一基础理念设计的。该设计理念并没有提供对这些实体间关系的直接支持。在需要描述这些实体之间的关系时,我们常常需要创建一个关联表以记录这些数据之间的关联关系,而且这些关联表常常不用来记录除外键之外的其它数据。也就是说,这些关联表也仅仅是通过关系型数据库所已有的功能来模拟实体之间的关系。这种模拟导致了两个非常糟糕的结果:数据库需要通过关联表间接地维护实体间的关系,导致数据库的执行效能低下;同时关联表的数量急剧上升。这种执行效能到底低下到什么程度呢?就

以建立人和电影之间的投资关系为例。一个使用关联表的设计常常如下所示:如果现在我们想要通过该关系找到一部电影的所有投资人,关系型数据库常常会执行哪些操作呢?首先,在关联表中执行一个Table Scan操作(假设没有得

到索引支持),以找到所有film域的值与目标电影id相匹配的记录。接下来,通过这些记录中的person域所记录的Person的主键值来从Person表中找到相应的记录。如果记录较少,那么这步就会使用Clustered Index Seek操作(假设是使用该运算符)。整个操作的时间复杂度将变为

O(nlogn):可以看到,通过关联表组织的关系在运行时的性能并不是很好。如果我们所需要操作的数据集包含了非常多的关系,而且主要是在对这些关系进行操作,那么可以想象到关系数据库的性能将变得有多差。除了性能之外,关联表数量的管理也是一个非常让人头疼的问题。刚刚我们仅仅是举了一个具有四个实体的例子:人,电影,电视剧,影视公司。现实生活中的例子可不是这么简单。在一些场景下,我们常常需要对更多的实体进行建模,从而完整地描述某一领域内的关联关系。这种关联关系所涵盖的可能包含影视公司的控股关系,各控股公司之间复杂的持股关系以及各公司之间的借贷款情况及担保关系等,更可能是人之间的关系,人与各个品牌之间的代言关系,各个品牌与所属公司之间的关系等。可以看到,在需要描述大量关系时,传统

的关系型数据库已经不堪重负。它所能承担的是较多实体但是实体间关系略显简单的情况。而对于这种实体间关系非常复杂,常常需要在关系之中记录数据,而且大部分对数据的操作都与关系有关的情况,原生支持了关系的图形数据库才是正确的选择。它不仅仅可以为我们带来运行性能的提升,更可以大大提高系统开发效率,减少维护成本。在一个图形数据库中,数据库的最主要组成主要有两种,结点集和连接结点的关系。结点集就是图中一系列结点的集合,比较接近于关系数据库中所最常使用的表。而关系则是图形数据库所特有的组成。因此对于一个习惯于使用关系型数据库开发的人而言,如何正确地理解关系则是正确使用图形数据库的关键。注:这里的结点集是我自己的翻译。在Neo4J 官方文档中,其被称为label。原文为:A label is a named graph construct that is used to group nodes into sets; all nodes labeled with the same label belongs to the same set。我个人觉得生硬地取名为标签反而容易让别人混淆,所以选取了“group nodes into sets”的意译,也好让label和node,即结点集和结点之间的关系能够更好地对应。但是不用担心,在了解了图形数据库对数据进行抽象的方式之后,您就会觉得这些数据抽象方式实际上和关系型数据库还是非

常接近的。简单地说,每个结点仍具有标示自己所属实体类型的标签,也既是其所属的结点集,并记录一系列描述该结

点特性的属性。除此之外,我们还可以通过关系来连接各个结点。因此各个结点集的抽象实际上与关系型数据库中的各个表的抽象还是有些类似的:但是在表示关系的时候,关系型数据库和图形数据库就有很大的不同了:从上图中可以看到,在需要表示多对多关系时,我们常常需要创建一个关联表来记录不同实体的多对多关系,而且这些关联表常常不用来记录信息。如果两个实体之间拥有多种关系,那么我们就需要在它们之间创建多个关联表。而在一个图形数据库中,我们只需要标明两者之间存在着不同的关系,例如用DirectBy关系指向电影的导演,或用ActBy关系来指定参与电影拍摄的各个演员。同时在ActBy关系中,我们更可以通过关系中的属性来表示其是否是该电影的主演。而且从上面所展示的关系的名称上可以看出,关系是有向的。如果希望在两个结点集间建立双向关系,我们就需要为每个方向定义一个关系。也就是说,相对于关系数据库中的各种关联表,图形数据库中的关系可以通过关系能够包含属性这一功能来提供更为丰富的关系展现方式。因此相较于关系型数据库,图形数据库的用户在对事物进行抽象时将拥有一个额外的武器,那就是丰富的关系:因此在为图形数据库定义数据展现时,我们应该以一种更为自然的方式来对这些需要展现的事物进行抽象:首先为这些事物定义其所对应的结点集,并定义该结点集所具有的各个属性。接下来辨识出它

们之间的关系并创建这些关系的相应抽象。因此一个图形数据库中所承载的数据最终将有类似于下图所示的结构:设计一个优质的图在了解了图形数据库的基础知识之后,我们就要开始尝试使用图形数据库了。首先我们要搞清楚一个问题,那就是如何为我们的图形数据库定义一个设计良好的图?实际上这并不困难,您只需要了解图数据库设计时所使用的一系列要点即可。首先就是,分清图中结点集,结点以及关系之间的相互联系。在以往的基于关系型数据库的设计中,我们常常会使用一个表来抽象一类事物。如对于人这个概念,我们常常会抽象出一个表,并在表中添加表示两个人的记录,Alice和Bob:而在图数据库中,这里对应着两个概念:结点集和结点。在通常情况下,图形数据库中的数据展示并不使用结点集,而是独立的结点:

而如果需要在图中添加对书籍的支持,那么这些书籍将仍然被表示为一个结点:也就是说,虽然在一个图数据库中常常拥有结点集的概念,但是它已经不再作为图数据库的最重要抽象方式了。甚至从某些图形数据库已经允许软件开发人员使用Schemaless结点这一点上来看,它们已经将结点集的概念弱化了。反过来,我们思考的角度就应该是结点个体,以及这些个体之间所存在的一系列关系。那么我们是不是可以随便定义各个结点所具有的数据呢?不是的。这里最为常用的一个准则就是:Schemaless这种灵活度能为

你带来好处。例如相较于强类型语言,弱类型语言可以为软件开发人员带来更大的开发灵活度,但是其维护性和严谨性常常不如强类型语言。同样地,在使用Schemaless结点时也要兼顾灵活性和维护性。这样我们就可以在结点中添加多种多样的关系,而不用像在关系型数据库中那样需要担心是否需要通过更改数据库的Schema来记录一些外键。这进而允许软件开发人员在各结点间添加多种多样的关系:

因此在一个图形数据库中,结点集这个概念已经不是最重要的那一类概念了。例如在某些图形数据库中,各个结点的ID 并不是按照结点集来组织的,而是根据结点的创建顺序来赋予的。在调试时您可能会发现,某个结点集内的第一个结点的ID是1,第二个结点的ID就是3了。而具有2这个ID的结点则处于另一个结点集中。那么我们应该如何为业务逻辑定义一个合适的图呢?简单地说,单一事物应该被抽象为一个结点,而同一类型的结点被记录在同一个结点集中。结点集内各结点所包含的数据可能有一些不同,如一个人可能有不同的职责并由此通过不同的关系和其它结点关联。例如一个人既可能是演员,可能是导演,也可能是演员兼导演。在关系型数据库中,我们可能需要为演员和导演建立不同的表。而在图形数据库中,这三种类型的人都是人这个结点集内的数据,而不同的仅仅是它们通过不同的关系连接到不同的结点上了而已。也就是说,在图形数据库中,结点集并不

会像关系型数据库中的表一样粒度那么小。一旦抽象出了各个结点集,我们就需要找出这些结点之间所可能拥有的关系。这些关系不仅仅是跨结点集的。有时候,这些关系是同一结点集内的结点之间的关系,甚至是同一结点指向自身的关系:这些关系通常都具有一个起点和终点。也就是说,图形数据库中的关系常常是有向的。如果希望在两个结点之间创建一个相互关系,如Alice和Bob彼此相识,我们就需要在他们之间创建两个KNOW_ABOUT关系。其中一

个关系由Alice指向Bob,而另一个关系则由Bob指向Alice:需要注意的一点就是,虽然说图形数据库中的关系是单向的,但是在一些图形数据库的实现中,如Neo4J,我们不仅仅可以查找到从某个结点所发出的关系,也可以找到指向某个结点的各个关系。也就是说,虽然图中的关系是单向的,但是关系在起点和终点都可以被查找到。在项目中使用Neo4J OK,在大概了解了图形数据库的一些基础知识之后,我们就将以Neo4J为例讲解如何使用一个图形数据库了。Neo4J

是Neo Technology所提供的开源图形数据库。其按照上面所介绍的结点/关系模型组织数据,并拥有以下一系列特性:对事务的支持。Neo4J强制要求每个对数据的更改都需要在一个事务之内完成,以保证数据的一致性。强大的图形搜索能力。Neo4J允许用户通过Cypher语言来操作数据库。该语言是特意为操作图形数据库设计的,因此其可以非常高效

地操作图形数据库。同时Neo4J也提供了面向当前市场一系列流行语言的客户端,以供使用这些语言的开发人员能够快速地对Neo4J进行操作。除此之外,一些项目,如Spring Data Neo4J,也提供了一系列非常简单明了的数据操作方式,使得用户上手变得更为容易。具有一定的横向扩展能力。由于图中的一个结点常常具有和其它结点相关联的关系,因此像一系列Sharding解决方案那样对图进行切割常常并不现实。因此Neo4J当前所提供的横向扩展方案主要是通过Read Replica进行的读写分割。反过来,由于单个Neo4J

实例可以存储几十亿个结点及关系,因此对于一般的企业级应用,这种横向扩展能力已经足够了。好,现在我们就来看一个通过Cypher来创建并操作图形数据库的例子(来

自https://www.doczj.com/doc/f8596502.html,/developer/guide-data-modeling/):1 // 创建Sally这个Person类型的结点,该结点的name属性为Sally,age属性为32 2 CREATE (sally:Person { name:

'Sally', age: 32 }) 3 4 // 创建John结点5 CREATE (john:Person { name: 'John', age: 27 }) 6 7 // 创建Graph Databases一书所对应的结点8 CREATE (gdb:Book { title: 'Graph Databases', 9 authors: ['Ian Robinson', 'Jim

Webber'] })10 11 // 在Sally和John之间建立朋友关系,这里的since值应该是timestamp。请自行回忆各位的日期是

如何在关系数据库中记录的~~~12 CREATE

(sally)-[:FRIEND_OF { since: 1357718400 }]->(john)13 14 // 在Sally和Graph Databases一书之间建立已读关系15 CREATE (sally)-[:HAS_READ { rating: 4, on: 1360396800 }]->(gdb)16 17 // 在John和Graph Databases 一书之间建立已读关系18 CREATE (john)-[:HAS_READ { rating: 5, on: 1359878400 }]->(gdb) 该段语句创建了

三个结点:Person结点Sally和John,以及Book结点gdb。同时还指定了它们之间的关系:注:原图来自

https://www.doczj.com/doc/f8596502.html,/developer/guide-data-modeling/想节省时间花在有用的地方,但是为了完整性不得不写这里有一点需要注意的地方,那就是关系是单向的。如果希望建立一个双向的关系,就像上面Sally和John互为朋友关系那样,我们按理来说应该需要重复执行创建关系的过程。由于我没有试过最新版本的Neo4J(因为它最近有一个破坏了后向兼容性的更改,我们暂时没有办法升级Neo4J,也就没有办法确认上面的代码是不是少创建了一次FRIEND_OF),因此请读者注意。如果有谁实验了,请将结果添加到Comment中,感激不尽。有了数据,我们就可以对数据进行操作了。虽然Cypher和SQL操作的是不同的数据结构,但是他们的语法结构还是非常相似的。例如下面的语句就用来获得Sally 和John是什么时候成为朋友的(来自

https://www.doczj.com/doc/f8596502.html,/developer/guide-data-modeling/):1

MATCH (sally:Person { name: 'Sally' })2 MATCH

(john:Person { name: 'John' })3 MATCH

(sally)-[r:FRIEND_OF]-(john)4 RETURN r.since as

friends_since 而且还有一些更复杂的语法。如下面的操作就用来判断Sally和John谁先读了《Graph Databases》一书:1 MATCH (people:Person)2 WHERE https://www.doczj.com/doc/f8596502.html, = 'John' OR https://www.doczj.com/doc/f8596502.html, = 'Sally'3 MATCH

(people)-[r:HAS_READ]->(gdb:Book { title: 'Graph Databases' })4 RETURN https://www.doczj.com/doc/f8596502.html, as first_reader5 ORDER BY r.on6 LIMIT 1 当然,谁都不愿意写SQL,否则Hibernate也发展不起来。一个当前较为流行的解决方案就是Spring Data Neo4J。通过定义一系列Java类并在其上使用一系列标记,我们就能在系统中使用Neo4J了。现在我们就以3.4.4版本的Spring Data Neo4J为例讲解如何对其进行使用。首先,我们需要为将要存入到Neo4J中的数据定义相应的数据类型(来自于

http://projects.spring.io/spring-data-neo4j/):1 // 通过NodeEntity标记来创建一个需要被存入到Neo4J的数据类型2 @NodeEntity 3 public class Movie { 4 // 通过GraphId 标记来指定作为ID的域。如果是新建一个结点,那么我们需要将该域置空(null)。不知道4.0.0是否还有这个限制5 @GraphId Long id; 6 7 // 创建针对该域的索引8

@Indexed(type = FULLTEXT, indexName = 'search') 9 String title;10 11 // 对Person类的直接引用。在保存时,其将会被自动保存到Person结点集中并保持Movie类对该实例的引用12 Person director;13 14 // 通过RelatedTo标记来标示当前集合所引用的各个实体对应于当前Movie实例的关系是ACTS_IN。注意这里标明了方向是INCOMING,也就是说,其方向是从Person指向Movie,也既是Person ACTS_IN Movie。而在Person中,我们同样可以拥有一个Movie的集合,同样使用RelatedTo标记使用ACTS_IN关系,而direction为OUTGOING15 // 另,RelatedTo和RelatedToVia标记按理来说在4.0.0里已经被丢弃了,但是在官方示例中依然被使用16 @RelatedTo(type='ACTS_IN', direction = INCOMING)17 Set actors;18 19

@RelatedToVia(type = 'RATED')20 Iterable ratings;21 22 // 使用自定义Query读取数据23 @Query('start

movie=node({self}) match 24 movie-->genrereturn

similar')25 Iterable similarMovies;26 } 接下来,您就可以创建一个用来对刚刚所定义的类型进行CRUD操作的Repository了:1 // 从GraphRepository接口直接得到对Movie类进行CRUD的功能2 interface MovieRepository extends GraphRepository { 3 // 通过Cypher语句来执行特定的操作4 @Query('start movie={0} match m 5 return

rating') 6 Iterable getRatings(Movie movie); 7 8 // 和Spring Data JPA一样,可以通过特定的规则组合函数名来添加筛选条件9 Iterable findByActorsMoviesActorName(name)10 } 最后我们需要在Spring的配置文件中指定这些组成所在的位置:1 neo4j:config storeDirectory='target/graph.db'

base-package='com.example.neo4j.entity'/>2

neo4j:repositories

base-package='com.example.neo4j.repository' /> Neo4J 集群OK,在了解了如何使用Neo4J之后,下一步要考虑的就是如何通过搭建一个Neo4J集群来提供一个具有高可用性,高吞吐量的解决方案了。首先您要知道的是,和其它NoSQL数据库所提供的近乎无限的横向扩展能力相比,Neo4J集群实际上是有一定限制的。为了能更好地理解这些限制,就让我们首先看一看Neo4J集群的架构以及它到底是如何工作的:上图展示了一个由三个Neo4J结点所组成的Master-Slave集群。通常情况下,每个Neo4J集群都包含一个Master和多个Slave。该集群中的每个Neo4J实例都包含了图中的所有数据。这样任何一个Neo4J实例的失效都不会导致数据的丢失。集群中的Master主要负责数据的写入,接下来Slave则会将Master中的数据更改同步到自身。如果一个写入请求到达了Slave,那么该Slave也将会

就该请求与Master通信。此时该写入请求将首先被Master 执行,再异步地将数据更新到各个Slave中。所以在上图中,您可以看到表示数据写入方式的红线有从Master到Slave,也有从Slave到Master,但是并没有从Slave到Slave。而所有这一切都是通过Transaction Propagation组成来协调

完成的。有些读者可能已经注意到了:Neo4J集群中数据的写入是通过Master来完成的,那是不是Master会变成系统的写入瓶颈呢?答案是几乎不会。首先是图数据修改的复杂性导致其并不会像栈,数组等数据类型那样容易被修改。在修改一个图的时候,我们不但需要修改图结点本身,还要维护各个关系,本身就是一个比较复杂的过程,对用户而言也是较难理解的。因此对图所进行的操作也常常是读比写多很多。同时Neo4J内部还有一个写队列,可以用来暂时缓存向Neo4J实例的写入操作,从而使得Neo4J能够处理突然到来的大量写入操作。而在最坏的情况就是Neo4J集群需要面对持续的大量的写入操作。在这种情况下,我们就需要考虑Neo4J集群的纵向扩展了,因为此时横向扩展无益于解决这个问题。反过来,由于数据的读取可以通过集群中的任意一个Neo4J实例来完成,因此Neo4J集群的读吞吐量可以在理论上做到随集群中Neo4J实例的个数线性增长。例如如果一个拥有5个结点的Neo4J集群可以每秒响应500

个读请求,那么再添加一个结点就可以将其扩容为每秒响应

600个读请求。但在请求量非常巨大而且访问的数据分布非常随机的情况下,另一个问题就可能发生了,那就是Cache-Miss。Neo4J内部使用一个缓存记录最近所访问的数据。这些缓存数据会保存在内存中以便快速地响应数据读取请求。但是在请求量非常巨大而且所访问数据分布随机的情况下,Cache-Miss将会持续地发生,使得每次对数据的读取都要经过磁盘查找来完成,从而大大地降低了Neo4J实例的运行效率。而Neo4J所提供的解决方案被称为

Cache-based Sharding。简单地说,就是使用同一个Neo4J 实例来响应一个用户所发送的所有需求。其背后的原理也非常简单,那就是同一个用户在一段时间内所访问的数据常常是类似的。因此将这个用户的一系列数据请求发送到同一个Neo4J服务器实例上可以很大程度上降低发生Cache-Miss 的概率。Neo4J数据服务器中的另一个组成Cluster Management则用来负责同步集群中各个实例的状态,并监控其它Neo4J结点的加入和离开。同时其还负责维护领导选举结果的一致性。如果Neo4J集群中失效的结点个数超过了集群中结点个数的一半,那么该集群将只接受读取操作,直到有效结点重新超过集群结点数量的一半。在启动时,一个Neo4J数据库实例将首先尝试着加入由配置文件所标明的集群。如果该集群存在,那么它将作为一个Slave加入。否则该集群将被创建,并且其将被作为该集群的Master。

如果Neo4J集群中的一个Neo4J实例失效了,那么其它Neo4J实例会在短时间内探测到该情况并将其标示为失效,直到其重新恢复到正常状态并将数据同步到最新。这其中有一个特殊情况,那就是Master失效的情况。在该情况下,Neo4J集群将会通过内置的Leader选举功能选举出新的Master。在Cluster Management组成的帮助下,我们还可以创建一个Global Cluster。其拥有一个Master Cluster 以及多个Slave Cluster。该集群组建方式允许Master Cluster和Slave Cluster处于不同区域的服务集群中。这样就可以允许服务的用户访问距离自己最近的服务。和Neo4J 集群中的Master及Slave实例的关系类似,数据的写入通常都是在Master Cluster中进行,而Slave Cluster将只负责提供数据读取服务。提高Neo4J的性能相信您在上面对Neo4J集群的讲解中已经看出,Neo4J集群实际上还是有一些限制的。这些限制将可能导致Neo4J集群在总的系统容量,如存储结点的数目或写吞吐量等众多方面存在着一定的瓶颈。在《服务的扩展性》一文中我们曾经介绍过,通过纵向扩展,我们同样可以提高服务的整体性能。除了通过为Neo4J提供具有更高容量的硬件之外,更有效地使用Neo4J 也是纵向扩展的一个重要方法。和SQL Server等数据库所提供的Execution Plan类似,Neo4J也提供了Execution Plan。在执行一个请求时,Neo4J将会把这个请求拆解为一

系列较小的操作符(Operator)。每个操作符都将执行一部分工作,并彼此相互协作完成对请求的响应。与SQL Server 的Execution Plan类似,Neo4J的Execution Plan同样拥有Scan,Seek,Merge,Filter等多种类型的操作。我们可以通过EXPLAIN或PROFILE命令得到一个请求将被如何执行的树形表示。通过查看这些树形表示,软件开发人员能够了解一个请求在Neo4J中是如何运行的:以下是当前版本的Neo4J所支持的所有操作符:

https://www.doczj.com/doc/f8596502.html,/docs/stable/execution-plans.html。有通过Execution Plan调优经验的读者可能第一眼就看到了一个操作符:Node Index Seek。它的名字直接透露了Neo4J 中的另一个调优利器:索引。我们知道,只要查找出的结果集中记录的数据并不是很多,那么SQL Server中的Clusted Index Seek常常是具有最优效率的操作。因此在Neo4J中,我们同样需要尽量合理地使用索引,从而使得Neo4J所生成的Execution Plan能使用基于索引的一系列操作符。让我们回忆一下之前展示给大家的按照Spring Data Neo4J方式抽象出的Movie类:1 @NodeEntity2 public class Movie {3 @GraphId Long id;4 5 @Indexed(type = FULLTEXT, indexN ame = 'search')6 String title;7 8 ……9 }上面的代码展示了我们应该如何通过@Indexed标记来创建一个索引。如果您是直接使用Cypher来操作Neo4J的,那么您

可以通过以下语句来创建一个索引:1 CREATE INDEX

ON :Movie(title) 而这里有一个和SQL Server略有不一致的地方,那就是对@GraphId标记的理解。在SQL Server 中,Primary Key实际上是与索引没有任何关联的,只是在默认情况下,其常常会被自动地添加一个索引。而在Neo4J 中,由@GraphId标记所修饰的域则更像是Neo4J的内部实现。Neo4J通过该域所记录的值执行对结点的访问,而不是在其上自动地添加了一个索引。还有一个可能非常容易影响Neo4J性能的可能,那就是尝试使用Neo4J记录不适合它记录的数据。在本文的一开始我们就已经介绍了Neo4J 所适合的领域,那就是记录图形数据,及结点集和结点之间的关系。而对于其它一些类型的数据,如用户的用户名/密码对,那就不是图形数据库所擅长的领域了。在这些情况下,我们应该选取合适的数据库来记录这些数据。在一个大型系统中,多种不同类型的数据库相互协作是经常有的事情,所以没有必要非要将一些本来应该由其它类型的数据库所记

录的数据硬生生地记录在Neo4J中。和其它数据库合作

在上面我们刚刚提到了不应该由Neo4J记录不适合它记录的数据,以保证Neo4J不被不合理的使用方式拉低其执行效率。那么这些数据应该记录在哪里呢?答案非常简单:适合记录这些数据的其它类型的数据库。可能你觉得我这句话是废话。其实我也这么觉得。而我想在这里介绍的是,如

何完成Neo4J和其它数据库之间的集成,从而使它们协同工作,向用户提供完整的服务。对于某些系统,我们可以允许这些数据库之间拥有一定程度的不一致;而对于另外一些系统,我们则需要时刻保证数据的一致性。Neo4J所提出支持的技术方案主要有三种:Event-based Synchronization,Periodic Synchronization以及Periodic Full Export/Import

of Data。Event-based Synchronization实际上就是通过同

时向基于Neo4J的后台和基于其它数据库的后台发送相同

的消息,并由这些后台完成对数据的写入。Periodic Synchronization则是定时地将一个数据库中对数据的更改

同步到另一个数据库中。而Periodic Full Export/Import of Data则是通过将一个数据库中的所有数据导入到另外一个

数据库中的方式来完成的。这三种解决方案都是用来处理Neo4J所记录的数据与其它数据库相同的情况。而更为常见的情况则是,Neo4J记录实体关系比较复杂的图,其它数据库则用来记录具有其它类型表现形式的数据。Neo4J和这些数据库之间的数据只有一部分交集,而每个数据库都拥有自己所特有的数据。针对这种情况的处理方法则常常是多步提交。例如在一个交友网站中,用户可以在页面上完成自身账户的设置,如用户名,密码等,并可以在下一步添加好友界面中添加一系列好友以及有关于该好友的注释。那么在该系统中,用户自身的账户设置就可能记录在关系型数据库中,

而有关好友的相关信息则记录在图形数据库中。如果将这两步中的所有信息作为一个请求发送到后台,那么就可能出现在某个数据库上成功保存而在另一个数据库上保存失败的

情况。为了避免这种情况,我们就需要将填充这两部分资料的信息分为两个页面,而在每个页面下部提供一个”保存并进行下一步”的按钮。这样如果第一步设置账户的步骤无法正常保存,那么用户就没有办法进行下一步添加朋友的操作。而在添加朋友这步中,如果图形数据库无法正常保存,那么我们将可以明确地告诉用户添加朋友失败,从而允许用户重试。其实很多时候,跨不同数据库保存数据的问题都可以通过调整设计的方式来解决,况且这些数据库所记录的数据常常具有非常不同的数据结构。因此就用户来说,分成多步提交常常是一个非常自然的使用方式。转载请注明原文地址并标

明转载:https://www.doczj.com/doc/f8596502.html,/loveis715/p/5277051.html 商业转载请事先与我联系:silverfox715@https://www.doczj.com/doc/f8596502.html,公众号

一定帮忙别标成原创,因为协调起来太麻烦了。。。

各个数据库管理系统的特点

数据库管理系统 学院:信息工程学院 专业:计算机科学与技术(教师教育)姓名:曹永荣 学号:12015241912 2017-3-27

Oracle数据库 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如Silver Stream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。Oracle数据库最新版本为Oracle Database 12c。Oracle数据库12c引入了一个新的多承租方架构,使

用该架构可轻松部署和管理数据库云。此外,一些创新特性可最大限度地提高资源使用率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c成为私有云和公有云部署的理想平台。 My SQL数据库 My SQL:是一种开放源代码的关系型数据库管理系统(RDBMS),My SQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。由于My SQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。My SQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,My SQL是管理内容最好的选择 SQL Server数据库 SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。Microsoft SQL Server近年来不断更新版本,1996年,Microsoft 推出

数据库系统原理及应用教程第四版课后答案

第一章 1、(1)数据:数据用于载荷信息的物理符号。 (2)数据的特征;○1数据有“型”与“值”之分;○2数据受数据类型与取值范围的约束;○3数据有定性表示与定量之分;○4数据应具有载体与多种表现形式。 3、(1)数据管理的功能: ○1组织与保存数据功能,即将收集到的数据合理地分类组织,将其存储在物理载体上,使数据能够长期的被保存; ○2数据维护功能,即根据需要随时进行插入新数据,修改原数据与删除失效数据的操作; ○3数据查询与数据统计功能,即快速的得到需要的正确数据,满足各种使用要求;○4数据的安全与完整性控制功能,即能保护数据的安全与完整性。 (2)数据管理的目标:收集完整的信息,将信息用数据表示,按数据结构合理科学的组织并保存数据;为各种使用快速地提供需要的数据,并保护数据的安全与完整性。 4、(1)数据库:就是数据管理的新方法与技术,她就是一个按数据结构来存储与管理数据的计算机软件系统。 (2)数据库中的数据具有的特点:○1数据库中的数据具有整体性,即数据库中的数据要保持自身完整的数据结构;○2数据库中的数据具有数据共享性,不同的用户可以按各自的用法使用数据库中的数据,多个用户可以同时共享数据库中的数据资源。 5、(1)数据库管理系统:它就是专门用于管理数据库的计算机管理软件。数据库管理系统能够为数据库提供数据的定义、建立、维护、查询与统计等操作功能,并完成对数据完整性、安全性进行操作的功能。 (2)数据库管理系统主要功能:就是数据存储、数据操作与数据控制功能。其数据存储与数据操作就是:数据库的定义功能,指未说明库中的数据情况而进行的建立数据库结构的操作;数据库建立功能,指大批数据录入到数据库的操作,它使得库中含有需要保护的数据记录;数据库维护功能,指对数据的插入、删除与修改操纵,其操作做能满足库中信息变化或更新的需求;数据库查询与统计功能,指通过对数据库的访问,为实际应用提供需要的数据。数据库管理系统的数据控制功能为:数据安全性控制功能,即为了保证数据库的数据安全可靠,防止不合法的使用造成数据库泄露与破坏,也就就是避免数据被人偷瞧、篡改或破坏;数据库完整性控制功能,指为了保证数据库中的数据的正确、有效与相容,防止不合语意的错误数据被输入或输出。 14、(1)数据库系统的软件由几部分组成?数据库系统的软件中包括操作系统(OS)、数据库管理系统(DBMS)、主语言系统、应用程序软件与用户数据库。 (2)作用:①操作系统或汉字操作系统:操作系统就是所有计算机软件的基础,在数据库系统中它起着支持DBMS及主语言系统工作的作用。如果管理的信息中有汉字,则需要中文操作系统的支持,以提供汉字的输入、输出方法与汉字信息的处理方法。②数据库管理系统与主语言系统:数据库管理系统就是为定义、建立、维护、使用及控制数据库而提供的有关数据管理的系统软件。主语言系统就是为应用程序提供的诸如程序控制、数据输入输出、功能函数、图形处理、计算方法等数据处理功能的系统软件。③应用开发工具软件:应用开发工具就是DBMS系统为应用开发人员与最终用户提供的高效率、多功能的应用生成器、第四代计算机语言等各种软件工具.如报表生成器、表单生成器、查询与视图设计器等,它们为数据库系统的开发与使用提供了良好的环境与帮助。④应用系统及数据库:数据库应用系统包括为特定的应用环境建立的数据库、开发的各类应用程序及编写的文档资料,它们就是一个有机整体。通过运行数据库应用系统,可以实现对数据库中数据的维护、查询、管理与处理操作。(3)关系:

教学管理系统数据库ER图及SQL语句

教学管理系统 一、系统功能需求 学校教务管理系统是针对学校的大量信息处理工作而开发的管理软件,完成的主要功能如下: (1) 学生基本信息管理:能够对学生基本信息进行输入、删除、修改。学生基本信息包括:学号、姓名、性别、出生日期、入学成绩、所在系号。 (2) 系部基本信息管理:系部的基本信息输入、修改、删除。系部基本信息包括:系号、系名称、系的简介。 (3) 课程信息管理:课程信息的输入、修改、删除。课程信息包括:课程号、课程名称、任课教师号、学时、学分、上课时间、上课地点、考试时间。 (4) 教职工信息管理:教职工信息的输入、修改、删除。教职工信息包括:职工号、姓名、性别、出身年月、所在系号、职称、技术专长。 (5) 选课管理:学号、学生、课程号、课程名称、上课教师姓名、系号 每学期所选课程的学分不能超过15分。学生可以同时选修一门或多门课程。可以同时为多个学生选修某一门或某几门课程。可以删除和修改选课信息。 (6) 成绩管理可以按课程输入和修改成绩,也可以按学生输入和修改成绩。 (7) 信息查询 可以按学号、姓名、系号查询学生基本信息。 可以按职工号、姓名、系号查询教职工基本信息。 可以按系号、系名称查询系的基本信息。 可以按课程号、课程名称、上课教师姓名查询课程基本信息。 按学号、课程号、课程名称、上课教师姓名、系号查询学生成绩,内容包括课程基本情况。若查询涉及多门课程,则按课程分组。 每门课程按总评成绩从高分到低分给出选修该门课程的所有学生的成绩(平时成绩、考试成绩和总评成绩)。 (8) 统计报表 a、成绩报表:内容包括课程基本信息(课程号、课程名称、任课教师号、学时、学分),选课学生名单(学号、姓名、性别),每个学生的平时成绩、考试成绩和总评成绩。 能按课程号、课程名称、教师姓名输出对应课程的成绩报表。 b、能够根据课程、授课教师统计成绩>=90分、>=80分、>=70分、>=60分及不及格学生的人数及比例。 二、任务描述 1、根据需求描述,完成数据概念模型设计,画出E-R图; 2、优化E-R图,给出数据逻辑模型; 3、将逻辑模型转换成物理模型并创建数据库和数据表。要求数据表能尽量实现数 据完整性要求。

常用的数据管理系统

常用的数据管理系统 一、DB2 DB2是IBM出品的一系列关系型数据库管理系统,分别在不同的操作系统UNIX,Windows Access,ORACLE平台上服务。DB2主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境,应用于OS/2、Windows等平台下。 (一)优点: 1、DB2提供了高层次的数据利用性、完整性、安全性、可恢复性,以及小规模到大规模应用程序的执行能力,具有与平台无关的基本功能和SQL命令。 2、DB2采用了数据分级技术,能够使大型机数据很方便地下载到LAN数据库服务器,使得客户机/服务器用户和基于LAN的应用程序可以访问大型机数据,并使数据库本地化及远程连接透明化。 3、DB2以拥有一个非常完备的查询优化器而著称,其外部连接改善了查询性能,并支持多任务并行查询。 4、DB2具有很好的网络支持能力,每个子系统可以连接十几万个分布式用户,可同时激活上千个活动线程,对大型分布式应用系统尤为适用。 5、DB2除了可以提供主流的OS/390和VM操作系统,以及中等规模的AS/400系统之外,IBM还提供了跨平台(包括基于UNIX的LINUX,HP-UX,SunSolaris,以及SCOUnixWare;还有用于个人电脑的OS/2操作系统,以及微软的Windows 2000和其早期的系统)的DB2产品。DB2数据库可以通过使用微软的开放数据库连接(ODBC)接口,Java数据库连接(JDBC)接口,或者CORBA接口代理被任何的应用程序访问。 (二)缺点: 1、DB2在关闭机制上有一定的不足。这与DB2的设计框架相关,内存锁的使用在提升效率的同时也对系统的优化要求提到了最高。如果用户对数据库的本身优化和应用程序优化做的不足,那么DB2会容易出现锁等待现象。 2、DB2在API与函数的提供上还不完善。但是多伦多实验室的人正在尽力完善这个模块,在DB2 9中我们期待看到更多更为强大的函数。 3、对于所有的数据库系统高可用性也是一个比较令人头疼的问题。在DB2中的高可用性对于普通用户来说可能比较复杂,但是IBM有一些经典的技术文档可以用来参照帮助用户自己设置。对于管理多分区系统的DBA来说,怎样对各分区协调,如何合理设置分区键是重要的。 二、SQL Server SQL Server是一个关系数据库管理系统,它最初是由Microsoft,Sybase和Ashton-Tate 三家公司共同开发的于1988 年推出了第一个OS/2 版本,在Windows NT 推出后,Microsoft 与Sybase在SQL Server的开发上就分道扬镳了,Microsoft将SQL Server移植到Windows NT 系统上专注于开发推广SQL Server的Windows NT版本,Sybase则较专注于SQL Server在UNIX操作系统上的应用.Microsoft SQL Server以后简称为SQL Server或MS SQL Server 。 随着信息技术的发展,计算机处理数据的方式也发生着变化,文件管理系统--数据库管理系统。Microsoft SQL Server是一个分布式的关系型数据库管理系统,具有客户机/服务

图形数据库有哪些优势

图形数据库有哪些优势 Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java 持久化引擎。该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。 有两个潜在因素驱动着从关系数据库到Neo4j的转换。首先你要观察你所在的领域是否是连接的数据结构(比如:社交网络、医疗保健、权限管理、实时物流和各种推荐工具等),然后你会意识到在这些领域使用Neo4j的话,将使存储和查询变得简单而有趣,不像使用关系型数据库那样困难和令人不悦。尤其当案例是由了解这方面的技术人员(至少有一定程度的理解)驱动的,他们明白所要处理的图形问题,且已准备好使用Neo4j来快速且巧妙地解决图形问题。他们当然不想陷于稀疏表和超级联接表的泥沼中。 另一个驱动就是性能了。尽管关系型数据库中的联和给使用它们的系统带来的痛苦已减轻。可能你的第一个联和是性能良好的,如果幸运的话,你的第二个联和也是。但是随着数据集大小不断增大,对联和的自信也会随着查询时间的增加而逐渐消耗。为了试图解决一些连接或路径问题,联和密集型模式应运而生,但它并不适用于模拟路径操作。而Neo4j在路径操作这方面就没有这样的问题:作为查询的一部分,查询时间随着所需挖掘的数据量线性增长,而不是随着数据集的总体大小增长(数据量可能无穷大)。因此如果你已经感到联和所带来的痛苦,那这又是另外一个提示:Neo4j图形数据库将是关系型数据库中复杂数据模型更好的解决方案。没看懂?没关系,来宝云官网跟技术大牛们请教吧!

数据库技术的发展史

数据库技术的发展史 数据库技术的发展,已经成为先进信息技术的重要组成部分,是现代计算机信息系统和计算机应用系统的基础和核心。数据库技术最初产生于20世纪60年代中期,到今天近几十年的历史,其发展速度之快,使用X围之广是其它技术所远不及的。 先介绍一下数据模型的概念:数据模型是数据库系统的核心和基础。数据模型的发展经历了格式化数据模型(包括层状数据模型和网状数据模型)、关系数据模型两个阶段,正在走向面向对象的数据模型等非传统数据模型的阶段。 层状数据模型每个节点间是一对多的父子之间的联系,比如一个父亲三个儿子;中心下的几个部门,部门里的人。网状数据模型中允许任意两个节点间有多种联系,层次模型实际上是网状模型的一个特例;如同学生选课,一个学生可以选修多门课程,某一课程也可被多名学生选修。关系数据模型,职工,比如我(编号,XX,性别,所属部门,籍贯),我和马薇,X晖,陈曙光等就组成了一X关系模型的数据表。 根据数据模型的发展,数据库技术可以相应地划分为三个阶段:第一代的网状、层次数据库系统;第二代的关系数据库系统;第三代的以面向对象模型为主要特征的数据库系统。

第一代数据库的代表是1969年IBM公司研制的层次模型的数据库管理系统IMS和70年代美国数据库系统语言协商CODASYL下属数据库任务组DBTG提议的网状模型。层次数据库的数据模型是有根的定向有序树,网状模型对应的是有向图。这两种数据库奠定了现代数据库发展的基础。这两种数据库具有如下共同点: 1.支持三级模式(外模式、模式、内模式),模式之间具有转换(或成为映射)功能,保证了数据库系统具有数据与程序的物理独立性和一定的逻辑独立性; 2.用存取路径来表示数据之间的联系; 3.有独立的数据定义语言; 4.导航式的数据操纵语言。 网状数据库 最早出现的是网状DBMS。网状模型中以记录为数据的存储单位。记录包含若干数据项。网状数据库的数据项可以是多值的和复合的数据。每个记录有一个惟一地标识它的内部标识符,称为码(DatabaseKey,DBK),它在一个记录存入数据库时由DBMS自动赋予。DBK可以看作记录的逻辑地址,可作记录的替身,或用于寻找记录。网状数据库是导航式(Navigation)数据库,用户在操作数据库时不但说明要做什么,还要说明怎么做。例如在查找语句中不但要说明查找的对象,而且要规定存取路径。

NCBI分子数据库介绍

NCBI分子数据库介绍 信息来源:中国生命科学论坛更新时间:2003-10-12 2:33:00 核酸序列(nucleotides) ·Entrez核酸- 用accession number,作者姓名,物种,基因/蛋白名字,以及很多其它的文本术语来搜索核酸序列记录(在GenBank + PDB中)。更多的关于Entrez的信息见下。如果要检索大量数据,也可使用Batch Entrez (批量Entrez)。 ·RefSeq - NCBI数据库的参考序列。校正的,非冗余集合,包括基因组DNA contigs,已知基因的mRNAs和蛋白,在将来,整个的染色体。Accession numbers用NT_xxxxxx, NM_xxxxxx, NP_xxxxxx, 和NC_xxxxxx的形式来表示。 ·dbEST - 表达序列标签数据库,短的、单次(测序)阅读的cDNA序列。也包括来自于差异显示和RACE实验的cDNA序列。 ·dbGSS -基因组调查序列的数据库,短的、单次(测序)阅读的cDNA序列,exon trap获得的序列,cosmid/BAC/YAC 末端,及其他。 ·dbSTS -序列标签位点的数据库,短的在基因组上可以被唯一操作的序列,用于产生作图位点。 ·dbSNP - 单核苷酸多态性数据库,包括SNPs,小范围的插入/缺失,多态重复单元,和微卫星变异。 完整的基因组 ·参见Genome 和Maps 部分,包括各种物种资源,人,小鼠,大鼠,酵母,线虫,疟原虫,细菌,病毒,viroids,质粒。 ·UniGene - 被整理成簇的EST和全长mRNA 序列,每一个代表一种特定已知的或假设的人类基因,有定位图和表达信息以及同其它资源的交叉参考。序列数据可以以cluster 形式在Unigene 网页下载,完整的数据可以从FTP站点repository/UniGene 目录下下载。 1.奶牛UniGene 2.人类UniGene 3.小鼠UniGene 4.大鼠UniGene 5.斑马鱼UniGene ·BLAST - 将你的序列同核酸库中的的序列比较,检索相似的序列。(更详细的信息见下面Tools/Sequence 相似搜索部分) 蛋白序列(proteins) · Entrez蛋白-用accession number,作者姓名,物种,基因/蛋白名字,以及很多其它的文本术语来搜索蛋白序列记录(在GenPept + Swiss-Prot + PIR + RPF + PDB中)。更多的关于Entrez的信息见下。如果要检索大量数据,也可使用Batch Entrez(批量Entrez)。

几种常用数据库的比较

几种常用数据库的比较 目前,商品化的数据库管理系统以关系型数据库为主导产品,技术比较成熟。面向对象的数据库管理系统虽然技术先进,数据库易于开发、维护,但尚未有成熟的产品。国际国内的主导关系型数据库管理系统有Oracle、Sybase、Informix和INGRES。这些产品都支持多平台,如UNIX、VMS、Windows,但支持的程度不一样。IBM的DB2也是成熟的关系型数据库。但是,DB2是内嵌于IBM的AS/400系列机中,只支持OS /400操作系统。 1.MySQL MySQL是最受欢迎的开源SQL数据库管理系统,它由MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL 开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB 的注册商标。 MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass- deployed)的软件中去。

与其他数据库管理系统相比,MySQL具有以下优势: (1)MySQL是一个关系数据库管理系统。 (2)MySQL是开源的。 (3)MySQL服务器是一个快速的、可靠的和易于使用的数据库服务器。 (4)MySQL服务器工作在客户/服务器或嵌入系统中。 (5)有大量的MySQL软件可以使用。 2.SQL Server SQL Server是由微软开发的数据库管理系统,是Web上最流行的用于存储数据的数据库,它已广泛用于电子商务、银行、保险、电力等与数据库有关的行业。 目前最新版本是SQL Server 2005,它只能在Windows上运行,操作系统的系统稳定性对数据库十分重要。并行实施和共存模型并不成熟,很难处理日益增多的用户数和数据卷,伸缩性有限。 SQL Server 提供了众多的Web和电子商务功能,如对XML 和Internet标准的丰富支持,通过Web对数据进行轻松安全的访问,具有强大的、灵活的、基于Web的和安全的应用程序管理等。而且,由于其易操作性及其友好的操作界面,深受广大用户的喜爱。

常用数据库管理系统介绍

常用数据库管理系 统介绍 1

常见数据库管理系统简介 当前市场上比较流行的数据库管理系统产品主要是Oracle、IBM、Microsoft和Sybase、mysql等公司的产品,下面对常见的几种系统做简要的介绍: 11.4.1 Oracle Oracle数据库被认为是业界当前比较成功的关系型数据库管理系统。Oracle公司是世界第二大软件供应商,是数据库软件领域第一大厂商(大型机市场除外)。Oracle的数据库产品被认为是运行稳定、功能齐全、性能超群的贵族产品。这一方面反映了它在技术方面的领先,另一方面也反映了它在价格定位上更着重于大型的企业数据库领域。对于数据量大、事务处理繁忙、安全性要求高的企业,Oracle无疑是比较理想的选择(当然用户必须在费用方面做出充分的考虑,因为Oracle数据库在同类产品中是比较贵的)。随着Internet的普及,带动了网络经济的发展,Oracle适时的将自己的产品紧密的和网络计算结合起来,成为在Internet应用领域数据库厂商的佼佼者。Oracle数据库能够运行在UNIX、Windows等主流操作系统平台,完全支持所有的工业标准,并获得最高级别的ISO标准安全性认证。Oracle采用完全开放策略,能够使客户选择最适合的解决方案, 2

同时对开发商提供全力支持。Oracle数据库系统的特点有: ?无范式要求,可根据实际系统需求构造数据库。 ?采用标准的SQL结构化查询语言。 ?具有丰富的开发工具,覆盖开发周期的各阶段。 ?数据类型支持数字、字符、大至2GB的二进制数据,为数据库的面向对象存储提供数据支持。 ?具有第四代语言的开发工具(SQL*FORMSSQL*REPORTS、SQL*MENU等)。 ?具有字符界面和图形界面,易于开发。Oracle7以后得版本具有面向对象的开发环境CDE2。 ?经过SQL*DBA控制用户权限,提供数据保护功能,监控数据库的运行状态,调整数据缓冲区的大小。 ?分布优化查询功能。 ?具有数据透明、网络透明,支持异种网络、异构数据库系统。并行处理采用动态数据分片技术。 ?支持客户机/服务器体系结构及混合的体系结构(集中式、分布式、客户机/服务器)。 ?实现了两阶段提交、多线索查询手段。 ?支持多种系统平台(Linux、HPUX、SUNOS、OSF/1、VMS、 Windows、OS/2)。 3

各类历史文献数据库整合

各类历史文献数据库整合 因为《书目答问》接下去的这部书我还没用较为清楚的认识,所以这两天《书目答问》就暂停下,等我搞清楚了再写。前几次写数据库利用的时候是专门讲如何去发现、使用,今天将我使用比较多的免费历史文献数据库(包括民国文献)整合发送,各位可按需选用。如果能纯熟地结合使用,我想一定能有很大的发现,对于研究很有帮助。中国国家图书馆免费历史文献数字资源 数字善本:https://www.doczj.com/doc/f8596502.html,/web/guest/shanbenjiaojuan 数字方志:https://www.doczj.com/doc/f8596502.html,/web/guest/shuzifangzhi地方志:https://www.doczj.com/doc/f8596502.html,/web/guest/zhengjidifangzhi宋人文集:https://www.doczj.com/doc/f8596502.html,/web/guest/songrenwenji家谱: https://www.doczj.com/doc/f8596502.html,/web/guest/zhengjijiapu徽州善本家谱:https://www.doczj.com/doc/f8596502.html,/web/guest/huizhoushanbenjiapu中文拓片资源库:https://www.doczj.com/doc/f8596502.html,/web/guest/beitiejinghua甲骨:https://www.doczj.com/doc/f8596502.html,/web/guest/jiagushiwu民国文献: https://www.doczj.com/doc/f8596502.html,/web/guest/zhengjiminguowenxian民国图书:https://www.doczj.com/doc/f8596502.html,/web/guest/minguotushu民国期刊:https://www.doczj.com/doc/f8596502.html,/web/guest/minguoqikan民国法律: https://www.doczj.com/doc/f8596502.html,/web/guest/minguofalv民国报纸: https://www.doczj.com/doc/f8596502.html,/web/guest/minguobaozhi目前有《新华日报》

大型ERP等数据库系统常见的几种设计概要

. 自增长 primary key 采用自增长 primary key主要是性能。早期的数据库系统,经常采用某种编号,比如身份证号码,公司编号等等作为数据库表的 primary key。然而,很快,大家就发现其中的不利之处。 比如早期的医院管理系统,用身份证号码作为病人表的 primary key。然而,第一,不是每个人都有身份证;第二,对于国外来的病人,不同国家的病人的证件号码并不见得没有重复。因此,用身份证号码作为病人表的 primary key是一个非常糟糕的设计。考虑到没有医生或者护士会刻意去记这些号码,使用自增长 primary key是更好的设计。 公司编号采用某种特定的编码方法,这也是早期的数据库系统常见的做法。它的缺点也显而易见:很容易出现像千年虫的软件问题,因为当初设计数据库表的时候设计的位数太短,导致系统使用几年后不能满足要求,只有修改程序才能继续使用。问题在于,任何人设计系统的时候,在预计某某编号多少位可以够用的时候,都存在预计不准的风险。而采用自增长primary key 则不存在这种问题。同样的道理,没有人可以去记这些号码。 使用自增长 primary key另外一个原因是性能问题。略有编程常识的人都知道,数字大小比较比字符串大小比较要快得多。使用自增长 primary key可以大大地提高数据查找速度。 2. 避免用复合主键 (compound primary key 这主要还是因为性能问题。数据检索是要用到大量的 primary key 值比较,只比较一个字段比比较多个字段快很多。使用单个 primary key 从编程的角度也很有好处, sql 语句中 where 条件可以写更少的代码,这意味着出错的机会大大减少。 3. 双主键

仓库管理系统数据库设计

仓库管理系统数据库设计 1概述(设计题目与可行性分析) 1.1设计题目 设计一个仓库数据库管理系统,要求实现入库、出库、库存和采购等功能。 随着经济的飞速发展,,仓库管理变成了各大公司日益重要的内容。仓库管理过程的准确性和高效性至关重要。影响着公司的经济发展和管理。利用人工管理强大而数据烦琐的数据库显的效率过于低。利用计算机高效、准确的特点能够很好的满足公司的管理需要。提高公司各个员工的工作效率和公司的运做效率。利用计算机对仓库数据信息进行管理具有着手工管理所无法比拟的优点。目前一个现代化的仓库管理系统已经成为仓库管理不可缺少的管理手段。 1.2 可行性研究 可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。可行性研究的目的不是解决问题而是分析问题能不能解决;至少从下面三个方面分析可行性研究。 1.2.1技术可行性 该仓库数据库管理系统不不是很复杂,设计实现该数据库技术难度不是很大,利用目前现有的技术和工具能在规定的时间内做出该系统。该系统利用SQL2000和 visual studio 工具就能很好的实现该系统。 1.2.2经济可行性 当今世界是经济时代,一个公司的员工工作效率的高低直接影响着这个公司的发展。因此利用计算机进行信息管理有着无可比拟的好处,该系统相对较小,代码行较少,数据库设计不是很麻烦,开发周期较短。而且便于维护。但其带来的经济效益远远高于其开发成本。在经济上是可行的。 1.2.3操作可行性 在当今社会,随着义务教育的普及。和计算机的普及,公司的员工基本上都会进行电脑的基本操作,由于本软件系统采用相对友好的界面,用户 在使用过程中不需要懂太多的电脑专业知识,只需要基本的电脑操作就可

数据库应用实验

《数据库应用》课程实验一 1.实验目的 (1)了解系统数据库的作用。 (2)学会使用图形化方法和T-SQL创建用户数据库。 (3)学会压缩和扩充数据库。 (4)学会查看和修改数据库选项。 (5)学会给数据库改名和删除数据库。 (6)了解SQL Server的数据类型。 (7)了解数据表的结构持点。 (8)学会使用图形化方法和T-SQL创建数据表。 (9)学会使用图形化方法和T-SQL对数据表进行插入、修改和删除数据的操作。 (10)学会定义约束、使用默认和规则。 (11)掌握Select语句基本语法。 (12)学会使用ORDER BY子句进行排序,使用Group BY子句进行分组统计 (13)学会数据汇总、连接查询、子查询的方法。 2.实验内容 (1)使用SQL语句创建一个数据库。数据库名称为student,主数据文件的逻辑名称 为student_data,操作系统文件的名称为D:\mssql\data\student_data.mdf,大小为20MB,最大为50MB,以25%的速度增长。数据库的日志文件逻辑名称为student_log,操作系统文件的名称为d:\mssql\data\Student_log.ldf,大小为3MB,最大为10MB,以1MB的速度增长。 (2)使用T-SQL语句将数据库student空间扩充到40MB (3)分别创建学生信息表(stud_info)、教师基本信息表(teacher_info)、学生成绩表 (stud_grade)、课程信息表(1esson_info)、课程安徘表(teach_schedule)、院系代码表 (dept_code)、专业代码表(specialty_codc)、教研室信息表(staffroom_info)和教室信息表(cIassroom_info)。同时完善各表的主键、外键约束。 (4)使用T-SQL完成以下各题: a)将teacher_info表中的teacher_id列长度从6个字符改变到8个字符。 b)向student_info表增加“入学时间”列,其数据类型为日期型。 c)为student数据库的student_info表中的mark列建立CHECK约束(560<=mark<=600)。 d)为表stud_info的telcode列建立UNIQUE约束。 e)向学生信息表(stud_info)中插入数据,分为一次插入一条和一次插入多条数据 f)将赵明同学的入学成绩更新成与学号为“0801040123”的江荣同学的入学成绩相同。 g)删除学号为“0801020201”的学生记录。 h)查询stud_id为"0801010634"的学生的地址和电话. i)查询stud_info表中性别为“女”的学生的地址和电话。使用AS子句将结果中指定 目标列的标题分别指定为地址,电话。 j)找出所有姓“王”的教师所对应的技术职称。 k)查询所有电话号码中含有“3460”的教师所担任课程的编码。 l)查找计算机工程系中所有担任“计算机导论”的教师编号和姓名。 m)写出课程安排表(teach_schedule)与课程信息表(1esson_info)等值内连接的SQL命令。 n)写出教师信息表(teacher_info)与课程安排表(teach_schedu1e)右外连接的SQL命令。

几种数据库类型说明及发展历史

几种数据库类型说明及发展历史 1.IBM 的DB2 作为关系数据库领域的开拓者和领航人,IBM在1977年完成了System R 系统的原型,1980年开始提供集成的数据库服务器—— System/38,随后是SQL/DSforVSE和VM,其初始版本与SystemR研究原型 密切相关。DB2 forMVSV1 在1983年推出。该版本的目标是提供这一新方案所承诺的简单性,数据不相关性和用户生产率。1988年DB2 for MVS 提供了强大的在线事务处理(OLTP)支持,1989 年和1993 年分别以远程 工作单元和分布式工作单元实现了分布式数据库支持。最近推出的DB2 Universal Database 6.1则是通用数据库的典范,是第一个具备网上功能的多媒体关系数据库管理系统,支持包括Linux在内的一系列平台。 2.Oracle Oracle 前身叫SDL,由Larry Ellison 和另两个编程人员在1977创办,他们开发了自己的拳头产品,在市场上大量销售,1979 年,Oracle公司引入了第一个商用SQL 关系数据库管理系统。Oracle公司是最早开发 关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle 关系数据库产品的市场占有率名列前茅。 https://www.doczj.com/doc/f8596502.html,rmix Informix在1980年成立,目的是为Unix等开放操作系统提供专业的关系型数据库产品。公司的名称Informix便是取自Information 和Unix的结合。Informix第一个真正支持SQL语言的关系数据库产品是Informix SE (StandardEngine)。InformixSE是在当时的微机Unix环境下主要的数据库产品。它也是第一个被移植到Linux上的商业数据库产品。 4.Sybase Sybase公司成立于1984年,公司名称“Sybase”取自“system”和“database”相结合的含义。Sybase公司的创始人之一Bob Epstein 是Ingres 大学版(与System/R同时期的关系数据库模型产品)的主要设计人员。公司的第一个关系数据库产品是1987年5月推出的Sybase SQLServer1.0。Sybase首先提

各个数据库管理系统的特点

各个数据库管理系统的特点

[文档副标题] 学院:信息工程学院 专业:计算机科学与技术(教师教育) 姓名:曹永荣 学号:12015241912 2017-3-27

种类适用环境功能发展趋势特性客户端支持及应用模式 My SQL 部门级和中小 企业级数据定义,数据组 织,存储和管理, 数据操纵功能 广泛的用在学 习程序开发的 阶段 关系数据库管理系统,开源的数 据库,性能中,易操作性好快 速的、多线程、多 用户和健壮的,只 能在windows上运 行 WEB应用方面,My SQL是最好的 RDBMS应用软件 SQL Sever 部门级应用的 数据库,学校 应用的管理系 统(电子 商务、银 行、保 险、电力 备份数据格式,数 据库的事务管理 和运行管理,建立 和维护功能(初始 数据的输入、转换 功能,数据库的转 储) 电子商 务、银 行、保 险、电力 等领域 应用广 Web上最流行的用 于存储数据的数据 库,属于微软,“闭源”。全程 加密技术,动态数据屏蔽 C/S结构,只支持 windows客户,可以 用ADO、DAO、OLEDB、 ODBC连接。

等)泛 access 小型应用数据 库,小型办公数据导入后,进行 数据的清洗,规范 数据类型,字段名 小型办公属于微软,性能差,易操作性好随着Microsoft在Active X技术上 的发展,Windows中不断升级换代的 数据访问组件, oracle 大型企业级、 数据中心数据备份格式,导 入导出数据备份 国际国 内的主 导关系 型,编程岗 位必须要用到 的 面向商务应用,性能高,易操作 性差 关系—对象数据库 系统,完全支持所 有的工业标准 多层次网络计算,支 持多种工业标准,可 以用ODBC、JDBC、OCI 等网络客户连接 Inform ix 大型企业级作为IBM在线事 务处理(OLTP)旗 舰级数据服务系 统 国际国 内的主 导关系 空间使用的效率会更高,持更大 的索引键值,最大可以达到 3K, 存取效率的提高 Win SQL 是数据库管理员和程序员 处理数据库的工具。它能与有ODBC 驱动的任何一个数据库通信会话。

图形数据库解析

图形数据库解析 在深入学习图形数据库之前,首先理解属性图的基本概念。一个属性图是由顶点(Vertex),边(Edge),标签(Lable),关系类型和属性(Property)组成的有向图。顶点也称作节点(Node),边也称作关系(Relationship);在图形中,节点和关系是最重要的实体,所有的节点是独立存在的,为节点设置标签,那么拥有相同标签的节点属于一个分组,一个集合;关系通过关系类型来分组,类型相同的关系属于同一个集合。关系是有向的,关系的两端是起始节点和结束节点,通过有向的箭头来标识方向,节点之间的双向关系通过两个方向相反的关系来标识。节点可有零个,一个或多个标签,但是关系必须设置关系类型,并且只能设置一个关系类型。Neo4j图形数据库的查询语言是Cypher,用于操作属性图,是图形语言中事实上的标准。 一,图形数据库的基本概念 Neo4j创建的图(Graph)基于属性图模型,在该模型中,每个实体都有ID(Identity)唯一标识,每个节点由标签(Lable)分组,每个关系都有一个唯一的类型,属性图模型的基本概念有: 实体(Entity)是指节点(Node)和关系(Relationship); o每个实体都有一个唯一的ID; o每个实体都有零个,一个或多个属性,一个实体的属性键是唯一的; o每个节点都有零个,一个或多个标签,属于一个或多个分组; o每个关系都只有一个类型,用于连接两个节点;

路径(Path)是指由起始节点和终止节点之间的实体(节点和关系)构成的有序组合; 标记(Token)是非空的字符串,用于标识标签(Lable),关系类型(Relationship Type),或属性键(Property Key); o标签:用于标记节点的分组,多个节点可以有相同的标签,一个节点可以有多个Lable,Lable用于对节点进行分组; o关系类型:用于标记关系的类型,多个关系可以有相同的关系类型; o属性键:用于唯一标识一个属性; o属性(Property)是一个键值对(Key/Value Pair),每个节点或关系可以有一个或多个属性;属性值可以是标量类型,或这标量类型的列表(数组);二,图形示例 在下面的图形中,存在三个节点和两个关系共5个实体;Person和Movie是Lable,ACTED_ID和DIRECTED是关系类型,name,title,roles等是节点和关系的属性。 实体包括节点和关系,节点有标签和属性,关系是有向的,链接两个节点,具有属性和关系类型。

数据库学生成绩管理系统ER图

系统需求分析: 该学生成绩管理系统主要用于管理高校学生的考试成绩,提供学生成绩的录入、修改、查询、等各种功能。成绩由各系的任课老师录入,或教务处人员统一录入。学生成绩录入后由各系系秘书签字确认,只有教务处拥有对学生成绩的修改权限。 用户的具体需求分析: (1 )教师:负责成绩的录入,能够在一定的权限内对学生的成绩进行查询,可以对自己的登录密码进行修改以及个人信息的修改等基本功能。 (2 )系统管理员:与老师的功能相似(每个系都设有一管理员)另外管理员具有用户管理功能,能够对新上任的老师和新注册的学生行进添加,并能删除已经毕业和退休的老师。用户分为管理员、教师用户、学生用户三类。不论是管理员或教师用户,还是学生用户都需要通过用户名和口令进行登录。用户名采用学生的学号和教师的教号,所以规定只能包括数字。密码也只能是数字,用户只有正确填写用户名和密码才可以登入,进行下一步操作。用户名被注销后,用户将不再拥有任何权限,并且从数据表中删除该用户的信息。 (3)学生:能够实现学生自己成绩和个人信息的查询、登录密码的修改等基本功能。概念模型设计: 由前面的系统需求分析得到实体主要有 5 个:教师、学生、管理员、课程、成绩。学生有属性:学号、姓名、性别、系名、专业、出生日期教师有属性:教师号、姓名、性别、院系、联系电话 管理员属性:用户名、密码课程有属性:课程号、课程名、学分、教师成绩有属性:学号、姓名、课程号、课程名、成绩、授课老师

1)教师与课程之间的关系: 教师与课程之间是 1: n 的关系,即一个老师只能教一门课程,一门课程可以由多个老师 讲授。 (教师与学生E-R 图) (教师号〕(姓名)(性别院系] 联系电话 教师号 教师 I M 授课 ?课程号 N I 课程 课程号课程名授课老师学分 Zk

组态王历史数据库及其他关系数据库

组态王KINGVIEW 6X 组态王历史数据库及其他关系数据库 常见问题解答 北京亚控科技发展有限公司 2011年02月

目录 1. 组态王历史数据库 (1) 1.1 组态王保存的历史数据,我希望对其进行修改,可以吗? (1) 1.2 为什么我的软件在运行时提示“历史库:历史库服务程序没有启动”? (1) 1.3 我使用了自己编写的VB(VC)程序,希望能调用组态王保存的历史数据文件,请问可以实现吗? (1) 1.4 我想使用组态王提供的KingReport文件进行数据查询,为什么打开时提示有错误发生呢? (1) 1.5 请问目前版本的组态王软件历史库记录文件格式是什么? (1) 1.6 请问如何访问组态王历史库中的数据?组态王中的历史库文件是否可以使用其他应用程序打开? (2) 1.7 组态王历史库文件是否可以修改、删除?如果不慎删除后能否恢复? (2) 1.8 在组态王软件的各个版本中历史数据存储格式有哪些区别? (2) 1.9 在组态王软件中变量的历史记录方式有哪几种? (2) 1.10 在控制面板→管理工具→服务中找不到HistorySvr服务,且在组态王中无法查询历史数据,怎么办? (3) 1.11 组态王质量戳有哪几种?各代表什么含义? (4) 1.12 如何实现将组态王历史库中的数据导出来? (5) 1.13 组态王的历史库容量有多大?历史信息能存多少天的? (5) 1.14 在组态王运行环境中能否动态修改历史数据记录的存储天数? (5) 1.15 在组态王数据词典中设置了变量的历史记录属性,但是变量无历史记录,为什么? (5) 2. 其他数据库 (5) 2.1 组态王采集的数据能保存到第三方的数据库如SQL、ORACLE等吗? (5) 2.2 我希望组态王将采集的数据保存到网络中的另一台计算机上的SQL或ORACLE等数据库,如何操作? (5) 2.3 请问组态王软件与SQL数据库交互的一般配置过程如何? (6)

数据库管理系统软件的使用

实验一:数据库管理系统软件的使用 一、实验目的 (1)认识几种常见的数据库管理系统,熟悉它们的使用界面; (2)熟练掌握建立数据库和表,向数据库输入数据、修改数据和删除数据的操作。 二、实验内容 分别在Access和SQL SERVER2005中建立数据库并设计各表,输入多条实际数据,并实现数据的增、删、改操作。 三、实验步骤: 创建用于学生管理数据库,数据库名为XSGL,包含学生的基本信息,课程信息和选课信息。数据库XSGL包含下列3个表: (l)student:学生基本信息。 (2)course:课程信息表。 (3)sc:学生选课表。 各表的结构分别如表1、表2和表3所示。 表1学生信息表:student 表2课程信息表:course 表3学生选课表:sc 1. (a)在Access中创建xsgl.mdb数据库,使用表设计视图创建如表1、表2、表3所示结构的3个表。 提示:(1)启动Access2000或Access2003,选择文件->新建->空数据库,输入数据库文件名xsgl.mdb,进入(2);

图1Access 数据库设计界面 (2)启动如图1的设计界面后,选择表对象和使用使用设计器创建表,选择新建,进入(3);(3)生成如图2界面,选择设计视图,点击确定按钮,进入(4); (4)在图3表设计界面下,分别创建student 表,course 表和sc 表的结构; (5)输入表中的记录: 分别在student 表、course 表和sc 表中输入如下表中的记录: 图2 表设计器 图3表结构设计界面

在数据库视图下,选择表对象中的相应表选择打开,在浏览视图下输入如下表记录: sno sname ssex sage sdept 95001李勇男20CS 95002刘晨女19IS 95003 王敏女18MA 95004张立男19IS 95005 刘云 女 18 CS (b )对表中的记录进行浏览、修改、删除操作。 2.在SQLSERVER 中用企业管理器新建数据库和表:(1)建立xsgl 数据库: ①启动SQL Server2005企业管理器,界面如下: 图4SQL Server2005企业管理器界面 ②选择树形菜单数据库,点击鼠标右键,出现如下弹出式菜单,选择新建数据库 cno cname credit pcno 1数据库452数学63信息系统314操作系统465数据结构476数据处理37 PASCAL 语言 4 6 sno cno grade 9500119295001285950013889500229095002380950032859500415895004 2 85

相关主题
文本预览
相关文档 最新文档