目标应用程序是一个中等规模的网站,每小时可支持数百到数千名用户,可以选择扩展到这个范围。数据模型相当简单,缓存潜力非常高(读取与编辑操作的比例约为10:1)。
在选择基于SQL的关系数据存储区与NoSQL选项(例如HBase和Cassandra)之间应该考虑什么?
答案 0 :(得分:17)
对我来说,你没有任何特别的问题需要解决。如果您需要ACIDity,请使用数据库;如果你不这样做,那没关系。最后,只需构建您的应用程序。让我引用NoSQL: If Only It Was That Easy:
值得注意的是,如果你因为无法选择数据库而无法制作超级棒的东西,那么你做错了。如果您了解mysql,请使用它。在您确实需要时进行优化。像k / v商店一样使用它,像rdbms一样使用它,但为了上帝的缘故,建立你的杀手级应用程序!这些对大多数应用程序都不重要。 Facebook仍然使用MySQL,很多。维基百科使用MySQL,很多。 FriendFeed使用MySQL,很多。 NoSQL是一个很棒的工具,但它肯定不会成为你的竞争优势,它不会让你的应用程序变得热门,而且最重要的是,你的用户不会对任何这些产品大肆宣传。
答案 1 :(得分:1)
Digg在这个问题上有一些interesting articles。从本质上讲,您将处理负担转移到写入而不是读取,这在高度可伸缩的应用程序中可能是理想的。 Cassandra特别具有高度可用性。
简单地说,卡桑德拉是一个 带有BigTable的分布式数据库 在Dynamo上运行的数据模型 基础设施。它是面向列的 并允许存储 相对结构化的数据它有一个 完全分散的模型;每个节点 是相同的,没有单一的 失败点。这也是非常的 容错;数据被复制到 多个节点和跨数据 中心。卡桑德拉也非常 弹性;读写吞吐量 随着新机器的增加而线性增加 加入。
答案 2 :(得分:1)
我喜欢Ian Eure的经验法则:“如果你在数据库之上部署memcache,你就会发明自己的ad-hoc,难以维护的NoSQL系统。”
http://www.rackspacecloud.com/blog/2010/02/25/should-you-switch-to-nosql-too/
答案 3 :(得分:0)
当你说,数据模式很简单时,这可以代表NoSQL选项。
当你有足够的属性来进行选择,繁重的事务加载或复杂的表结构时,这将代表传统的SQL表。
我建议找出使用一个或两个NoSQL数据库实现数据模型的难度。如果这很困难,您还可以创建一个经典的表模式来与之比较。
当您遇到NoSQL问题时,这可能代表SQL选项。但也可能是,使用NoSQL可以更好地处理繁重的负载 - 但也可能是一个好的SQL数据库可以扩展......
也可以使用简单的代理服务器进行缓冲...
在困难方面,也可以考虑混合使用NoSQL和SQL。