7

我对CouchDB很熟悉,将其结果映射到 Scala 对象以及找到一些自然的方式来迭代它的想法立即出现了。

但我看到动态语言(如 Ruby 和 Javascript)在 CouchDB 的 json/document-centric/shchema-free 方法上做得很好。

用静态语言用 Couch 做事有什么好的方法吗?

4

2 回答 2

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

于 2009-04-01T17:13:09.197 回答
3

我想知道你是否问对了问题。你为什么使用 Scala 而不是动态语言?可能是因为 Scala 为您提供了一些对您很重要的优点,我假设您的代码质量。那你为什么不使用“静态类型”(即基于模式的)数据库呢?我再次假设,但我想到了应对变化的能力。生产 SQL 数据库具有非常难以更改和重构的可怕趋势。

因此,您的数据是弱类型的,而您的代码是强类型的。但是你需要在某个地方进行过渡。这意味着在某个地方,即使数据库没有,您也会为您的数据提供一个“模式”。此模式由您将 Couch 文档映射到的类定义。这很有意义;我见过的 Couch 的大多数用途都有一个键,例如“类型”,并且对于每种类型,至少有一组通用键。是否将 JSON 手动映射到这些 Scala 类或使用例如花哨的反射工具(速度较慢但很漂亮),或者我还不熟悉的一些更高级的 Scala 功能是一个细节。从简单但缓慢的开始,然后看看它是否足够快。

当你的类,即你的模式,改变时,就会发生大事。您可以更改类,而不是更改您的表,确保在某些文档缺少您期望的键(因为它基于该类的旧版本)时做一些聪明的事情,然后离开。响应变化从未如此简单,而且您的代码仍然是尽可能静态类型的。

如果这对您来说还不够好,并且您根本不需要模式,那么您实际上是在说您不想使用类来定义和操作您的数据。这也很好(尽管我无法想象有什么用),但是问题不在于动态语言与静态语言,而在于是否使用基于类的 OO 语言。

于 2011-03-08T08:48:24.737 回答