(Neo4J或mysql)和redis - 社交网络

时间:2013-06-04 21:14:10

标签: mysql redis neo4j social-networking

构建一个强调社交网络的音乐应用程序 - 假设有大约10-15个节点(用户,艺术家,歌曲等)。用PHP编写,将使用Neo4J的REST API。

对于1K或10K或100k或1M用户......

neo4j是否能够在提供静态数据(redis前端)方面同样替换mysql和preform?写入怎么样(例如用户编辑个人资料)?

我在考虑最初使用MySQL和Neo4j。一些谷歌搜索指出灵活性较低,维护较多。其他人说“像魅力一样”。想法?

谢谢。

1 个答案:

答案 0 :(得分:14)

  

neo4j是否能够在提供静态数据方面同样替换mysql和preform(由redis提供)

不确定你在这里问什么,但我会尝试分开。

如果你想将MySQL与neo4j进行比较,没有真正的比较,因为它们是不同的产品。使用一个而不是另一个是基于需求,约束和SLA,而不是因为一个比另一个好。如果您需要持久性,持久性和最大的事务完整性以及一些不错的数据库管理工具,请使用MySQL。如果您想使用内存图存储相互关联的社交兴趣以便快速检索,并且您愿意为性能牺牲一些可靠性,请使用neo4j。

  

......在提供静态数据方面表现同样出色......

首先,不要使用数据库来提供静态数据;对于半复杂对象(键/值,集合,散列),请使用redis;对于像images / css / js这样的静态内容,请使用像nginx这样的反向代理。

  

我在考虑最初使用MySQL和Neo4j。一些谷歌搜索指出灵活性较低,维护较多。

忘记这些意见;每个人都有一个。这些文章是否讨论了他们试图实现的要求,约束和服务质量,但未能这样做,为什么?我愿意打赌他们的限制可能与你的不同。没有坏的解决方案;唯一糟糕的选择;这就是为什么IT部门的工作充足,因为我们大多数人正在修复别人的愚蠢决定。 专注于您所需要的,提前计划,并根据该期限做出选择。

所以,无论如何,回到你的问题,如果是我,并根据你提供的有限信息,我会使用MYSql和neo4j,因为我喜欢可靠性和持久性的重要数据库操作(配置文件更新,cc购买等),而不太重要的变化,如社交关系,兴趣等的更新,仍然在数据库中持久存在,但也被异步推送到图表。如果某些更新失败或陷入困境,没什么大不了的,Suzie就不会从她的朋友那里得到最新的播放列表或喜欢,但至少她的信用卡信息是安全的。

当然,使用MySql和neo4j意味着更多的维护,但是你可以通过放松MySQL和图形之间的耦合来最小化它。换句话说,不要在neo4j中复制数据模型,这样做会造成维护噩梦,因为任何数据库更改都意味着更改图形。在neo中,仅存储引用标识符和非常基本的高级信息(user_id,名/姓,album_id,album_name),足以生成主级屏幕。如果用户深入细节级别屏幕(单击用户,相册等),请转到数据库或redis,并获取这些对象的完整详细信息。在使用这两种产品时,这是一个很好的平衡,更多的工作,但如果做得对,肯定是可以管理的。

这里有一些额外的信息,希望它有帮助...
Is it a good idea to use MySQL and Neo4j together?