问题标签 [graph-databases]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - .NET 图形数据库
我一直在设计一个基于 .NET/Mono 框架的应用程序,它应该大量使用图论中的最短路径,我想使用本机解决方案来遍历图的节点,而不是实施难以维护且会严重影响性能的替代解决方案。
我找到了一个非常适合我的范围的应用程序:neo4j。
不幸的是,这个应用程序纯粹是用 Java 代码编写的,由于两种架构之间的巨大差异,它不能移植到 .NET。
有没有人知道是否有neo4j的任何端口或.NET的类似解决方案?
database - 基于图的数据库(http://neo4j.org/)有哪些用例?
我使用了很多关系数据库,并决定冒险尝试其他可用的类型。
这个特殊的产品看起来不错而且很有前途: http: //neo4j.org/
有人用过基于图的数据库吗?可用性方面的优缺点是什么?
你在生产环境中使用过这些吗?促使您使用它们的要求是什么?
database - 有这样的数据库吗?
背景:好的,所以我正在寻找我猜是对象数据库的东西。然而,我所看到的(当然很少)对象数据库是简单的持久层,而不是成熟的 DBMS。我不知道我正在寻找的东西是否甚至被认为是一个对象数据库,因此非常感谢任何帮助我指出正确方向的帮助。
我不想给你两页来描述我在寻找什么,所以我会用一个例子来说明我的观点。假设我有一个需要存储的“BlogPost”对象。像这样的东西,在伪代码中:
(假设Comment
是它自己的类。)
现在,在关系数据库中,author
将存储为指向 a 的外键User.id
,并且使用单独的表将tags
andcomments
存储为一对多或多对多关系来存储关系。我想要的是一个执行以下操作的数据库引擎:
- 使用直接引用而不是使用外键来存储相关对象(
author
、tags
等),这需要额外的查找;换句话说,彼此之上的对象应该由数据库本机支持 - 允许我在博客文章中添加评论或标签,而无需检索整个对象、更新它,然后将其放回数据库(如面向文档的数据库——CouchDB 就是一个例子)
我想我正在寻找的是一个导航数据库,但我不知道。有什么和我想的很相似的吗?如果是这样,它叫什么?(或者更好的是,给我一个实际工作的数据库。)还是我太挑剔了?
编辑:
澄清一下,我不是在寻找 ORM或抽象层或类似的东西。我正在寻找一个在内部执行此操作的实际数据库。对不起,如果我很难,但我已经搜索过,我找不到任何东西。
编辑:
此外,JVM 的某些东西会很棒,但在这一点上,我真的不在乎它运行在什么平台上。
neo4j - 围绕图形数据库大肆宣传……为什么?
围绕图形数据库有一些炒作。我想知道为什么。
在当今的 Web 环境中可能会遇到哪些可以使用图数据库解决的问题?图数据库是否适合经典应用程序,即可以用作关系数据库的替代品?所以实际上这是两个问题合二为一。
python - 图数据库和 RDF 三元存储:在 python 中存储图数据
我需要在 python 中开发一个图形数据库(如果有人可以加入我的开发,我会很高兴。我已经有一些代码,但我很乐意讨论它)。
我在互联网上进行了研究。在 Java 中,neo4j是一个候选者,但我找不到任何关于实际磁盘存储的信息。在 python 中,有许多图形数据模型(参见这个 pre-PEP 提案,但它们都不能满足我从磁盘存储和检索的需要。
但是,我确实知道三联店。Triplestore 基本上是 RDF 数据库,因此可以将图形数据模型映射到 RDF 中并存储,但我通常对这种解决方案感到不安(主要是由于缺乏经验)。一个例子是芝麻。事实是,在任何情况下,您都必须从内存中的图形表示转换为 RDF 表示,反之亦然,除非客户端代码想要直接破解 RDF 文档,而这几乎是不可能的。这就像直接处理数据库元组,而不是创建一个对象。
目前,在 python 中存储和检索(a la DBMS)图形数据的最新技术是什么?开始开发一个实现是否有意义,希望在对此感兴趣的人的帮助下,并与 Graph API PEP 的提议者合作?请注意,这将成为我接下来几个月工作的一部分,所以我对这个最终项目的贡献非常严重;)
编辑:也发现了有向边缘,但它似乎是商业产品
c++ - 基于图形的(键/值)数据库的面向性能的设计
我正处于为 C++ 设计一个基于图形(或键值)的数据库库的准备阶段,这里的许多人会发现它类似于http://neo4j.org/等项目。
由于这是设计的一个非常早期的阶段,我的要求很简单,未提炼并且(我承认)可能仍然相当幼稚:
- 有向无环图
- 树状结构,少根多叶
- 分支可能包含对其他分支的引用
- 但是没有循环
- 该图由键值对表示,其中键和值大部分是简单类型(整数),但有些可能指的是更复杂的类型,例如字符串
- 查询
- 简单查询通常会返回边。即从这个根开始的边缘对应于(键/值/键值元组)?
- 使用键字符串(键、键、键、值)的查询
- 访问模式和性能
- 应强调快速查找
- 添加边缘
- 但是没有从图中删除边/节点。即图表会增长,但永远不会缩小。
- 可以在图上执行优化,以优化缓存使用的内存布局
- 图表的大小约为 1 MB - 2 GB,并且大部分应该适合主内存
鉴于这些粗略的要求是一项挑战,您主要关心的是:
- 内存存储:布局、分配
- 例如,固定大小的块池?
- 通过聚类算法分配内存?
- 快速查询
- 动态重组
- 如何处理边/节点的添加?
- 优化更新(例如改进内存布局)
- 并发访问
- 例如,通过优化线程处理对内存布局的更改?
我正在寻找工作的良好起点,因此我很高兴收到对现有工作的参考。最重要的是:我应该考虑哪些我没有考虑的事情?
java - Java中图的空间高效表示?
我想要一个无向图,其中节点用一对标记(目前使用 String[] )并且可以任意链接到其他节点。我从 Hashtable 类型开始。事实证明,这对我来说空间效率不够——我打算拥有大约 60,000 个节点(最终,远远超过这个数字)。
我应该如何实现这种图以提高内存效率?相反,我应该考虑某种关系数据库吗?
sql - 您将如何在您喜欢的数据库范式中为您的模型实施修订控制系统?
我发现模型的 RCS 是一个在数据持久性方面需要解决的有趣问题。他们是几个使用 django ORM 来实现这个django-reversion和AuditTrail的解决方案,每个解决方案都提出了自己的方法来做到这一点。
这是我想要修改的模型(类似 django-model 的格式):
- 每个修订都应该用日期、修订号、评论和进行修改的用户进行注释。
你会如何在你喜欢的数据库(Mongo、neo4j、CouchDb、GAE Datastore)中做到这一点?
请在每篇文章中仅发布一个 RCS 模型示例。
我不是要完整的代码(也许解释就足够了?)但足以了解如何在每种数据库类型中解决此问题。
performance - 在磁盘/流图分区算法上存储非常大的图?
假设我有一个非常大的无向、未加权图(从数亿个顶点开始,每个顶点约 10 条边),非分布式且仅由单线程处理,并且我想对其进行广度优先搜索。我希望它们受 I/O 限制,因此我需要一个适合 BFS 的磁盘页面布局,磁盘空间不是问题。搜索可以以相等的概率从每个顶点开始。直观地说,这意味着最小化不同磁盘页面上顶点之间的边数,这是一个图分区问题。
图本身看起来像意大利面条,想想随机互连的随机点集,对较短的边有一些偏见。
问题是,一个分区图怎么这么大?我发现可用的图形分区器仅适用于内存中的图形。我找不到任何流图分区算法的描述或实现。
或者,也许有一种替代分区图的方法来获得适用于 BFS 的磁盘布局?
现在作为一个近似值,我使用顶点附有空间坐标的事实,并将顶点以希尔伯特排序顺序放在磁盘上。这种方式空间上接近的顶点落在同一页面上,但它们之间是否存在边缘被完全忽略。我能做得更好吗?
作为替代方案,我可以使用 Hilbert 顶点排序顺序将图拆分为多个部分,对子图进行分区,将它们缝合回去并接受接缝上的不良分区。
我已经研究过的一些事情:
- 如何存储具有数十亿个节点和顶点的大型有向未加权图
- http://neo4j.org/ - 我发现关于它如何在磁盘上进行图形布局的零信息
分区实现(除非我弄错了,它们都需要将图形放入内存):
- http://glaros.dtc.umn.edu/gkhome/views/metis
- http://www.sandia.gov/~bahendr/chaco.html
- http://staffweb.cms.gre.ac.uk/~c.walshaw/jostle/
- http://www.cerfacs.fr/algor/Softs/MESHPART/
编辑:关于图表的外观以及 BFS 可以在任何地方开始的信息。编辑:关于划分子图的想法
database - 基于图的数据库和面向对象的数据库有什么区别?
基于图的数据库( http://neo4j.org/)和面向对象的数据库(http://www.db4o.com/ )有什么区别?