【问题标题】:Suitable database and webserver for scalable web application适用于可扩展 Web 应用程序的数据库和 Web 服务器
【发布时间】:2013-02-27 06:52:43
【问题描述】:

我正计划使用 Scala 编程语言开发可扩展的 Web 应用程序。我是 scala 的新手。我正在考虑使用 nginx 作为前端和码头作为后端的播放框架。我对选择正确的数据库感到困惑.我应该选择 mongodb、hbase 还是 mysql?

【问题讨论】:

    标签: mongodb scala nginx jetty hbase


    【解决方案1】:

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

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

    您可能还想查看SORM Framework

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

    【讨论】:

      【解决方案2】:

      也许一个用例是为了让答案更合适。一般来说,数据的类型及其用途将决定一个人是使用 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】:

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

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

        在 MySQL 中,对于相同的数据,因为它分布在几十个表中,您将执行几十个索引查找、几十个范围查找和几十个数据查找。

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

        我对 HBase 了解不多,但有一个很好的比较图显示 here 再次,MongoDB 似乎占了上风。

        【讨论】:

        • 是的.. Mongo...想知道为什么我一直在输入 Mangoes...:D
        【解决方案4】:

        如今,令人高兴的是,选择数据库可能是一项具有挑战性的工作,因为环境非常多样化。这是一个有趣的视觉效果,突出了这一点:

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

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

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

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

        1. 您是否有包含许多列的表?
        2. 您是否有列少但关系多的表?
        3. 您是否有树状数据,其中有父母和祖先的孩子?
        4. 您是否计划存储结构化数据格式,例如 XML 或 JSON?
        5. 您是否预见到需要频繁更改数据库架构?

        如果您对这些问题中的任何一个回答是肯定的,那么您可能是非关系型的,但您可能不是乡巴佬。在这种情况下,第二个最难的问题是选择哪个非关系数据库。同样,请根据您的数据结构以及它们与其他技术选择的匹配程度、您需要哪些 ACID 属性、您的技能所在以及最简单的方法进行选择。

        【讨论】:

          猜你喜欢
          • 2013-06-26
          • 1970-01-01
          • 1970-01-01
          • 2017-07-24
          • 2017-09-13
          • 2017-03-19
          • 1970-01-01
          • 1970-01-01
          • 2011-01-05
          相关资源
          最近更新 更多