python - 对于以下用例,我应该使用 Redis 还是 Neo4J?

标签 python django postgresql neo4j redis

我正在构建一个社交网络,其中每个用户都有 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显示帖子时,调用SMEMBERSSSCAN获取好友列表,然后为每个好友调用LRANGE获取前 N 个帖子 ID。

关于python - 对于以下用例,我应该使用 Redis 还是 Neo4J?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40813514/

相关文章:

Python:如何正确处理 pandas DataFrame 中的 NaN,以便在 scikit-learn 中进行特征选择

python - Django PostgreSQL IntegerRangeField 和 update_or_create

postgresql - 在 SELECT 生成的行上循环 - 循环变量不存在?

postgresql - Wiki.js 未运行。数据库连接错误

java - Hikari DB 连接最大池理解和调优

python - 在python中使用opencv显示的图像对于屏幕而言太大

javascript - 使用 Python 'runJavascript' 输入更新谷歌地图标记位置

python - 使用中间件为django中的 View 函数添加参数

jquery - Django 评级和 Jquery 集成?

python - Django Project Live 不收集静态