适用于可伸缩Web应用程序的数据库和Web服务器

时间:2013-02-27 06:52:43

标签: mongodb scala nginx jetty hbase

我打算使用Scala编程语言开发可扩展的Web应用程序。我是scala的新手。我正在考虑使用nginx作为前端和jetty作为后端和play框架。我对选择正确的数据库很困惑。我应该去mongodb或hbase还是mysql?

4 个答案:

答案 0 :(得分:1)

首先,正如其他人所说,持久层的选择取决于您的用例。

如果您正在寻找SQL解决方案,请查看SO answer to "Good examples of Scala database persistence"上的概述,其中提供了以下示例:

您可能还想查看SORM Framework

对于Slick,有一个很有希望的项目play-slick,它有助于将其集成到Play框架中。

答案 1 :(得分:0)

嗯,MongoDB和MySql都是GPL,除了查询MongoDB的方式之外,数据的存储方式也有性能优势。

在MongoDB中,数据存储为数据页,这是MySQL中许多表的结构替换。因此,当您查询MongoDB时,您可以访问索引查找并从一页检索数据。

在MySQL中,对于相同的数据,由于它是在几十个表中布局的,因此您将进行数十次索引查找,数十次范围查找和数十次数据查找。

因此,第一轮的获胜者是MongoDB。

我对HBase知之甚少,但是有一个很好的比较图显示here,同样,MongoDB似乎占了上风。

答案 2 :(得分:0)

也许一个用例就是为了使答案更合适。通常,数据的类型及其使用将决定是使用SQL(关系,例如MySQL)还是NoSQL架构(例如MongoDB)。

article可能有助于指明方向。

....As programmers we can embrace what we’re given. Most likely we’ll have our own opinions. I sure do. But if you’re doing something that lends itself nicely to SQL tables, then we can get our job done. If you’re doing something that requires complex data structures and lends itself nicely to a NoSQL database, then we can similarly get our job done....

答案 3 :(得分:0)

现在,幸运的是,选择数据库可能是一项具有挑战性的工作,因为这里的景观非常多样化。这是一个有趣的视觉,突出了这一点:

http://blogs.the451group.com/information_management/files/2013/02/db_Map_2_13.jpg

从开发人员技能和API的角度来看,最简单的选择,数据的结构和大小,编写数据的频率与读取数据的频率,以及您对ACID的要求是什么样的选择应该是真正的选择需要,最后你的应用程序需要如何扩展。我把可扩展性放在最后,因为在大多数情况下,当你首先放置scalabilty时,结果是一个没有问题的解决方案。如果它是一个新的应用程序,事实上,您可能并不真正了解可伸缩性要求,因此我会选择适合您其他需求的东西。由于您的应用程序是使用Scala构建的,因此可能还会考虑可用于所考虑技术的Scala友好包装器的成熟度和质量。如果您决定采用非关系数据库,这一点尤为重要,因为您可能不得不放弃已经存在许多Scala友好包装器的统一JDBC API。

由于您特别提到MongoDB和HBase,我假设您可能有理由使用非关系数据库。事实上,在这个早期阶段,您面临的艰难选择实际上是采用关系解决方案还是非关系解决方案。如果选择关系解决方案,那么从一个关系数据库移动到另一个关系数据库可能相对容易。如果选择非关系型数据库,则情况就不那么正确了,因为API与一种非关系型数据库的区别很大。

那么如何知道您是否需要采用非关系型数据库?

  1. 你有多列的表吗?
  2. 你有几列没有多少关系的桌子吗?
  3. 在有父母和祖先的孩子的情况下,您是否有树状数据?
  4. 您是否计划存储XML或JSON等结构化数据格式?
  5. 您是否预见到需要经常更改数据库架构?
  6. 如果您对这些问题的回答是肯定的,那么您可能是非关系型的,但您可能不是一个乡下人。在这种情况下,第二个最难的问题是选择哪个非关系数据库。同样,根据您的数据结构以及它们与其他技术选择的匹配程度,您需要的ACID属性,技能所在的位置以及最简单的方法进行选择。