Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nosql 对象数据库简介_Nosql_Neo4j_Graph Databases_Concept - Fatal编程技术网

Nosql 对象数据库简介

Nosql 对象数据库简介,nosql,neo4j,graph-databases,concept,Nosql,Neo4j,Graph Databases,Concept,我试图理解noSQL数据库的概念,更准确地说,是neo4j图形数据库背后的概念。我有使用SQL数据库(MySQL、MS SQL)的经验,但管理分层数据的局限性使我扩展了我的知识。但现在我有一些问题,我找不到他们的答案(也许我不知道该搜索什么) 想象一下,我们有世界各国的名单。每个国家每年都有自己的GDP。每个国家都有不同来源计算的GDP——世界银行、政府、中央情报局等。在这种情况下,整理数据的最佳方式是什么 想到的最简单的事情是拥有节点(值是虚构的): 在关系数据库中,我将数据分为三个表:国家、

我试图理解noSQL数据库的概念,更准确地说,是neo4j图形数据库背后的概念。我有使用SQL数据库(MySQL、MS SQL)的经验,但管理分层数据的局限性使我扩展了我的知识。但现在我有一些问题,我找不到他们的答案(也许我不知道该搜索什么)

想象一下,我们有世界各国的名单。每个国家每年都有自己的GDP。每个国家都有不同来源计算的GDP——世界银行、政府、中央情报局等。在这种情况下,整理数据的最佳方式是什么

想到的最简单的事情是拥有节点(值是虚构的):

在关系数据库中,我将数据分为三个表:国家、来源和价值,在价值中,我将有GDP值、年份、国家id和来源id

想到的另一件事是创建中央情报局、世界银行的节点,但节点政府看起来真的很奇怪。尽管如此,我们的想法是建立关系(valueIfGDP):

对我来说这看起来很奇怪,更重要的是,当我们从一个来源添加所有年份的值时会发生什么?我们会有多重关系还是什么

如果我的问题太愚蠢,我很抱歉,如果有人给我解释或给我看什么书/文章,我会很高兴


提前感谢。:)

你的问题非常正确,而且你不是唯一一个一开始难以掌握图形建模的人;)

在对数据进行建模之前,开始思考您想用数据回答的问题总是比较容易的

让我们想象一下,你想要检索由中央情报局计算的所有国家2012年的GDP

实现这一点的一种简单方法是统一标记国家节点,并设置明显依赖于国家名称的属性名称

此外,中情局/世界银行/政府在这一领域都是“来源”,让我们也给他们贴上统一的标签

例如,这可能会产生如下结果:

(ORGANIZATION {name: CIA})-[:HAS_COMPUTED_GDP {year:2011, value:994}]->(COUNTRY {name:China})
使用Cypher查询语言,遵循此模型,您将执行以下查询:

START cia = node:nodes(name = "CIA")
MATCH cia-[gdp:HAS_COMPUTED_GDP]->(country)
WHERE gdp.year = 2012
RETURN cia, country, gdp
在这个查询中,我使用索引查找作为起点(而不是ID,ID是一个不应该使用的内部技术概念),按名称检索CIA,并匹配相关子图,最终返回CIA、GDP关系及其与输入约束匹配的链接国家

尽管Neo4J完全没有模式,但这并不意味着您必须拥有一个完全灵活的数据模型。有一个小的结构将总是有助于使您的查询或遍历更容易阅读

如果您不熟悉Cypher查询语言(它不是将数据读写到图形中的唯一方法),请查看Neo4J的优秀文档(Cypher:,complete:),并在那里尝试一些查询:

回答你的第二个问题,如果你想再增加一年的GDP计算,这将归结为在组织和国家之间增加新的关系“HAS_COMPUTED_GDP”,而不是更多


希望有帮助:)

非常感谢您的描述性回答。还有一个问题——如果我们扩大中国的例子,并向邻国(比如俄罗斯)添加数据,我想我必须建立进出关系
:中国和俄罗斯之间有边界吗{borderLength:1000}
?什么更好?在中国的节点中拥有属性
totalBorderLength
,或者最好将
HAS\u BORDER\u COUNTRY
关系的
borderLength
属性相加?无论如何,我应该花更多的时间玩数据库,以便更好地理解它。不客气:)再说一遍,如果不考虑用例,这有点难说。根据你的描述,我的2美分可以用来计算边界长度。
(ORGANIZATION {name: CIA})-[:HAS_COMPUTED_GDP {year:2011, value:994}]->(COUNTRY {name:China})
START cia = node:nodes(name = "CIA")
MATCH cia-[gdp:HAS_COMPUTED_GDP]->(country)
WHERE gdp.year = 2012
RETURN cia, country, gdp