问题标签 [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.

0 投票
1 回答
143 浏览

nosql - 哪个数据库在处理后端交友方面有过最好的体验?

由于我的最后一个问题被认为是主观的 :( ,因此我试图使其更具体。

我正在用 PHP 构建一个应用程序,用户可以在其中互相“加为好友”。这似乎最适合图形数据存储......例如,您可以在传统的 RDBM 中拥有这组字段:

编号 | 用户1 | 用户2

并且您必须处理重复数据(id = 1,user1 = Joe,user2 = Jeff,id=2,user1=Jeff,user2=Joe)...

您还必须在两列中搜索一位用户。

当执行某个朋友的朋友搜索时,递归确实很棘手。

  1. 你同意图形数据库是最好的吗?
  2. 如果有,是哪一个?为什么在你的经验中它是最好的?
  3. 由于客户端已经拥有 MySQL,是否值得花费开销来获取图形存储,或者是否有一种很好的方法可以解决在 MySQL 中保留它的主要问题。

对版主的 PS:如果您仍然对这篇文章有疑问,如果您能告诉我是否有任何特殊方式可以提出这个问题并被视为“建设性”帖子,我将不胜感激?给我发邮件(joedevon),给我发推特(joedevon),在评论中添加。无论哪种方法最适合您...

我只是想从其他程序员那里得到一些意见,我认为这个问题很常见,充满了机会和问题,而且很有趣。很惊讶原版被认为不适合 SO,但他们的规则......

0 投票
3 回答
6977 浏览

database - 图数据库中是否存在模式之类的东西?

图数据库中是否存在模式之类的东西?例如,您能否指定哪些类型的节点可以与哪些其他类型的节点有关系?

这样的架构是什么样的?

0 投票
4 回答
4829 浏览

database - 图数据库是否更适合最短路径算法?

我的目标是为道路网络编写最短路径算法。

目前我的架构是这样的:我将所有数据存储在启用 PostGIS 的 PostgreSQL 数据库中。我做了一个SELECT * FROM ways,在具有 100,000 条边(路)的表上花费不到 3 秒的时间,之后我将对已经驻留在内存中的图应用(Java、Ruby 或任何基于)最短路径算法。在具有 100,000 条边的图上,第二个操作可能需要大约 1.5 秒。

所以,它需要:

  • 2-3秒将数据库中的所有路径加载到内存中并创建一个图(节点存储在一个带有路径(边)的表中);
  • 1-1.5 秒计算已在内存中的图上的最短路径。

这与 pgRouting 所做的非常相似(据我所知,它使用 C Boost 将图形存储在内存中),除了 pgRouting 总共需要大约 2 秒来计算同一数据集上的最短路径(是的,它很快,但是它对我来说是一个黑匣子,所以我需要自己的)。

但最近我发现了有关 Graph 数据库和 Neo4j 的信息。在他们的网站上,他们声称“仍然能够在数百万条道路和航路点的图表上以亚秒级的速度进行这些计算,这使得在许多情况下可以放弃使用 K/V 存储预计算索引的正常方法,并能够将路由置于关键路径,以适应生活条件,构建高度个性化和动态的空间服务。”

所以问题是:对于我的特定问题,图形数据库会更快吗?

该问题具有以下性质:

  • 数据库由一张表(方式)组成;
  • 对数据库的唯一查询是将所有方式都放入内存(以构建图形);
  • 我不需要可扩展性,即图形很可能不会增长。
0 投票
1 回答
1451 浏览

graph - 如何使用 neo4j 和 gremlin 存储树结构

我想使用neo4j本地数据库和GremlinJava 存储以下目录树结构。

我已经定义了一个方法 StorePath(String path)。
我想要什么:当我用 path = "Root\Dir2\Dir4\Dir7" 调用 StorePath(path) 时,数据应按如下方式存储

其中 Root 和 Dir* 是具有空白边的顶点。请帮我处理java代码。

0 投票
1 回答
5052 浏览

neo4j - 我怎么能在neo4j中写这个查询?

我对 neo4j 和一般的图形数据库都很陌生。我正在设计一个应用程序的原型,但我不知道应该如何编写这些查询

我有这个域:

用户餐厅评论 TypeOfFood

因此,一家餐厅有一个或多个 TypeOfFood,用户会留下有关餐厅的评论。用户有一些喜欢的食物,与餐厅出售的 TypeOfFood 相匹配。用户也通过典型的朋友关系相互关联。

我正在尝试编写的一些查询:

  • 给我所有我朋友评价为 3 星或以上且制作我喜欢的食物的餐厅(不包括那些我已经评论过的餐厅)

  • 推荐我可能认识的朋友(我想这应该是“所有我朋友的朋友但还不是我的朋友,按一些东西排序)

0 投票
5 回答
1314 浏览

database - 图数据库中的面向对象编程

图数据库将数据存储为节点、属性和关系。如果我需要根据查询从对象中检索某些特定数据,那么我需要检索多个对象(因为查询可能有很多结果)。

考虑图形数据库中面向对象编程中的这个简单场景:

我有一个用户(图形)数据库,每个用户都存储为一个对象。我需要检索居住在特定地点的用户列表(地点属性存储在用户对象中)。那么,我该怎么做呢?我的意思是每次我需要做某事时都会检索不必要的数据(在这种情况下,可能需要检索整个用户对象)。图数据库中的函数式编程不是更好吗?

这个例子只是我想到的上述问题的一个简单类比。不要把它作为基准。所以,问题仍然存在,图形数据库中的面向对象编程有多棒?

0 投票
3 回答
1634 浏览

mongodb - 在单个应用程序中使用多种数据库类型对数据进行建模

将应用程序的数据模型分解为不同的数据库系统是否有意义?例如,应用程序将所有用户数据和关系存储在图形数据库中(非常适合存储关系),而将其他数据存储在文档数据库中,例如 CouchDB 或 MongoDB?这将要求用户图形数据库引用文档数据库中的唯一 ID,反之亦然。

这是否使数据模型和应用程序过于复杂?或者这是使用这两种类型的数据库系统的最佳用途来扩展您的应用程序?

0 投票
2 回答
1414 浏览

graph-databases - 如何在 Gremlin 上“加入”两个顶点?

我在 Gremlin 控制台上遇到了一些问题;这是我的架构。

小精灵

会心:

  • ID 1(顶点)
  • ID 3(顶点)
  • 标签:“创建”(边缘)

我想获得 ID 9(边缘)

v = gv(1)

v.outE("创建").id

仅在只有一个“创建”边缘时才有效

0 投票
4 回答
1904 浏览

nosql - 使用哪个图形数据库

是否有任何开源图形数据库能够存储二进制数据、水平扩展并可选地提供存储数据的版本控制?

大量的 dbs 让我不知所措,但它们似乎都没有所有想要的功能。

0 投票
5 回答
9261 浏览

graph-databases - 在 Gremlin 上获取 id + 顶点图?

gv(1).id

给我顶点1 id,

gv(1).map

给我顶点 1 属性。

但是,我怎样才能同时得到一个带有 id 和propeties 的哈希