我正在制作一个具有社交网络功能的系统。我想知道您对最适用于某些功能的持久性技术的看法。
让我们来看看系统的三个基本特征:
对于上述每个特征,理想的持久性技术是什么?如果一些答案是关系数据库,为什么最好选择一个关系数据库而不是NoSQL?如果答案是NoSQL,那么最推荐的NoSQL是什么?
很抱歉有很多问题,但我正在研究我可以选择的选项,并希望听取那些已经理解该主题的人的意见,以便我不做出明智的决定。
注意:如果您可以改进问题的标题,请随时这样做。
答案 0 :(得分:4)
在开始使用案例之前,NoSQL可以解决several problems。无论你得到什么答案,都要考虑这些问题:
现在来看你的用例:
User Stream
=> NoSQL绝对可以解决这个问题,因为这里没有100%的一致性要求。话虽如此,你提到Facebook很有趣,因为他们依靠巨大的MySQL农场来解决这个问题:)
Application and security logs
=> NoSQL非常擅长存储日志,实际上许多数据结构是某些NoSQL解决方案都是在之上构建的日志类似于结构:Log-Structured Merge-Tree
在Google BigTabe中使用,卡珊德拉等人。 Plus日志可以变得非常庞大,因此使用NoSQL
Statistics of the application
=> 这里没有提供太多细节,但NoSQL绝对可以解决displaying stats
。
现在你的问题 应该你去NoSQL 。说实话:
如果大多数NoSQL大师都不再使用他们的面具,他们都会同意开发人员日常解决的问题 MOST ,而且可以通过SQL解决方案解决,例如PostgreSQL, MySQL等等。它上面有一些很酷的Redis缓存层。只有一小部分问题真的会从NoSQL中受益。
如果决定使用NoSQL,我会推荐基于Erlang的解决方案(Riak,CouchDB),因为NoSQL,容错DB应该具有极其强大,灵活且自然分布的基础=>比如Erlang OTP。简单就是王道。当然,他们拥有大多数语言的客户,所以如果你不想,你甚至不需要知道如何拼写Erlang。