Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2015-12-07 #19

Open
yorkie opened this issue Dec 7, 2015 · 0 comments
Open

2015-12-07 #19

yorkie opened this issue Dec 7, 2015 · 0 comments
Labels

Comments

@yorkie
Copy link
Owner

yorkie commented Dec 7, 2015

今日GET

  • loopback中,可以使用{"root": true}来设置返回传入的对象本身(来自于团队小伙伴)
  • loopback中,关系belongsTo中的foreignKey是当前模型的字段名,如:userId, commentId
  • 星巴克的瓶装饮料很解困
  • 原来_京东_送货也有不能当日抵达的

如何使用 MongoDB 构建一个关系图谱?

由于这两天在给某个项目中加入社交相关联的东西,于是记录一下学习的成果

原来其实对文档数据库与关系数据库一直含含糊糊地,弄不清楚。知道昨天看了一篇文章:

neo4j-vs-mysql-vs-mongodb: http://addisonlee.azurewebsites.net/neo4j-vs-mysql-vs-mongodb/

分别对比了文档数据库、关系数据库以及图谱数据库,也直接引出了我今天的思考。每一类型的数据库跟它的数据结构有直接关系,由于数据结构的不同,会出现不同的用法。简单地说:

  • 关系数据库 就是一个带范型的集合,比如:List, List等等
  • 文档数据库 可以看成是一个个的对象组成,比如:new User(), new Order()
  • 图谱数据库 我觉得只是在文档数据库的基础上,存储了从对象A到对象比的一个动作

中途我参考了一个叫 Wordnik 的例子,从这个团队的名字就能看出,他们是做字典应用的,从他们的 Keynote 中,我大概了解到图谱(graph)作为一种通用的数据结构,一般有以下的用途:

  1. 地图应用,主要是查看从地点1到地点2中间的路径,属于路径问题
  2. 字典应用,主要是查看可以从单词a拓展到哪些其他相关的单词,属于关联性问题

他们在视频里讲了很多废话,我就直接上他们的数据结构:

{
  "id": "cat+context",
  "tn": [
    { "weight": 1, "id": "dog+context" },
    { "weight": 2, "id": "yorkie+context" }
  ]
}

当然具体的数据是我瞎编的,其实他们的实现跟我之前的想法大致一样,不过还是有些出入,我的思维可能会更偏关系型数据库一些:

[{ "source": "cat+context"
,  "linkTo": "dog+context" },
{  "source": "cat+context"
,  "linkTo": "yorkie+context" }]

所以,前者才是文档数据库正确的打开方式

于是我参考了 Wordnik 的方案,把id从指向的是一个单词,换为指向人名(username):

{
  "id": "jobs",
  "tn": [
    { "type": "like", "id": "yorkie" },
    { "type": "hate", "id": "bill" }
  ]
}

这样一个简单的图谱数据结构就在 MongoDB 中定义完成了。

@yorkie yorkie added the Diary label Dec 7, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant