战略问题:混合使用关系型和非关系型数据库?

14
近来,非关系型数据库(如CassandraCouchDBHypertableMongoDBProject VoldemortBigTable等)引起了很多反对派的讨论。就我而言,最大的优势在于可扩展性、性能和简单性。
我正在认真考虑建议在我们下一个项目中使用一些非关系型数据库。然而,有些团队成员是关系型数据库的狂热爱好者,因此仅凭情感原因就可能无法说服他们进行硬性转换。此外,当涉及到复杂数据模型时,我个人仍然相信关系型数据库的强大能力,以及它们的低级别一致性执行机制。
现在我的问题是:我想知道是否有人会认真考虑在新项目中同时使用关系型数据库和非关系型数据库:复杂但不需要高性能的数据模型仍将使用关系模型和数据库实现,而所有需要高性能但简单的模型则将使用非关系型数据库实现。此外,这种软性范式转变比硬性转变更容易推销给一些高度情绪化的团队成员。
有人会推荐这种方法吗?还是你更倾向于推荐黑白分明的方法,即关系型或非关系型?欢迎所有意见!

顺便问一下,这种混合使用Spring和Hibernate/JPA是否有效?

3个回答

14

Rob Conery最近写道他使用MongoDB和MySQL构建其流行的Web应用程序TekPub的经验,突出了两者的优点:

高读取量的内容(帐户信息、制作和剧集信息)非常适合像MongoDb这样的“立即”系统。昨天发生的事情非常适合关系型系统。

在高层次上,Rob将他们的应用程序数据分为两个范围:运行时数据和历史数据。例如,用户购物车的当前状态非常适合保留在MongoDB中。它是一个不断变化的对象块。为了保持购物车进出记录的历史记录;何时发生;结帐状态对于MySQL中的关系型表格数据非常有用。

他总结道:

它完美地工作。我们的设置让我感到非常满意。它非常容易维护,我们可以像其他解决方案一样备份它,并且我们在需要时拥有所需的数据。

更新于2016年5月(6年后)

在过去的6年中,这只变得更加真实。现在,常见的是NoSQL数据库驱动事务存储,传统的关系型数据库驱动分析数据库。


感谢您的参与,这篇博客写得非常棒。 - Ta Sas
然而,文章已经消失了。似乎Rob博客上的所有nosql文章都不见了。您是否有一些运行时间超过一年且仍然运行良好的应用程序资源?或者更好的资源是已从仅SQL转移到组合的应用程序? - Boris Callens
@BorisCallens 我认为混合模式现在更常见。在我观察到的大多数公司中,大多数现代应用程序都默认解决方案将使用多种数据存储。 - Rex M

3
我同时使用关系型数据库和非关系型数据库。关系型数据库适合进行复杂的分析、报告和多用户以不同方式访问的数据。而当我从单个用户的角度查看数据时,非关系型数据库非常适合。一个我经常问自己的问题是:“谁在访问这些数据?”如果答案是一个用户,我就使用非关系型数据库来存储它。
当然,还有其他情况也适合使用非关系型数据库,这只是其中一个例子。
正如你所提到的,非关系型数据库是更简单的存储方式,但为了维护数据可能需要编写复杂的代码,例如存储连接列表。

0
非关系型键值数据库最适合于存储二进制大对象和缓存。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接