标签: graph-databases

将Neo4j子图加载到Networkx中

我一直在通过python的Bulbflow处理Neo4j,现在需要一种方法来保存/导出子图.我已经看过Java甚至Ruby的方法,但是一个简单的Python方法似乎隐藏了我...

到目前为止,我找到了两条潜在的途径:

  1. 通过py2neo访问Geoff,但是从大型本地neo4j数据库或neo4jserver中提取子图的文档很少令人惊讶.

  2. 使用Networkx:我发现networkx可以加载来自多种不同格式的图形(我不确定neo4j存储它们的dbs的格式),但是我还没有找到一种方法只将一个子图提取到Networkx中.我认为这应该从gremlin查询完成,但我不知道如何去做.

我偏爱Networkx路径,因为它还附带了我希望应用于子图的网络分析算法.我觉得它也可以避免Bulbflow和py2neo之间的潜在冲突,虽然我不确定是否会存在这样的冲突.

任何建议将不胜感激!

提前致谢

python subgraph neo4j graph-databases networkx

18
推荐指数
1
解决办法
3148
查看次数

图形结构数据库和Php

我想使用php使用图形数据库.你能指出一些入门资源吗?那里有代码/教程吗?或者是否有任何其他方法来存储在完全随机/抽象情况下彼此相关的数据?

-

非常抽象的关系所需的例子:约翰与玛丽有关,都与学校有关,约翰高,玛丽矮,约翰有蓝眼睛,玛丽有绿眼睛,我想要的问题是哪些人与'有短暂的人有关绿眼睛去学校' - >回答约翰

-

另一个例子:

    TrackA -> ArtistA
           -> ArtistB

           -> AlbumA -----> [ label ]
           -> AlbumB -----> [   A   ]

           -> TrackA:Remix
           -> Genre:House

           -> [ Album ] -----> [ label ]
   TrackB  -> [   C   ]        [   B   ]
Run Code Online (Sandbox Code Playgroud)

示例查询:

哪个类型的TrackB更接近?回答:众议院 - 因为它与专辑C有关,专辑C与TrackA有关,与类型:House有关

获取所有类型:标签A的房屋相关专辑:结果:AlbumA,AlbumB - 因为他们都有TrackA与流派有关:House

-

它可以在MySQL中使用,但它需要一组固定的每个项目的属性/列和一个复杂的非灵活查询,而我需要每个属性都是一个项目而不是"属于"某个东西,而不是'与某事有关.

php database database-design nosql graph-databases

17
推荐指数
1
解决办法
5778
查看次数

ORM与Graph-Databases如Python中的Neo4j

我想知道有一个ORM与图数据库(fe Neo4j)的解决方案(或需要).我跟踪关系(A与B相关,它与A通过C等相关,从而构建一个大图)实体(包括那些实体的附加属性)并需要将它们存储在DB中,我认为图形数据库完全适合这项任务.

现在,对于类似sql的数据库,我使用sqlalchemyśORM来存储我的对象,特别是因为我可以从数据库中检索对象并以pythonic样式使用它们(使用它们的方法等).

Neo4j或其他Graph-DB是否有任何对象映射解决方案,以便我可以在Graph-DB中存储和检索python对象并轻松使用它们?

或者你会编写一些函数或适配器,如python sqlite文档(http://docs.python.org/library/sqlite3.html#letting-your-object-adapt-itself)来检索和存储对象?

python orm neo4j graph-databases bulbs

17
推荐指数
3
解决办法
6379
查看次数

在Neo4J中存储多个图形

我有一个应用程序,它将关系信息存储在MySQL表中(contact_id,other_contact_id,strength,recorded_at).如果我需要做的就是显示联系人的关系,甚至生成两个联系人的共同联系人列表,这很好.

但现在我需要生成以下统计数据:'2011年1月强度为3或更高的双向连接总数是多少'或(假设每个联系人都是组的一部分)'哪个组的连接数最多?到其他团体等

我很快发现用于生成这些统计数据的SQL变得非常难以实现.

所以我写了一个脚本,对于任何给定的日期,它将在内存中生成一个图形.然后,我可以根据该图表运行我想要的任何统计数据.更容易理解,总的来说,性能更高 - 除了生成图形部分.

我的下一个想法是缓存这些图,这样我就可以在需要运行新的统计数据时调用它们(或生成后面的图形:例如,对于今天的图表,我采用昨天的图表并应用自昨天以来发生的任何更改).我尝试了memcached,它工作得很好,直到图形增长> 1 MB.

所以现在我正在考虑使用像Neo4J这样的图形数据库.

唯一的问题是,我没有一个图表.或者我这样做,但它随着时间的推移而变化,我需要能够以不同的参考时间查询它.

那么,我可以:

  • 在Neo4J中存储多个图形并分别与它们进行重新交互/交互?然后我会为每个日期创建和存储单独的社交图表.

要么

  • 为时间戳添加到每个边缘的有效值并适当地过滤图形:所以如果我想要一个"5月1日"的图形,我只会跟随在"5月1日"之前创建的两个noeds之间的最新边缘(如果所有边缘都是如此)是在5月1日之后创建的,然后这些节点将不会连接).

我是图形数据库的新手,所以任何帮助/指针/提示都将受到赞赏.

graph neo4j graph-databases

16
推荐指数
2
解决办法
8919
查看次数

如何在neo4j中获取所有连接的节点

在此输入图像描述

我想得到从节点0开始的所有连接节点的列表,如图所示

neo4j graph-databases cypher

15
推荐指数
3
解决办法
8534
查看次数

Orientdb版本有什么区别?

我一直在阅读有关OrientDB的文章,我对该软件的"版本"感到有些困惑.

主要版本听起来就像是文档存储,但互联网上的东西让它听起来像是文档和图形数据库.http://nosql.mypopescu.com/post/1254869909/correction-orientdb-is-a-document-and-graph-store

它和图表版本有什么区别?图表版本是仅使用节点和边缘进行图形化,还是文档图形数据库?

更新:关键值商店版本是什么?它有何不同?你能和其他版本一起使用吗?

nosql graph-databases orientdb

14
推荐指数
1
解决办法
2542
查看次数

在磁盘/流图形分区算法上存储非常大的图形?

假设我有一个非常大的无向,未加权的图形(从数亿个顶点开始,每个顶点约10个边缘),非分布式和仅由单线程处理,并且我想对它进行广度优先搜索.我希望它们是I/O绑定的,因此我需要一个良好的BFS磁盘页面布局,磁盘空间不是问题.搜索可以以相同的概率在每个顶点上开始.直观地说,这意味着最小化不同磁盘页面上的顶点之间的边缘数量,这是图形分区问题.

图表本身看起来像一个意大利面,想到随机互连的随机点集,一些偏向于较短的边缘.

问题是,一个分区图如何大?我发现可用的图形分区器可以处理仅适合内存的图形.我找不到任何流图分区算法的描述和实现.

或者,也许有一种替代分区图,以获得适合BFS的磁盘布局?

现在作为近似,我使用这样的事实:顶点具有附加到它们的空间坐标,并以Hilbert排序顺序将顶点放在磁盘上.这种方式在空间上靠近顶点落在同一页面上,但它们之间的边缘的存在与否完全被忽略.我可以做得更好吗?

作为替代方案,我可以使用顶点的希尔伯特排序顺序将图形拆分为多个,将子图划分,将它们缝合并接受接缝处的不良分区.

我已经研究过的一些事情:

  1. 如何存储具有数十亿个节点和顶点的大型定向未加权图
  2. http://neo4j.org/ - 我发现零信息是关于它如何在磁盘上进行图形布局

分区实现(除非我弄错了,所有这些都需要将图形放入内存中):

  1. http://glaros.dtc.umn.edu/gkhome/views/metis
  2. http://www.sandia.gov/~bahendr/chaco.html
  3. http://staffweb.cms.gre.ac.uk/~c.walshaw/jostle/
  4. http://www.cerfacs.fr/algor/Softs/MESHPART/

编辑:关于图表的样子以及BFS可以在任何地方开始的信息.编辑:分区子图的想法

performance graph graph-databases

13
推荐指数
1
解决办法
3311
查看次数

Rails 3和图形数据库

在Postgresql上运行的Rails 3应用程序需要切换到图形数据库才能够成长.其中有很多,它们都提供不同类型的API,主要是REST.

我深受启发会谈埃米尔Eifrem什么可以用的Neo4j来完成,NeoTechnologies首席执行官.我必须承认,我玩过它,这件事绝对是我们需要的,但有几个障碍.

  1. REST API不是事务性的.
  2. Rails 3应用程序在ruby 1.9.2上运行,但不是jRuby 1.5.3或1.6以实现本机API.

有些数据库也是由Java驱动并提供REST API,所以不要改变它们.由于许可证或成本或缺乏团队支持,我们不能选择其他选项.

我认为我错过了一些东西,所以我会很感激任何关于我们的选择以及什么对我们有益的提示,见解或建议.谢谢.

ruby-on-rails neo4j graph-databases ruby-on-rails-3

13
推荐指数
1
解决办法
2581
查看次数

图数据库:TinkerPop/Blueprints与W3C关联数据

寻找网络分析的基础架构异构(多节点类型(多模),多刃型(多关系)和多描述的功能(功能多))网络,我注意到,有两种标准栈图形数据库世界:

一方面,我们有ThinkPop/Blueprint 属性图模型.它得到了Neo4j,OrientDB GraphDB,Dex,Titan,InfiniteGraph等的支持.

Tinkerpop堆栈包括Blueprint属性图模型接口,Gremlin图遍历语言和Furnace图算法包.

另一方面,我们拥有W3C的关联数据技术堆栈,AllegroGraph,4store,Oracle数据库语义技术,OWLIM,SYSTap BigData等提供支持.

语义数据使用RDF/RDFS/OWL表示,并且可以使用SPARQL查询.最重要的是它提供规则推理功能.

现在,假设我想在图形数据库中表示异构数据,并分析这些数据(统计数据,关系发现,结构,演变等),(我知道这些术语广泛和模糊) - 什么是各自的相对优势模型用于各种类型的网络分析任务?这两个模型相互补充吗?

semantic-web graph-databases

13
推荐指数
1
解决办法
2819
查看次数

如何优化ArangoDB中的图遍历?

我主要打算问这个问题:"ArangoDB是真正的图形数据库吗?"

但是,这个问题听起来很冒犯.

你们,triAGENS的人们在创建"多范式"数据库方面做得非常出色.作为PostgreSQL,PostGIS,MongoDB和Neo4J/Titan的用户,我真的很高兴看到"一体化"的解决方案:)

但问题仍然存在,基本上在ArangoDB中创建图形需要创建两个独立的集合:一个用于边缘,一个用于顶点,因此,据我所知,它已经意味着顶点和相关边缘不是"物理"邻居.

而且,即使在创建了适当的索引之后,我在Gremlin中做这种事情时也面临着一些严重的性能问题

g.v('an_id').out('likes').in('likes').count()
Run Code Online (Sandbox Code Playgroud)

在~3秒后(感知时间)返回结果

我以为我很难理解Gremlin和Blueprint/ArangoDB是如何工作的所以我试图用AQL重写相同的查询:

LET lst = (FOR e1 in NEIGHBORS(vertices, edges, "an_id", "outbound", [ { "$label": "likes" } ] )
    FOR e2 in NEIGHBORS(vertices, edges, e1.edge._to, "inbound", [ { "$label": "likes" } ] )
        RETURN 1
    )
RETURN length(lst)
Run Code Online (Sandbox Code Playgroud)

这给了我一个相同数量级的延迟.

如果我尝试在Titan或Neo4j数据库上运行相同的查询(使用相同的数据),查询几乎立即返回(感知时间:<200ms)

所以在我看来,ArangoDB图形功能是"传统文档数据库"之上的"智能图层",但ArangoDB不是"本机"图形数据库.

为了证实这种感觉,我转换数据以在PostgreSQL中加载它并运行一个查询(你可以假设有一个多表JOIN)并得到类似的(对ArangoDB)执行延迟

我做错了什么(在AQL查询中)?

有没有办法优化数据库以获得更好的遍历时间?

在PostgreSQL中,从概念上讲,我会混合使用edge和node并使用CLUSTER子句对数据进行物理排序,在ArangoDB中可以做类似的事情吗?(我认为它会很难,因为它会涉及"交错"边缘和节点,只是一种直觉)

graph-databases arangodb aql

13
推荐指数
1
解决办法
2771
查看次数