scala - 用于新 Scala 项目的 NoSQL(例如 MongoDB)或 RDMS(例如 PostgreSQL)?

标签 scala mongodb architecture scalaquery casbah

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

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

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

如果这个问题显得有点模糊,我们深表歉意。我确实希望有正确见解或经验的人能够提供帮助。

更新:

很抱歉没有添加指向 SLICK 的链接(它是相当新的)。如下:

更新 2:

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

最佳答案

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

  • 对于我所拥有的几组数据,性能似乎并不能激发 SQL 或 NoSQL 的动力。但是,存在大量数据时的性能通常被列为使用 NoSQL 的原因,例如,by Wikipedia

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

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



如果您主要关心服务器端和客户端数据的一致表示,如 Opa 等语言或 Haxe可能很有趣,因为它们编译为可以在双方都执行的代码。见 this page用于“多目标”或“无分层”语言。

关于scala - 用于新 Scala 项目的 NoSQL(例如 MongoDB)或 RDMS(例如 PostgreSQL)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11308036/

相关文章:

scala - 解释对位图

linux - Linux 中的 Mongodb 复制错误

architecture - RabbitMQ中需要单独的死信交换吗?

python - 如何在Python中应用闭-开和控制反转原理?

design-patterns - 设计模式、架构模式、架构风格和架构之间有什么区别?

scala - FlinkML:加入 LabeledVector 的数据集不起作用

python - 突然之间,需要进行什么样的转换才能改组(可能意味着一个新的阶段)?

scala - Seq[A] 扩展 Ordered[Seq[A]]

MongoDB 聚合,按值区间分组,

c# - 如何将已弃用的 IMongoQuery 转换为 FilterDefinitionBuilder