我有一个将关系信息存储在 MySQL 表中的应用程序(contact_id、other_contact_id、strength、recorded_at)。如果我需要做的只是显示联系人的关系是谁,甚至生成两个联系人的相互联系人列表,这很好。
但现在我需要生成如下统计数据:“2011 年 1 月,强度为 3 或更高的双向连接的总数是多少”或(假设每个联系人都是一个组的一部分)“哪个组的连接数最多到其他团体等
我很快发现生成这些统计信息的 SQL 很快就变得笨拙了。
所以我写了一个脚本,对于任何给定的日期,它都会在内存中生成一个图表。然后我可以针对该图表运行我想要的任何统计数据。更容易理解,一般来说,性能也更高——除了生成图形部分。
我的下一个想法是缓存这些图表,以便在需要运行新统计数据时调用它们(或生成以后的图表:例如,对于今天的图表,我采用昨天的图表并应用自昨天以来发生的任何更改)。我尝试了 memcached,它在图表增长 > 1 MB 之前效果很好。
所以现在我正在考虑使用像 Neo4J 这样的图形数据库。
唯一的问题是,我没有一张图表。或者我会,但它会随着时间的推移而变化,我需要能够用不同的参考时间来查询它。
那么,我可以:
- 在 Neo4J 中存储多个图形并分别重新检索/交互它们?然后,我将为每个日期创建并存储单独的社交图。
或者
- 为每条边添加有效的时间戳并适当地过滤图形:因此,如果我想要“5 月 1 日”的图形,我只会遵循“5 月 1 日”之前创建的两个节点之间的最新边(如果所有边是在 5 月 1 日之后创建的,那么这些节点将不会连接)。
我对图形数据库很陌生,所以任何帮助/指针/提示都将不胜感激。