我正在向现有的应用程序中添加一些“社会性”类型的功能。有有限的节点和边缘类型#。总的来说,数据本身相对较小(每种类型的节点为50,000至70,000 ),它们之间将有许多边(关系)(几乎所有方向的)。
我知道,用SDF商店(如BrightstarDB)或类似微软的三位一体(或实际上是许多noSQL选项)来表示这一点是相对容易的。
我认为,让这成为一个独特的用例的是,每个关系都有一个与其相关的时间框架(开始日期和结束日期)。现在,我正在考虑将其存储在关系结构中,并处理“遍历图”所带来的麻烦,但我正在寻找一种更好的方法(在数据结构和服务器方面)的建议:
Column
================
From_Node_ID
Relationship
To_Node_ID
StartDate
EndDate欢迎任何建议或想法。
发布于 2012-11-07 15:26:21
你应该去看看Neo4j-开源图形数据库。这是一个成熟的、得到充分支持的项目。它有一个很好的书面更新的文件。它基于java,但是有几个用于ruby、jruby、php、python、c#的客户端库.它作为嵌入式( jar文件)或服务器工作(您可以使用基于REST的结构通过HTTP连接和操作)。最后,它是基于磁盘的事务性的。
在Neo4j中,可以将属性分配给节点和关系。这意味着,在您的示例中,您可以将两个节点与一个具有名为"StartDate“和"EndDate”属性的关系或任何您希望的其他属性连接起来。
例如,如果将用户作为节点,则可能有一个名为"interested_in“的关系,您可以将UserA与UserB连接到关系"interested_in”,并将StartDate指定为创建关系的日期,稍后您可能会指定EndDate属性作为"interested_in“关系结束的日期。
它看起来可能是:
UserA -[interested]-> UserB
StartDate:20121102
EndDate:20121107用户(我指的是节点)可以通过向来自现有数据库的Neo4j节点提供"id“属性来连接到现有的数据库。或者您可以复制所有或多个属性(如姓名、姓氏、出生日期等)。对于Neo4j中的节点,但这一次您可能需要在每次数据存储中发生更新时同步Neo4j中的用户和数据库。
在Neo4j文档中有几个示例数据模型
还有InfiniteGraph,它类似于Neo4j,被称为“分布式图形数据库”,但我对它没有任何经验。对于您的情况(每种节点类型为50,000到70,000 ),Neo4j将是一个完美的匹配,它支持多达数十亿个节点和关系。
https://softwareengineering.stackexchange.com/questions/168004
复制相似问题