新的Scala项目的NoSQL(例如MongoDB)或RDMS(例如PostgreSQL)?

Jac*_*ack 7 architecture scala mongodb scalaquery casbah

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

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

我基本上要求有人从关系数据库转移到对象/文档类型数据库,特别是使用Scala.我知道即将发布的SLICK承诺提供良好的RDBMS集成.那么,如果像TypeSafe这样的公司决定在TypeSafe堆栈中建立RDBMS集成部分,那么我将使用Casbah集成到MongoDB上游吗?

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

更新:

不向SLICK添加链接的道歉(这是相当新的).开始:

更新2:

对于技术我个人的第一场胜利通常为开发人员的生产力 -这相当于轻巧简单:快速学习,容易维护,没有魔法

Mal*_*off 5

我目前处于类似情况,因为我有一些Web开发和SQL数据库的经验,所以我把它作为与MongoDB,Cashbah(和Scalatra)合作的机会.我的经验仍然非常有限,我正在处理的项目和数据量非常小,但这里有一些观察结果.

  • 对于我拥有的几组数据,性能似乎不会激发SQL或NoSQL.但是,存在大量数据时的性能通常被列为使用NoSQL的原因,例如,维基百科

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

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



如果您主要关注服务器和客户端上数据的连贯表示,那么OpaHaxe等语言可能会引起关注,因为它们编译为可以在双方执行的代码.请参阅此页面以了解"multitarget"或"无级别"语言.