我已经为社交网络创建了一个图形模型,并且需要一些关于缩放设计的具体建议.请原谅这些问题,但我没有找到很多明显的例子......
注意:状态更新和活动节点/关系是链接列表 - 最新的条目不断放在列表的顶部.
链接列表允许生成新闻源,但每个用户可能有数百条记录 - 我认为即使数据按日期降序排列,限制子句也不够.我是否必须拥有一个单独的链接列表,该列表仅包含最新的10个状态/活动更新)并不断替换该列表上的头部以获得更好的活动源生成,或者将一个列表正确排序并完成工作(使用限制条款)
这些节点都具有属性(带有内容,ID等的json数据) - "全局"索引如何在这里发挥作用,以便我可以找到喜欢Depeche Mode的用户而无需等待一生的结果?我知道如何将一个节点添加到索引,只是想知道我是否错过了这里的部分图片..
安全性 - 登录和密码..我认为图形数据库可以存储它们,但我认为这是一个安全风险 - 将它保存在postgres等会更好吗?
您将如何改进此模型以处理可伸缩性?想象一下,有2000万用户正在敲打这个......
想象一下4000万用户 - 在可扩展性方面,这个模型出了什么问题?
我最近一直在测试Titan-Cassandra和OrientDB,我想到了一个问题.
我只是想知道graphDBs如何在不同的集群中分片图形,以及它们的查询接口如何支持在分片图形上查询,例如在两个节点之间找到最短路径.
我知道Gremlin 为其groupby函数实现了Mapreduce模式.
但我想更深入地了解查询分片的关系以及两个DB如何处理分片图上的查询.特别是,我对OrientDB的SQL接口如何支持跨分片图的查询感兴趣.
我知道Neo4j反对根据我之前提出的问题所建议的分片.
我一直在努力想出一个我一直在努力的个人网络应用程序的数据库后端.由于我在数据中需要的灵活性,关系数据库是不可行的,并且可能存在某种形式的文档存储.当我了解图形数据库时,我觉得这将是完美的.
但是,我遇到了一个问题:我需要能够以某种方式定义一个三向关系.我还没有确定数据库,但我一直在修补Neo4j,所以我将使用Cypher来描述这个问题.
基本上,我从这开始:
(a:N)-[r:E]->(b:N)
Run Code Online (Sandbox Code Playgroud)
我需要的是一种将多个节点不仅与a和b相关联的方法,还包括r.这些其他节点将存储有关所有3的不同信息.我认为可能只有两种方法来处理:将关系存储在自己的节点中或存储对包含信息的节点的引用并创建伪边缘.我认为前者可能是一个更好的主意,给我们更像这样的东西:
(a:N)<-[:E]-(r:R)->[:E](b:N)
(s:S)->(a)
(s)->(r)
(s)->(b)
Run Code Online (Sandbox Code Playgroud)
所以,现在,这会导致查询数据的问题.使用图形数据库的重点是能够遍历图形.如果我做这样的事情,有没有办法在N型节点之间递归遍历?处理这个问题的正确方法是什么?我已经想到了几种不同的处理方式,但是所有这些都有它们的缺点.是否有一个特定的图形数据库本机支持这种类型的功能?
UPDATE
使用原始代码,我能够使用以下代码递归遍历节点:
MATCH (a:N)-[:E*]->(b:N)
RETURN a,b
Run Code Online (Sandbox Code Playgroud)
然而,一旦我将边缘拉出到超边缘,我无法弄清楚是否有一种方法能够递归地遍历图形到未确定的深度,因为我将交替节点类型.我正在寻找一些类似的东西
MATCH chain=((a:N)-[]->(r:R)-[]->(b:N))*
RETURN [nodes of type N along the chain]
Run Code Online (Sandbox Code Playgroud)
如果答案只是在创建超边缘时也在a和b之间创建边缘,那么我的问题就变成:有没有一种好方法可以确保边缘和超边缘一起被移除?基本上,让两者都感觉像是一种解决方案,而不是一种实际的解决方案.
我们使用的是使用Kryo 2.17的Storm 0.9.1,我们有模块将数据插入到内部使用Kryo 2.21的titan图数据库中,导致以下问题:
了java.lang.RuntimeException:com.esotericsoftware.kryo.KryoException:java.lang.IllegalArgumentException异常:不能com.thinkaurelius.titan.graphdb.types.TypeAttributeType场com.thinkaurelius.titan.graphdb.types.TypeAttribute.type设置为COM .thinkaurelius.titan.graphdb.types.TypeAttribute序列化跟踪:type(com.thinkaurelius.titan.graphdb.types.TypeAttribute)
我们如何解决这个问题,因为在风暴中将Kryo升级到2.21导致没有这样的方法错误.我们还尝试在Titan图数据库中将Kryo降级到2.17,但我们面临与上述相同的问题.
我正在使用Gremlin查询存储在TitanDB中的图形.
该图包含具有属性的用户顶点,例如"描述",以及表示用户之间关系的边.
我想使用Gremlin来获取1)用户的属性和2)与其他用户的可能关系.例如,我可以使用以下查询来获取描述中包含"开发人员"一词的所有用户以及源自或定位这些用户的标签"关系"的边缘:
g.V('description',CONTAINS,'developer').as('user').bothE.as('relationship').select
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.然而,问题是某些用户(还)没有任何关系.上述查询将忽略这些用户(尽管他们的描述包含'开发人员'),并且只会返回至少有一个关系的用户.
有没有办法选择描述中包含"开发者"的所有用户,如果存在,还可以选择他们的关系?
Titan中的titan-cassandra-es.properties文件是什么?
我将GraphOfTheGodsFactory(版本0.5.4)创建方法运行到路径'tmp/titan',但是没有生成titan-cassandra-es.properties文件.
如何访问路径tmp/titan中创建的图形以进行可视化.我尝试了代码
private static final String DB_PATH = "conf/titan-config.properties";
TitanGraph g = TitanFactory.open(DB_PATH);
Run Code Online (Sandbox Code Playgroud)
然后,我在index.jsp中调用了这个java来使用cytoscape显示节点.但是,我最终得到了错误消息
在jsp中引发异常:后端速记未知:conf/titan-config.properties
这意味着什么?
我正在努力与格雷姆林交手.彻底阅读了文档后,我似乎仍然在概念上苦苦思索.
我正在创建一个基本的新闻源,遵循Neo4j文档中的模型:
http://neo4j.com/docs/snapshot/cypher-cookbook-newsfeed.html
我实际上正在使用titandb,但遵循上面显示的相同类型的原则/架构.
到目前为止,我已经创建了一个user
顶点图,它通过friend
边连接.
我可以添加一个新的post
顶点并通过posted
边连接到user
顶点,如下所示:
def activity = graph.addVertex(T.label, "post");
activity.property("post_id", post_id);
activity.property("time", time);
activity.property("body", body);
def g = graph.traversal();
def user = g.V().hasLabel("user").has("userid", userid).next();
user.addEdge("posted", activity, "time", time);
Run Code Online (Sandbox Code Playgroud)
但是,我需要能够在一个Gremlin脚本中执行以下操作:
post
如上所述创建新顶点.posted
之间的旧边.但只有当一个帖子存在.user
post
post
顶点附加到新顶点.user
posted
post
顶点,则post
通过next
边将其附加到新添加的顶点.最终为每个用户创建长流量的帖子.我一直在玩,使用反复试验,现在好像几个小时,似乎无法理解它.
任何帮助将不胜感激.
我在DynamoDB上使用Titan.我有一个没有周期的有向边图.给定一个顶点,我需要从该顶点辐射出的所有路径.路径仅表示从给定顶点辐射出的每条路径上的顶点列表.
我只是无法理解Gremlin和Groovy,所以我希望Java中存在一个解决方案.
或者是否有可以转换为Java的Gremlin查询?
我需要将SNOMED CT本体导入图形数据库,在本例中为Neo4J,但它最终可能是另一种选择.
但是,为了实现这一点,我无法找到SNOMED CT底层关系数据模型的清晰描述.或者至少是简化的SQL视图,它们以可以映射到图形数据库的方式公开实体关系.
我非常感谢任何有关此事的指导或以前的经验.
我有两个顶点之间的边缘8392 ---> 532500664,标签"has"仍然是
g.V(8392).out("has").has("id",532500664)
Run Code Online (Sandbox Code Playgroud)
不工作告诉我如何实现这一目标?
注意= g是图遍历对象