虽然我不使用Neo4j,而是使用TitanDB (IBM Graph),由于我是图形数据库的新手,我已经使用Neo4j文档中建议的模式建模了一个基本的新闻提要,现在
http://neo4j.com/docs/snapshot/cypher-cookbook-newsfeed.html在充分阅读了所有文档后,我意识到这些数据库的操作方式之间存在几个关键差异。
在链接中描述的模型中,每个用户posts
被存储为vertexes
, edges
相互连接,形成从每个user
顶点发出的状态更新的长列表。
考虑到Neo4j的功能,这是有意义的,我知道TitanDB有vertex-centric
索引功能,在这里详细描述:
现在我正在努力确保查询给定的用户提要是最佳的,对于一个有很多用户的大图形,以及大量永久保存的帖子或状态更新。因此,我希望避免为了获取用户提要的前15个条目而遍历用户所有朋友的所有帖子,然后最终订购并限制它们。
因此,我不确定Neo4j文档中描述的模型是否真的是与TitanDB一起使用的最佳模型,所以我的问题如下:
- Neo4j文档中描述的模型对于TitanDB中的快速新闻提要检索是最佳的吗?
- 如果是这样,我需要创建哪些索引才能以最佳方式检索用户提要?
- 如果不是,我最好将每个
post
顶点直接连接到发布它的user
,并在每个posted
边的time
属性上使用vertex-centric
索引?
我真的是一些关于建模,索引和检索在泰坦数据库的基本新闻源的一般建议。
基本模式看起来不像一个坏方法,尽管基于这一个用例很难做出一个好的判断。
解决索引问题的最简单的方法可能是反规范化-将用户id存储为post
顶点的属性,并在[user, timestamp]
顶点上创建和索引。
以顶点为中心的索引可能会对您有所帮助,但在建议的模型中没有帮助-您需要将post
建模为边,节点为顶点,这可能会使其他遍历变得相当尴尬。此外,在当前版本中,IBM Graph不支持以顶点为中心的索引。