我正在构建一个非常适合图形数据库的应用程序,我决定使用Neo4J。关于是否在Neo4J节点上存储有关特定节点的数据,或者只是引用mongo db中的项目,我有两种想法。
e.g。
(人:姓名="比尔",年龄= 29,身份= 1)< -neo
VS
(人:id = 1,uuid =" some-uuid")< - neo {uuid:" some-uuid",name =" Bill",age = 29}< - mongo
我计划为数据建立一个REST接口,如下所示:
/user/{id}
:
(neo + mongo)我会在mongo中找到用户(不接触neo)。
/user/{id}/friends
:
(neo)查找用户的所有朋友并加载节点
所以我想我的问题是:在Neo(性能等等)中存储关于节点的数据是否存在缺点,因为这看起来更简洁一些。
谢谢,
本
答案 0 :(得分:3)
这取决于您的数据的大小(结构)以及您将运行的查询类型。如果在节点上存储大量数据,可能会有可观察到的性能损失 - 但是"巨大的"难以用确切的数字来定义;)一些指导/事项要考虑:
总的来说,你的问题肯定是有效的,有些项目让我听到人们将一些数据移出图表。但是,我不会从这开始 - 我将所有内容都放入neo4j开始,对查询和用例进行一些基本的性能测试,并将事情重构为mongo,但事实证明性能或存储大小是不可接受的。
P.S。我还应该提一下,你可能会在写入时看到更多内容而不是读取,假设你对你的读取很聪明。如果你设法让你的阅读查询只返回特定的属性(而不是完整的节点),那么无论有多少属性被附加",读取都不应该受到影响。换句话说,如果用户拥有大量属性并且您只对该名称感兴趣,那么RETURN user.name将比RETURN用户快得多。