应用程序功能持久性替代 - NoSQL或RDBMS?

时间:2011-10-09 01:13:22

标签: php mysql nosql persistence rdms

我正在制作一个具有社交网络功能的系统。我想知道您对最适用于某些功能的持久性技术的看法。

让我们来看看系统的三个基本特征:

  • 用户流 - 应用程序中的所有用户活动将被记录,然后显示在用户个人资料中,就像Facebook墙一样。这将是该应用程序的主要关注点之一,它需要尽可能提供最佳性能。
  • 应用程序和安全日志 - 以下是存储应用程序错误的位置,以及其他与用户相关的数据,例如:IP,地理空间位置,历史记录日志等。此部分将用作附加安全层。
  • 显示在其上的应用程序,用户和广告的统计信息。

对于上述每个特征,理想的持久性技术是什么?如果一些答案是关系数据库,为什么最好选择一个关系数据库而不是NoSQL?如果答案是NoSQL,那么最推荐的NoSQL是什么?

很抱歉有很多问题,但我正在研究我可以选择的选项,并希望听取那些已经理解该主题的人的意见,以便我不做出明智的决定。

注意:如果您可以改进问题的标题,请随时这样做。

1 个答案:

答案 0 :(得分:4)

在开始使用案例之前,NoSQL可以解决several problems。无论你得到什么答案,都要考虑这些问题:

  • 您是否希望您的系统依赖 BigData
  • 分布式会受益吗?
  • 停机时间可以使用多少?
  • 您是否愿意在不同的数据中心或300个较小的盒子中支持3个巨大的盒子?

现在来看你的用例:

  • 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。