0

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

4

4 回答 4

1

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

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

您可能还想查看SORM 框架

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

于 2013-02-27T10:19:27.047 回答
0

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

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

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

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

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

  1. 你有很多列的表吗?
  2. 你有没有几列但有很多关系的表?
  3. 你有没有父母和祖先的孩子的树状数据?
  4. 您是否计划存储 XML 或 JSON 等结构化数据格式?
  5. 您是否预见到需要频繁更改数据库架构?

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

于 2013-02-27T19:52:18.607 回答
0

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

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

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

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

我对 HBase 了解不多,但是这里显示了一个很棒的比较图,这里再次显示 MongoDB 似乎占了上风。

于 2013-02-27T07:07:21.517 回答
0

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

这篇文章可能有助于指明方向。

....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....

于 2013-02-27T08:27:00.990 回答