gpt4 book ai didi

node.js - 如果重点关注建模数据,那么哪个(内存中)图形数据库

转载 作者:IT老高 更新时间:2023-10-28 22:07:18 26 4
gpt4 key购买 nike

我没有想法,希望能得到一些有用的意见。我正在使用这个问题来压缩我的经验并与他人分享,希望能够激发一些分销商将图形数据库建模作为下一步问题/方式的下一步。

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

我最重要的要求是:

  • in_memory(至少用于索引)
  • 开源(免费使用)
  • 与头等公民
  • 一样的 JavaScript/Node.js 性能
  • 舒适的查询和建模语言

  • Neo4J

    我真的很喜欢 cypher,所以最好的选择是Neo4j。
    但是,关于Neo4j的主要问题是JavaScript访问是非本地的。它使用REST-API,而不是直接Java访问,即 about ten times (10x) slower。因此,我查看了 node-neo4j-embedded,但是它已经无效了两年多了。看来 author根本没有激活(坏符号)。

    ArangoDB

    ArangoDB真正优秀的核心开发人员回答了 my question关于内部的问题。最后,这意味着 JavaScript是一流公民,因为可以将本地查询推出JS。从开源基准来看,我认为这是公平的。但是恐怕他们没有使用 node-neo4j-embedded作为基准。基准测试比较了REST-API(由于@weinberger注释而被编辑)。我希望他们比较 native API(也许有人窥探够了,请尝试一下-让我们知道!)。 更新:正如我现在注意到的那样,OrientDB的 answered the benchmark具有新的node.js驱动程序(通过使用-Dcommand.cache.enabled = true -Dcommand.cache.minExecutionTime = 3启动服务器来使用 Command Cache这是不公平的) ,因为它不是查询缓存基准测试()

    因为我喜欢将ArangoDB用作图形数据库,所以我有3个选择(来源: FAQ):
  • 遍历JS objects
  • 使用AQLs graph functions
  • 使用REST API

  • 通常, 不像cypher那样舒适。而且我不确定如何比较以及对数据进行建模的正确方法是什么(例如 Neo4J explains very well)。我很喜欢ArangoDB Graphs这样的东西。如果您的关系多于行( the reason to use graphs instead of relations with joins),则感觉ArangoDB专注于图操作,而Neo4J更适合使用图的需求。

    MongoDB

    基于文档的MongoDB并非针对图操作进行了优化,但后来针对 has gotten an experimental in_memory storage engine进行了优化。另外,还有一些与in_memory或与图形相关的项目,但是没有什么真正令人信服的。在 this discussion上,MongoDB似乎不是我想要使用的。

    OrientDB

    因为有一个关于 OrientDB vs. MongoDB的比较(来自OrientDB),所以我打算使用它。使用SQL的“OrientDB具有混合Document-Graph引擎”。我是前PHP/MySQL专家。但是建模部分在哪里?他们的章节 working with graphs不像密码。就像对图使用SQL。没什么错,但是在我想念建模之前就使用了cypher。
    如果有人使用OrientDB和Graphs进行建模,也许您可​​以编写一个类似于 Neo4J had done的教程。

    更新:关于JavaScript访问,例如第一个公民 there are news:
    “在下一个发行版中,此驱动程序的速度将与本地Java 相当,为 。” fork 的node.js驱动程序had bin fixed last days

    更新:在选择OrientDB之前,您可能需要阅读article about some issues以及从那里链接的讨论。本文涉及一个敏感的问题,应该谨慎对待。此更新作者的注释:我是SO编辑人员的新手,并且没有足够的声誉来发表评论。我认为此信息是讨论的有效点,不确定如何根据SO规则将其放在此处。

    LokiJS

    在研究Neo4J,ArangoDB和MongoDB之前,我曾尝试使用基于JavaScript的in_memory数据库LokiJS进行尝试,以遵循该策略忽略所有会降低性能和效率的策略。 LokiJS试图完成Mongo-Style(RoadMap)。主要问题是bad ability to scale。当然,它不是图形数据库,但是在我的项目开始时,这是一个有趣的解决方案。找到所有分布式文档也不是一种完美的感觉(也许他们应该使用GitBook重新启动)。
    最后,LokiJS完全是一个非常有趣的项目,我希望他们会继续前进!

    LevelDB

    以前,当我写学位论文时,我是在看levelDB。在写这篇文章时记住了这一点,我在LevelDB in_memory中搜索了一个有希望的结果,称为MemDown(请参阅also)。我没有测试过这个发现,但是也许有人对这个解决方案有工作和建模的经验。如果所有其他方法都不适合,这可能是最有效的方法,因为我只写了一个轻量级的密码克隆,目的是尽可能地保持轻量级。

    编辑:由于需要评论,这里是LevelGraph的链接。为LevelGraph/LevelDB实现CYPHER解析器的想法是,您的出发点是进行比较

    Cypher:
    CREATE (SUBJECT:"a") - [b:PREDICATE] -> (OBJECT:"c") 
    RETURN, subject, predicate, object

    LevelGraph:
    var RETURN = { SUBJECT: "a", PREDICATE: "b", OBJECT: "c" };
    db.put(RETURN, function(err) {
    // ..
    });

    结论

    您可能已经注意到,我不是图的 super 英雄。但这是我对此的初探,我正在尝试概述。我认为那里有很多人想问我同样的问题,但是没有时间。我希望这篇文章能对很多人有所帮助,并且会随着对的评论和答案而有所变化,成为如何为图形建模的良好概述。

    @editors:不客气。

    @commenters:这是我个人研究的结果-如果您也像我一样经历了一段旅程,请像我对已评估的每个数据库所做的那样,提供简短的摘要(不要忘记针对我的4个目标) 。

    最佳答案

    通过任何 native 功能(例如流)和高级查询语言(例如CYPHER)结合节点样式的性能的想法实际上很巧妙。

    您可能不会得到的是任何一种低级API,因为这在数据库作者中很少见,并且据说他们的设计模式也不需要。因此,长时间运行的tcp连接应该可以正常工作。

    cypher-stream since to incorporate all of this, while (superficially judged) maintaining a good style.



    由于您可能无法进行进一步的搜索,因此建议您在需要其他功能的情况下向他发送请求请求:)

    关于node.js - 如果重点关注建模数据,那么哪个(内存中)图形数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31565386/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com