我正在构建一个社交网络,其中每个用户都有 3 个不同的个人资料 - 个人资料 1、个人资料 2 和个人资料 3。
这是我的用例:
用户 A 在个人资料 1 中关注用户 B、C 和 D。用户 A 在个人资料 2 中关注用户 C、F 和 G。用户 C 在个人资料 3 中关注用户 A 和 E。
另一个问题是,每个个人资料中的任何用户都需要查看他们在各自个人资料(无论是个人资料 1、2 还是 3)上关注的用户的最新或(比如前 N 个)帖子。
我们如何才能最好地存储以上信息?
上下文: 我正在使用 Django 框架和 Postgres 数据库来存储用户的个人资料信息。用户的帖子存储在 Cloud CDN 上并从中检索。
实现这些用例的最佳方式是什么,即选择最适合该场景的技术?可扩展性是在这里发挥作用的另一个重要因素。
最佳答案
Neo4J 是一个图形数据库,适用于多跳关系搜索。比如说,你想获得 A 的兄弟的 friend 的姐姐的前 N 个帖子...... AFAIK,它是一个独立的实例,你不能在多个节点上分区你的数据。否则,两个人之间的关系可能会跨机器。
Redis 是一个key-value 存储,适合key 搜索。假设你想获取A的好友列表,或者获取A的前N个列表。你可以有一个Redis集群,将你的数据分布在几台机器上。
哪个更好?这取决于您的情况。看来您不需要多跳关系搜索。所以 Redis 可能会更好。
你可以有一个SET
来保存每个人的好友列表。并有一个 LIST
来保存每个人的帖子 ID。当需要为用户A显示帖子时,调用SMEMBERS
或SSCAN
获取好友列表,然后为每个好友调用LRANGE
获取前 N 个帖子 ID。
关于python - 对于以下用例,我应该使用 Redis 还是 Neo4J?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40813514/