2015-12-07
yorkie opened this issue · 0 comments
yorkie commented
今日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到地点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 中定义完成了。