我熟悉CouchDB以及将其结果映射到Scala对象的想法,以及找到一些自然的迭代方法,立刻就来了。
但是我看到像Ruby和Javascript这样的动态语言使用CouchDB的json / document-centric / shchema-free方法做得非常好。
用静态语言用Couch做任何事情的好方法吗?
答案 0 :(得分:17)
我知道CouchDB纯粹与JSON对象一起工作。由于JSON是无类型的,因此很容易相信它更适合动态语言。但是,XML通常也是非类型化的,Scala对创建和操作XML有很好的库支持。有关Scala XML功能的探索,请参阅:http://www.ibm.com/developerworks/library/x-scalaxml/
与JSON相同。有了适当的库支持,即使在静态语言中,处理JSON也会感觉很自然。有关在Scala中处理JSON数据的一种方法,请参阅此文章:http://technically.us/code/x/weaving-tweed-with-scala-and-json/
通常使用对象数据库,有时可以方便地定义“模型”(例如,使用语言中的类),并使用JSON或XML或其他一些无类型文档语言作为类的序列化表示。然后,正确的库支持可以在序列化形式(如JSON)和内存数据结构之间进行转换,具有静态类型和随附的所有好东西。有关此方法的一个示例,请参阅Lift记录,其中添加了与JSON之间的转换:http://groups.google.com/group/liftweb/msg/63bb390a820d11ba
答案 1 :(得分:3)
我想知道你是否提出了正确的问题。你为什么使用Scala,而不是动态语言?可能是因为Scala为您提供的一些优点对您来说非常重要,并且我认为您的代码质量很重要。那你为什么不使用“静态类型”(即基于模式)的数据库呢?我只是假设,但是能够回应变化的能力。生产SQL数据库很难改变和重构。
因此,您的数据是弱类型的,并且您的代码是强类型的。但在某个地方你需要进行转换。这意味着在某个地方,即使数据库没有,您也会拥有数据的“模式”。此模式由您将Couch文档映射到的类定义。这很有道理;我见过的Couch的大多数用法都有一个键,例如“type”,每种类型至少有一些常见的键组。是否将JSON手工映射到这些Scala类或使用例如花哨的反射工具(较慢但很漂亮),或者一些甚至更新的Scala功能,我还不熟悉的是细节。从容易但慢的一个开始,然后看它是否足够快。
当您的类(即您的架构更改)时,会发生重大事件。你可以改变课程,确保你做一些聪明的事情,如果对于某些文档,你期望丢失的一个键(因为它是基于该类的旧版本),而不是你去。响应变化从未如此简单,而且您的代码仍然是静态输入的。
如果这对您来说不够好,并且您根本不需要架构,那么您实际上是在说您不想使用类来定义和操作数据。这也很好(虽然我无法想象使用),但问题不是关于动态与静态语言,而是关于是否使用基于类的OO语言。