标签: arangodb

MongoDB + Neo4J与OrientDB对比ArangoDB

我目前正处于MMO浏览器游戏的设计阶段,游戏将包括一些实时位置的瓦片地图(因此每个单元格的瓦片数据)和一般世界地图.我更喜欢使用MongoDB进行持久数据世界的游戏引擎.

我还将实现一个运输模拟(我将在下面详细解释),它基本上是一个Dijkstra模块,我已经决定使用图形数据库,希望它能让事情变得更容易,因为它很受欢迎.

我对MongoDB + Neo4J设置感到满意,但后来注意到了OrientDB,它看起来像MongoDB和Neo4J(两者都是最好的?),甚至还有MongoDB和Neo4J的VS页面.

重点是,我听到一些关于MongoDB丢失数据的恐怖故事(尽管不确定它仍然存在)并且我没有这样的奢侈品.而对于Neo4J,我不是每年12K€的"忠实启动"成本的忠实粉丝,尽管我可能没有数百万的顶点数据库.OrientDB似乎是一个可行的选择,因为可能还有一些使用一个数据库解决方案的机会.

在这种情况下,一个逻辑移动可能会跳转到OrientDB,但它有一个小社区,并且没有找到很多关于它的评论,MongoDB和Neo4J是广泛使用的流行工具,我担心如果OrientDB是冒险.

我的第一个问题是,如果您对这些数据库有任何经验/意见.

第二个问题是其图形数据库是一个航运仿真更好.使用数据库有望计算从任何顶点到任何顶点的最便宜路线并遍历它(经典Dijkstra).但也必须根据"国家B对国家A禁运的情况改变权重,因此任何来自A国的物品都不能通过B,在XYZ地区有洪水,因此无法进行陆路运输"等.此外,该数据库预计会缓存结果.我希望不超过1000个顶点,但边缘很多.

如果问题有点含糊,请提前致谢并提前道歉

PS:我在标题上添加了ArangoDB,但是没有太多机会去看看.


截至2016年4月18日的后期编辑:在评估了对我的问题和发展策略的反应之后,我决定使用ArangoDB,因为他们的路线图对我来说更有希望,因为他们显然没有尝试添加大量半炒的炒作功能.

dijkstra mongodb neo4j orientdb arangodb

45
推荐指数
3
解决办法
3万
查看次数

选择多模型DBMS时需要考虑哪些因素?(OrientDB与ArangoDB)

我希望能够进入多模型DBMS的世界,我没有特别的用例,只想开始学习.

我发现有两个突出的东西 - OrientDBArangoDB,但无法找到任何有意义的比较,在它们之间不受影响.有人能否解释两者之间的功能差异,以及使用其中一个的警告?如果我学会了一个,我能够轻松过渡到另一个吗?

(我也标记了FoundationDB,但它是专有的,我可能不会考虑它)

这个问题要求对想要了解多模型DBMS的进行 OrientDB与ArangoDB之间的一般比较,而不是关于哪个更好的自以为是的答案.

database orientdb arangodb foundationdb multi-model-database

28
推荐指数
1
解决办法
5260
查看次数

什么(in_memory)图形DB如果聚焦建模数据

我没有想法,希望得到一些有用的意见.我正在使用这个问题来压缩我的经验并分享它们,希望激励一些经销商进一步将图形数据库建模作为一流的问题/方式.

我已经验证了node.js可以使用的一些图形数据库解决方案几周.我的用例是保存不同社交用户网络帐户的交互.需要以最有效的方式使用CPU和内存.

我最重要的要求是:

  • in_memory(至少用于编制索引)
  • 开源(并免费使用)
  • 与一等公民相同的JavaScript/Node.js表现
  • 舒适的查询和建模语言

Neo4j的

我真的很喜欢密码,所以我最好的选择是Neo4j.但是关于Neo4j的主要问题是JavaScript访问是非原生的.它使用的REST-API 比直接Java访问慢大约十倍(10倍).所以我看了一下node-neo4j-embedded,但它已经处于非活动状态超过两年了.看起来它的作者根本不活跃(坏迹象).

ArangoDB

ArangoDB非常好的核心开发人员回答了关于内部的问题.最后,它意味着JavaScript是一流的公民,因为本机查询可以被推出JS.看看开源基准测试,我认为这是公平的.但我担心他们没有使用node-neo4j-embedded作为他们的基准.基准测试比较REST-API(由于@weinberger评论而编辑).我希望他们比较本机API(也许有人足够snoopy并尝试一下! - 让我们知道!).更新:正如我现在注意到的那样,OrientDB 用新的node.js驱动程序回答了基准测试(通过启动服务器使用命令高速缓存)-Dcommand.cache.enabled = true -Dcommand.cache.minExecutionTime = 3,什么是不公平的,因为它不是查询缓存基准!)

因为我喜欢使用ArangoDB作为图形数据库,所以我有3个选择(来源:FAQ):

一般来说,它像cypher一样不舒服.我不确定如何比较以及建模数据的正确方法(如Neo4J解释得很好).我很想为ArangoDB Graphs提供类似的东西.感觉ArangoDB专注于图形操作,如果你有更多的关系而不是行,Neo4J更符合使用图形的需要(使用图形而不是连接关系的原因).

MongoDB的

基于文档的MongoDB没有针对图形操作进行优化,但后来获得了实验性的内存存储引擎.还有一些项目是in_memory或图形相关,但没有什么是真正引人注目的.在本次讨论中,看起来MongoDB并不是我喜欢使用的.

OrientDB

因为有一个关于OrientDB和MongoDB的比较(来自OrientDB),我虽然即将使用这个." OrientDB有一个混合的Document-Graph引擎 …

neo4j node.js orientdb arangodb lokijs

21
推荐指数
1
解决办法
1233
查看次数

什么是最快的ArangoDB朋友的朋友查询(有计数)

我正在尝试使用ArangoDB来获取朋友的朋友列表.不仅仅是一个基本的朋友朋友列表,我还想知道用户和朋友的朋友有多少朋友,并对结果进行排序.在多次尝试(重新)编写性能最佳的AQL查询之后,这就是我最终的结果:

LET friends = (
  FOR f IN GRAPH_NEIGHBORS('graph', @user, {"direction": "any", "includeData": true, "edgeExamples": { name: "FRIENDS_WITH"}})
  RETURN f._id
)

LET foafs = (FOR friend IN friends
  FOR foaf in GRAPH_NEIGHBORS('graph', friend, {"direction": "any", "includeData": true, "edgeExamples": { name: "FRIENDS_WITH"}})
    FILTER foaf._id != @user AND foaf._id NOT IN friends
    COLLECT foaf_result = foaf WITH COUNT INTO common_friend_count
    RETURN {
      user: foaf_result,
      common_friend_count: common_friend_count
    }
)
FOR foaf IN foafs
  SORT foaf.common_friend_count DESC
  RETURN foaf
Run Code Online (Sandbox Code Playgroud)

不幸的是,性能并不像我想的那么好.与同一查询(和数据)的Neo4j版本相比,AQL似乎相当慢(5-10倍).

我想知道的是......我如何改进查询以使其表现更好?

graph-databases arangodb aql

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

ArangoDB的内存使用情况

我试图了解Arangodb的限制是什么以及理想的设置是什么.根据我的理解,arango将所有收集数据存储在虚拟内存中,理想情况下,您希望将其放入RAM中.如果集合增长并且无法放入RAM中,它将被交换到磁盘.

所以我的第一个问题.如果我的数据库增长,我需要调整交换分区/文件以容纳数据库吗?

由于arango也将数据同步到磁盘,这是否意味着数据将始终位于RAM和磁盘中?所以,如果我有一个1.5GB的数据库,而我的RAM是1GB,我需要至少拥有0.5GB的交换磁盘和1.5GB的常规磁盘空间?

我有点困惑arango如何使用虚拟内存.现在我有7个实际上是空的集合.我有1GB的RAM和1GB的交换磁盘.管理员报告arango正在使用4.5GB的虚拟内存.如果交换磁盘是1GB,这怎么可能?它目前使用80MB的RAM.如果每个集合的日志大小为32MB,那么这不应该是224MB吗?

期刊大小与收藏规模的建议是什么?随着集合的增长,这可以动态调整吗?

如果在磁盘是SSD的情况下大量使用交换磁盘,那么预期会有什么样的性能?如果交换磁盘使用了很多,那么性能与使用更传统的数据库(如mysql)类似?

arangodb

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

如何优化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
查看次数

ArangoDB链接文档

是否可以链接ArangoDB中不同集合中的文档,就像它在OrientDB中一样?

在OrientDB中,您可以创建一个类型的字段LINK并指定链接的类型.这创造了两个文件之间的关系.

我是否必须使用边集合在ArangoDB中执行此操作?

我正在尝试定义一个主集合和一个辅助集合,其中包含额外的信息以补充主要集合.我不希望主集合中包含所有数据,因为这是在其他实体之间共享的.

提前致谢.

join hyperlink document-database arangodb

11
推荐指数
1
解决办法
1792
查看次数

使用AQL(或arangojs)从ArangoDB获取d3的数据

我正在构建一个基于d3强制导向图的应用程序,后端使用ArangoDB,我希望能够尽可能高效地从Arango动态加载节点和链接数据.

我不是d3的专家,但总的来说,强制布局似乎希望将其数据作为节点数组和一组链接,这些链接将实际节点对象作为其源和目标,如下所示:

var nodes = [
        {id: 0, reflexive: false},
        {id: 1, reflexive: true },
        {id: 2, reflexive: false}
    ],
    links = [
        {source: nodes[0], target: nodes[1], left: false, right: true },
        {source: nodes[1], target: nodes[2], left: false, right: true }
    ];
Run Code Online (Sandbox Code Playgroud)

目前我正在使用以下AQL查询来获取相邻节点,但这非常麻烦.部分困难在于我希望包括节点的边缘信息,即使没有遍历这些边缘(为了显示节点在从数据库加载这些链接之前具有的链接数).

LET docId = "ExampleDocClass/1234567"

 // get data for all the edges
LET es = GRAPH_EDGES('EdgeClass',docId,{direction:'any',maxDepth:1,includeData:true})

// create an array of all the neighbor nodes
LET vArray = ( 
    FOR v IN GRAPH_TRAVERSAL('EdgeClass',docId[0],'any',{ maxDepth:1})
        FOR v1 IN v …
Run Code Online (Sandbox Code Playgroud)

javascript d3.js arangodb

11
推荐指数
1
解决办法
1508
查看次数

在Arango Foxx中构建应用程序的功能超出了常规节点应用程序

我正在学习更多关于ArangoDB和它的Foxx框架.但是我不清楚通过使用该框架构建我自己的独立nodejs应用程序来获取API /访问控制,逻辑等,我获得了什么.

Foxx提供的常规nodejs应用程序不会提供什么?

arangodb foxx

10
推荐指数
1
解决办法
1490
查看次数

如何在arangodb中重置root的密码?

我是根,我忘记了我现在能做什么?

我试图重新安装arangodb,删除所有数据库,但新安装旧密码后仍然存在

database arangodb

10
推荐指数
2
解决办法
4560
查看次数