我一直在通过python的Bulbflow处理Neo4j,现在需要一种方法来保存/导出子图.我已经看过Java甚至Ruby的方法,但是一个简单的Python方法似乎隐藏了我...
到目前为止,我找到了两条潜在的途径:
使用Networkx:我发现networkx可以加载来自多种不同格式的图形(我不确定neo4j存储它们的dbs的格式),但是我还没有找到一种方法只将一个子图提取到Networkx中.我认为这应该从gremlin查询完成,但我不知道如何去做.
我偏爱Networkx路径,因为它还附带了我希望应用于子图的网络分析算法.我觉得它也可以避免Bulbflow和py2neo之间的潜在冲突,虽然我不确定是否会存在这样的冲突.
任何建议将不胜感激!
提前致谢
我想使用php使用图形数据库.你能指出一些入门资源吗?那里有代码/教程吗?或者是否有任何其他方法来存储在完全随机/抽象情况下彼此相关的数据?
-
非常抽象的关系所需的例子:约翰与玛丽有关,都与学校有关,约翰高,玛丽矮,约翰有蓝眼睛,玛丽有绿眼睛,我想要的问题是哪些人与'有短暂的人有关绿眼睛去学校' - >回答约翰
-
另一个例子:
    TrackA -> ArtistA
           -> ArtistB
           -> AlbumA -----> [ label ]
           -> AlbumB -----> [   A   ]
           -> TrackA:Remix
           -> Genre:House
           -> [ Album ] -----> [ label ]
   TrackB  -> [   C   ]        [   B   ]
示例查询:
哪个类型的TrackB更接近?回答:众议院 - 因为它与专辑C有关,专辑C与TrackA有关,与类型:House有关
获取所有类型:标签A的房屋相关专辑:结果:AlbumA,AlbumB - 因为他们都有TrackA与流派有关:House
-
它可以在MySQL中使用,但它需要一组固定的每个项目的属性/列和一个复杂的非灵活查询,而我需要每个属性都是一个项目而不是"属于"某个东西,而不是'与某事有关.
我想知道有一个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)来检索和存储对象?
我有一个应用程序,它将关系信息存储在MySQL表中(contact_id,other_contact_id,strength,recorded_at).如果我需要做的就是显示联系人的关系,甚至生成两个联系人的共同联系人列表,这很好.
但现在我需要生成以下统计数据:'2011年1月强度为3或更高的双向连接总数是多少'或(假设每个联系人都是组的一部分)'哪个组的连接数最多?到其他团体等
我很快发现用于生成这些统计数据的SQL变得非常难以实现.
所以我写了一个脚本,对于任何给定的日期,它将在内存中生成一个图形.然后,我可以根据该图表运行我想要的任何统计数据.更容易理解,总的来说,性能更高 - 除了生成图形部分.
我的下一个想法是缓存这些图,这样我就可以在需要运行新的统计数据时调用它们(或生成后面的图形:例如,对于今天的图表,我采用昨天的图表并应用自昨天以来发生的任何更改).我尝试了memcached,它工作得很好,直到图形增长> 1 MB.
所以现在我正在考虑使用像Neo4J这样的图形数据库.
唯一的问题是,我没有一个图表.或者我这样做,但它随着时间的推移而变化,我需要能够以不同的参考时间查询它.
那么,我可以:
要么
我是图形数据库的新手,所以任何帮助/指针/提示都将受到赞赏.
我一直在阅读有关OrientDB的文章,我对该软件的"版本"感到有些困惑.
主要版本听起来就像是文档存储,但互联网上的东西让它听起来像是文档和图形数据库.http://nosql.mypopescu.com/post/1254869909/correction-orientdb-is-a-document-and-graph-store
它和图表版本有什么区别?图表版本是仅使用节点和边缘进行图形化,还是文档图形数据库?
更新:关键值商店版本是什么?它有何不同?你能和其他版本一起使用吗?
假设我有一个非常大的无向,未加权的图形(从数亿个顶点开始,每个顶点约10个边缘),非分布式和仅由单线程处理,并且我想对它进行广度优先搜索.我希望它们是I/O绑定的,因此我需要一个良好的BFS磁盘页面布局,磁盘空间不是问题.搜索可以以相同的概率在每个顶点上开始.直观地说,这意味着最小化不同磁盘页面上的顶点之间的边缘数量,这是图形分区问题.
图表本身看起来像一个意大利面,想到随机互连的随机点集,一些偏向于较短的边缘.
问题是,一个分区图如何大?我发现可用的图形分区器可以处理仅适合内存的图形.我找不到任何流图分区算法的描述和实现.
或者,也许有一种替代分区图,以获得适合BFS的磁盘布局?
现在作为近似,我使用这样的事实:顶点具有附加到它们的空间坐标,并以Hilbert排序顺序将顶点放在磁盘上.这种方式在空间上靠近顶点落在同一页面上,但它们之间的边缘的存在与否完全被忽略.我可以做得更好吗?
作为替代方案,我可以使用顶点的希尔伯特排序顺序将图形拆分为多个,将子图划分,将它们缝合并接受接缝处的不良分区.
我已经研究过的一些事情:
分区实现(除非我弄错了,所有这些都需要将图形放入内存中):
编辑:关于图表的样子以及BFS可以在任何地方开始的信息.编辑:分区子图的想法
在Postgresql上运行的Rails 3应用程序需要切换到图形数据库才能够成长.其中有很多,它们都提供不同类型的API,主要是REST.
我深受启发会谈的埃米尔Eifrem什么可以用的Neo4j来完成,NeoTechnologies首席执行官.我必须承认,我玩过它,这件事绝对是我们需要的,但有几个障碍.
有些数据库也是由Java驱动并提供REST API,所以不要改变它们.由于许可证或成本或缺乏团队支持,我们不能选择其他选项.
我认为我错过了一些东西,所以我会很感激任何关于我们的选择以及什么对我们有益的提示,见解或建议.谢谢.
寻找网络分析的基础架构异构(多节点类型(多模),多刃型(多关系)和多描述的功能(功能多))网络,我注意到,有两种标准栈图形数据库世界:
一方面,我们有ThinkPop/Blueprint 属性图模型.它得到了Neo4j,OrientDB GraphDB,Dex,Titan,InfiniteGraph等的支持.
Tinkerpop堆栈包括Blueprint属性图模型接口,Gremlin图遍历语言和Furnace图算法包.
另一方面,我们拥有W3C的关联数据技术堆栈,AllegroGraph,4store,Oracle数据库语义技术,OWLIM,SYSTap BigData等提供支持.
语义数据使用RDF/RDFS/OWL表示,并且可以使用SPARQL查询.最重要的是它提供规则和推理功能.
现在,假设我想在图形数据库中表示异构数据,并分析这些数据(统计数据,关系发现,结构,演变等),(我知道这些术语广泛和模糊) - 什么是各自的相对优势模型用于各种类型的网络分析任务?这两个模型相互补充吗?
我主要打算问这个问题:"ArangoDB是真正的图形数据库吗?"
但是,这个问题听起来很冒犯.
你们,triAGENS的人们在创建"多范式"数据库方面做得非常出色.作为PostgreSQL,PostGIS,MongoDB和Neo4J/Titan的用户,我真的很高兴看到"一体化"的解决方案:)
但问题仍然存在,基本上在ArangoDB中创建图形需要创建两个独立的集合:一个用于边缘,一个用于顶点,因此,据我所知,它已经意味着顶点和相关边缘不是"物理"邻居.
而且,即使在创建了适当的索引之后,我在Gremlin中做这种事情时也面临着一些严重的性能问题
g.v('an_id').out('likes').in('likes').count()
在~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)
这给了我一个相同数量级的延迟.
如果我尝试在Titan或Neo4j数据库上运行相同的查询(使用相同的数据),查询几乎立即返回(感知时间:<200ms)
所以在我看来,ArangoDB图形功能是"传统文档数据库"之上的"智能图层",但ArangoDB不是"本机"图形数据库.
为了证实这种感觉,我转换数据以在PostgreSQL中加载它并运行一个查询(你可以假设有一个多表JOIN)并得到类似的(对ArangoDB)执行延迟
我做错了什么(在AQL查询中)?
有没有办法优化数据库以获得更好的遍历时间?
在PostgreSQL中,从概念上讲,我会混合使用edge和node并使用CLUSTER子句对数据进行物理排序,在ArangoDB中可以做类似的事情吗?(我认为它会很难,因为它会涉及"交错"边缘和节点,只是一种直觉)