我有一个应用程序,它在MySQL表中存储关系信息(contact_id、other_contact_id、strength、recorded_at)。如果我只需要显示联系人的关系或生成两个联系人的共同联系人列表,则这很好。但现在我需要生成像“2011年1月强度为3或更高的2向连接的总数”这样的统计数据,或者(假设每个联系人都是某个群组的一部分)“哪个群组与其他群组的连接最多”等等。
我很快发现生成这些统计的SQL变得非常难以管理。因此,我编写了一个脚本,针对任何给定的日期,它将在内存中生成一个图形。然后,我可以运行任何我想要的状态来针对该图形运行。更容易理解,并且通常性能更好-除了生成图形部分外。
我的下一个想法是缓存那些图形,这样我就可以在需要运行新状态(或生成稍后的图形:例如对于今天的图形,我会拿昨天的图形并应用从昨天开始发生的任何更改)时调用它们。我尝试过使用Memcached,直到图形增长> 1 MB。
现在我正在考虑使用像Neo4J这样的图形数据库。唯一的问题是,我不只有一个图形。或者说,虽然只有一个图形,但它是随着时间变化而变化的,并且我需要能够使用不同的参考时间查询它。
那么,我可以:
- 在Neo4J中存储多个图形并单独检索/交互吗?然后,我将为每个日期创建和存储单独的社交图形。 - 或者,在每个边缘上添加有效的时间戳,并相应地过滤图形:因此,如果我想要一个“5月1日”的图形,则只会在“5月1日”之前创建的最新边缘之间遵循两个节点之间的边缘(如果所有边缘都是在5月1日之后创建的,则这些节点将不连接)。
我对图形数据库还比较陌生,因此任何帮助/指针/提示都将不胜感激。
我很快发现生成这些统计的SQL变得非常难以管理。因此,我编写了一个脚本,针对任何给定的日期,它将在内存中生成一个图形。然后,我可以运行任何我想要的状态来针对该图形运行。更容易理解,并且通常性能更好-除了生成图形部分外。
我的下一个想法是缓存那些图形,这样我就可以在需要运行新状态(或生成稍后的图形:例如对于今天的图形,我会拿昨天的图形并应用从昨天开始发生的任何更改)时调用它们。我尝试过使用Memcached,直到图形增长> 1 MB。
现在我正在考虑使用像Neo4J这样的图形数据库。唯一的问题是,我不只有一个图形。或者说,虽然只有一个图形,但它是随着时间变化而变化的,并且我需要能够使用不同的参考时间查询它。
那么,我可以:
- 在Neo4J中存储多个图形并单独检索/交互吗?然后,我将为每个日期创建和存储单独的社交图形。 - 或者,在每个边缘上添加有效的时间戳,并相应地过滤图形:因此,如果我想要一个“5月1日”的图形,则只会在“5月1日”之前创建的最新边缘之间遵循两个节点之间的边缘(如果所有边缘都是在5月1日之后创建的,则这些节点将不连接)。
我对图形数据库还比较陌生,因此任何帮助/指针/提示都将不胜感激。