7

我正在 Scala 中开发一个全新的项目。它只是一堆 CRUD 操作的应用程序,但是,由于一些古怪的要求,Play2 或 Lift 不符合要求,所以我将从头开始开发应用程序。这意味着 Anorm 或 ScalaQuery 成为数据库集成的不那么明显的选择,这给我留下了一个问题:是时候尝试新的东西了吗?

我过去的技术堆栈主要包括 Java 和 PostgreSQL,并且我在 ORM 和普通 SQL 方面都有经验。像 MongoDB 这样的 NoSQL 数据库管理系统是典型 RDBMS 的良好替代品,还是特殊情况下的应用程序数据存储?此外,数据库的选择如何影响更大的 Scala 系统设计(如果有的话)?例如,您使用类似 JSON 的接口与数据库对话,以及 Web 和 REST 服务之间的 JSON,如果中间的所有内容都变成 Scala 对象,这并不意味着什么,或者是吗?

我基本上是在询问某人从关系数据库到对象/文档类型数据库的经验,特别是使用 Scala。我知道在即将发布的 SLICK 版本中承诺了良好的 RDBMS 集成。因此,如果像 TypeSafe 这样的公司决定将 RDBMS 集成作为 TypeSafe 堆栈的一部分,那么我是否会通过使用 Casbah 集成到 MongoDB 来逆流而上?

如果这个问题看起来有点含糊,请道歉。我确实希望有正确见解或经验的人能够提供帮助。

更新:

很抱歉没有添加到 SLICK 的链接(它是相当新的)。开始:

更新 2:

我个人对一项技术的第一次胜利通常是开发人员的生产力——这意味着轻量级和简单:快速学习、易于维护、没有魔法

4

3 回答 3

5

我目前处于类似情况,由于我在 Web 开发和 SQL 数据库方面有一些经验,因此我借此机会与 MongoDB、Cashbah(和Scalatra)合作。我的经验仍然非常有限,我正在使用的项目和数据量非常小,但这里有一些我所做的观察。

  • 对于我拥有的几组数据,性能似乎并不能激发 SQL 或 NoSQL 的动力。然而,存在大量数据时的性能通常被列为使用 NoSQL 的一个原因,例如,维基百科

  • 我的文档(数据库中的条目)来自基准测试套件,主要具有静态结构,我很乐观可以将它们存储在固定模式的 SQL 数据库中。然而,一些子结构不是静态的,例如,添加了新的测试用例,跟踪了新的统计数据,删除了其他的。这是我尝试无模式 NoSQL 数据库的主要动机。另外,因为我觉得 MongoDB 的文档方法使得哪些数据属于一起(即,属于一个文档)更加明显,这与关系数据库中的条目相比,其中数据将分布在各种表和行中,并且需要通过连接重建完整的“文档”。

  • Lift-JsonRogue等工具允许您在类型安全的情况下使用常规 Scala 对象,尽管数据经常(反)序列化为(来自)JSON。但是,如果您的数据结构主要是静态的,这自然最有效,否则,您只能使用字符串来访问您的数据(例如,使用 Cashbah 扩展查询的结果)。



如果您主要关心服务器端和客户端数据的一致表示,OpaHaxe等语言可能会感兴趣,因为它们编译为可以在双方执行的代码。有关“多目标”或“无层”语言,请参阅此页面。

于 2012-07-03T10:01:06.383 回答
3

评论太久了。只是想把我对 Scala 的短暂体验联系起来(现在大约 6 个月,大约从 Play2 出来的时候开始——它很快就成为了我的首选语言)。

在我最近的几个项目中,我很喜欢在 MongoDB 中使用 Salat/Casbah;大多数都在 Play2 中,但最新的是没有 webapp 框架。绝对没有像逆流而上的感觉。

我会说有些特殊用例我不会使用 mongo,但它可以很好地用作通用对象数据存储,特别是如果您希望通过 id 或索引查询并且不需要事务(并且需要最小的临时聚合类型的东西)。

预计需要一组单独的专用于 mongodb 的服务器(或使用专用于 mongodb 的服务),但我想这对于大多数严肃的数据库应用程序来说是正常的。

我还使用了 Play2/Anorm,它用于一些临时查询仪表板样式的报告页面非常令人愉快。我开始尝试走 Squeryl 路线,但 Anorm 似乎更容易用于一次性聚合查询。没看过SLICK,但听起来很有趣。

于 2012-07-03T10:28:21.677 回答
2

如果不知道您希望应用程序解决什么问题,真的很难说。

我个人发现通过 REST/JSON 使用 NoSQL DB 提高了我的工作效率。尽管请记住,大多数 NoSQL DB 都提供 REST 接口,这排除了对大量中间件、Scala 或其他方式的需求,除非您打算编写带有 UI 的 web 应用程序。

如果这是一个学习练习,我建议你尝试多种方法,因为每个 NoSQL DB 都可以为你的工具包提供不同的东西,并且我个人发现 CouchDB、Riak、Neo4j 和 MongoDb 都有不同的优点和缺点,并且适用于不同的目的。

希望这有帮助,祝你好运。

于 2012-07-04T05:09:09.323 回答