我想你可能会误解“文档数据库”的性质。因此,我会推荐MongoDB,这是一个文档数据库,但我认为你会喜欢它。
MongoDB存储基本上是JSON记录的“文档”。很酷的部分是它了解它存储的文档的内部。因此,考虑一个文件是这样的:
{
"name": "Gregg",
"fave-lang": "Scala",
"fave-colors": ["red", "blue"]
}
你可以在“最喜欢的琅”或“最喜欢的 - 色彩”查询。你甚至可以在这些领域的任何一个上进行索引,甚至是“fave-colors”数组,这就需要在关系土地上有多对多的关系。
Play提供了一个我没有用过的MongoDB插件。您也可以使用Casbah driver for MongoDB,我已经使用了很多并且非常优秀。如果您喜欢MongoDB,那么查询由FourSquare编写的针对MongoDB的DSL的Rogue也值得一看。
MongoDB速度非常快。另外,你可以节省编写模式的麻烦,因为任何记录都可以有你想要的任何字段,而且它们仍然可以搜索和索引。您的数据模型可能看起来很像现在的样子,具有用户“集合”(如表格)和其他具有根据需要引用用户标识的记录的集合。但是,如果您需要为某个集合添加字段,则可以随时执行此操作,而无需担心较旧的记录或数据迁移。技术上MongoDB记录没有模式,但最终会将类似的记录组织到集合中。
MongoDB是我在过去几年遇到的最有趣的技术之一。在那个愉快的星期六,我决定检查一下,在15分钟之内是有成效的,感觉就像我“明白了”。我经常在演示中演示如何在15分钟内开始使用MongoDB和Scala,包括安装MongoDB。这里无耻的插头,如果你到Web服务,是我在开始使用的MongoDB和Scalatra的使用卡斯巴博客文章:http://janxspirit.blogspot.com/2011/01/quick-webb-app-with-scala-mongodb.html
你应该至少是去http://try.mongodb.org
这就是让我开始。
祝你好运!
您在混淆NoSql和键值数据存储。像Graph数据库(Neo4J)和OO数据库(db4o)这样的NoSql数据库不是键值数据存储。他们提供强大的关系机制。 – 2011-06-10 23:32:49
@Vagif:老实说,我真的不喜欢NoSQL这个名字(或者非关系型),因为它定义了它不是什么,而是它是什么。按照相同的推理,我猜这个老式的文件系统可能被称为NoSQL,因为它不是SQL或关系型的。 OTOH,你对图形数据存储是正确的,我没有想到这一点。 – 2011-06-11 16:55:23
那么,我们有无神论者,他们没有什么,而不是他们拥有什么。在一个由宗教无神论主宰的世界里,这是一个有效的定义。在由SQL数据库支配的世界中,我猜NoSql确实有意义。 – 2011-06-11 22:28:06