虽然我没有使用Neo4j,而是使用TitanDB(IBM Graph),但由于我是图形数据库的新手,我现在使用Neo4j文档中建议的模式建模基本新闻源。
http://neo4j.com/docs/snapshot/cypher-cookbook-newsfeed.html
完全阅读完所有文档后,我发现这些数据库的运行方式存在几个主要差异。
在链接中描述的模型中,每个用户posts
都存储为vertexes
,由edges
相互连接,形成一个由每个用户发出的状态更新的长列表user
顶点。
虽然根据Neo4j的功能这是有道理的,但我知道TitanDB具有vertex-centric
索引功能,详见此处:
http://s3.thinkaurelius.com/docs/titan/1.0.0/indexes.html
现在,我正在尝试确保查询给定用户的Feed是最佳的,对于包含大量用户的大型图表,以及大量永久保留的帖子或状态更新。因此,我希望避免遍历所有用户朋友的所有帖子,然后最终订购和限制它们,只是为了获得用户Feed的前15项。
因此,我不确定Neo4j文档中描述的模型是否真的是与TitanDB一起使用的模型,所以我的问题如下:
post
顶点直接连接到发布它的user
,并在每个vertex-centric
属性上使用time
索引posted
边缘?我真的在建立,索引和检索Titan DB中的基本新闻源方面提出了一些一般性建议。提前谢谢。
答案 0 :(得分:2)
基本架构看起来并不是一种糟糕的方法,但基于这一用例很难做出正确的判断。
解决索引问题的最简单方法可能是对比特进行非规范化 - 将用户ID存储为post
顶点上的属性,并在[user, timestamp]
对上创建和索引。
以顶点为中心的索引可能对您有所帮助,但在提议的模型中却没有 - 您需要将post
建模为边,节点是顶点,这可能会使其他遍历变得相当尴尬。此外,IBM Graph在其当前版本中不支持以顶点为中心的索引。