【问题标题】:Application Features Persistence Alternatives - NoSQL or a RDBMS?应用程序特性持久性替代方案 - NoSQL 还是 RDBMS?
【发布时间】:2011-10-09 01:13:21
【问题描述】:
我正在制作一个具有社交网络某些功能的系统。我想知道您对最适合某些功能的持久性技术的看法。
让我们来看看系统的三个基本特征:
- 用户流 - 所有应用程序中的用户活动将被记录,然后显示在用户个人资料上,就像 Facebook 墙一样。这将是应用程序的主要关注点之一,并且它需要尽可能地具有最佳性能。
- 应用程序和安全日志 - 这里是存储应用程序错误的位置,以及其他与用户相关的数据,例如:IP、地理空间位置、历史日志等。这部分将用作额外的安全层。
- 应用程序、用户和广告的统计数据。
对于上述每个特征,理想的持久性技术是什么?如果一些答案是关系数据库,为什么最好选择关系数据库而不是 NoSQL?如果答案是 NoSQL,那么最推荐的 NoSQL 是什么?
很抱歉有很多问题,但我正在研究我可以做出的选择,并希望听到那些已经了解该主题的人的意见,因此我不会做出草率的决定。
注意:如果您可以改进问题的标题,请随时这样做。
【问题讨论】:
标签:
php
mysql
nosql
persistence
rdbms
【解决方案1】:
在进入用例之前,NoSQL 可以解决several problems。不管你在这里得到什么答案,想想这些问题:
- 您希望您的系统依赖于BigData吗?
- 它会从分布式中受益吗?
-
停机时间多少合适?
- 您更愿意在不同的数据中心支持 3 个大盒子,还是支持 300 个小盒子?
现在到您的用例:
NoSQL 绝对可以解决这个问题,因为这里没有 100% 的一致性要求。话虽如此,你提到 Facebook 很有趣,因为他们依靠庞大的 MySQL 农场来解决这个问题:)
-
Application and security logs =>
NoSQL 非常擅长存储日志,事实上,一些 NoSQL 解决方案建立在 之上的许多数据结构类似于日志结构:Log-Structured Merge-Tree 是/曾经在 Google BigTabe、Cassandra 中使用, 和别的。 Plus 日志可以增长到相当大,因此使用 NoSQL 更容易扩展大小
-
Statistics of the application =>
这里没有提供太多细节,但是NoSQL绝对可以解决displaying stats。
现在你的问题是应该你去NoSQL。说实话:
如果大多数 NoSQL 专家都摘下他们的面具,他们都会同意开发人员日常解决的大部分问题可以通过 SQL 解决方案来解决,例如 PostgreSQL, MySQL 等。在它上面有一些很酷的 Redis 缓存层。只有一小部分问题会真正受益于 NoSQL。
如果您决定使用 NoSQL,我会推荐基于 Erlang 的解决方案(Riak、CouchDB),因为 NoSQL、容错数据库应该具有极其强大、灵活和自然分布的基础=> 比如 Erlang OTP。加上简单才是王道。当然,他们有大多数语言的客户端,所以如果你不想知道如何拼写 Erlang,你甚至不需要知道。