2016-02-16 32 views
1

我在我的应用程序中使用mongodb和节点js。我们有用户收集和事件收集。Instagram社交网络使用mongodb和节点js

Users :- "user":{ 
"name":[name], 
"email":[email] 

} 

Events :- "event":{ 
"title":[title], 
"venue":[venue] 

} 

以前用户只能跟着事件,但不能跟着对方现在我也使各地的用户还社交网络,让用户可以按照对方和自己进料将得到相应的改变究竟像Instagram的。

所以我的问题是因为我的主数据库是Mongodb,所以我应该使这个社交网络只使用Mongodb,或者我应该使用一些Graph数据库,并把我所有的用户数据从Mongo数据库到图数据库并同时维护这两个数据库

回答

0

您可以这样做的一种方法是将一个运行GraphQL的快速服务器放在Mongo前使用express-graphql。如果定义了用户类型和事件类型,你可以写一个graphql查询是这样的:

query { 
    user(name: "Sally") { 
    followed_users { 
     name 
    } 
    followed_events { 
     title 
    } 
    } 
} 

这基本上呈现您的数据图表,但graphql将触发的MongoDB查询乱舞(看决心函数here,想象一下后台的Mongo查询而不是数据[args.id],以获取所有信息,然后将其组合成单个JSON响应。

更具侵入性的选项是从MongoDB切换到ArangoDB。 它是一个像MongoDB这样的文档商店,所以它应该感觉很熟悉,但是如果你添加一个额外的边集合(另一个带有_to:和_from:属性的文档),那么你就有一个实际的图形,并且可以进行实际的连接,遍历和数据库中的交易。

虽然GraphQL只是将您的数据显示为图表,但ArangoDB实际上是一个full-on graph database。无论哪种方式,您都可以解决您的问题,而不必强迫自己处理多个数据存储的复杂性和成本。