用什么NoSQL数据库替代MySQL?

时间:2011-06-10 20:26:02

标签: scala nosql playframework

对于NoSQL来说,选择特定的NoSQL数据库有很多令人眼花缭乱的选择,如NoSQL wiki所示。

在我的应用程序中,我想用NOSQL替换mysql。在我的应用程序中,我有一个用户表,它与大量其他表有一对多的关系。其中一些表又与其他表相关。如果他们是朋友,我也有一个用户连接到另一个用户。

我没有要存储的文档,因此这消除了面向文档的NoSQL数据库。 我想要非常高的性能。 NOSQL数据库应该与Play Framework和scala语言一起使用。 它应该是开源的,免费的。

如上所述,我应该使用哪些NoSQL数据库?

4 个答案:

答案 0 :(得分:9)

我认为您可能误解了文档数据库的性质"。因此,我会推荐MongoDB,这是一个文档数据库,但我认为你会喜欢它。

MongoDB存储"文件"这基本上是JSON记录。很酷的部分是它了解它存储的文档的内部。所以给出这样的文件:

{
  "name": "Gregg",
  "fave-lang": "Scala",
  "fave-colors": ["red", "blue"]
}

您可以查询" fave-lang"或者" fave-colors"。您甚至可以索引这些字段中的任何一个,甚至是数组" fave-colors",这将需要关系中的多对多字段。

Play提供了一个我没有使用过的MongoDB插件。你也可以使用Casbah driver for MongoDB,我已经使用了很多而且很棒。如果您喜欢MongoDB,由FourSquare编写的MongoDB Rogue查询DSL也值得一看。

MongoDB非常快。此外,您将节省编写模式的麻烦,因为任何记录都可以包含您想要的任何字段,并且它们仍然是可搜索和可索引的。您的数据模型可能看起来很像现在,用户"集合" (如表)和其他集合,其中记录根据需要引用用户ID。但是,如果您需要在其中一个集合中添加字段,则可以随时执行此操作,而无需担心旧记录或数据迁移。从技术上讲,MongoDB记录没有架构,但最终会将类似的记录组织到集合中。

MongoDB是我过去几年碰巧遇到的最有趣的技术之一。在那个愉快的星期六,我决定把它检查出来,并在15分钟内生效,感觉就像我得到了它#34;。我经常在工作中演示一个演示,我会告诉人们如何在15分钟内开始使用MongoDB和Scala,其中包括安装MongoDB。如果你进入网络服务,那就是无耻的插件,这里是关于使用Casbah开始使用MongoDB和Scalatra的博文:http://janxspirit.blogspot.com/2011/01/quick-webb-app-with-scala-mongodb.html

你至少应该去http://try.mongodb.org

是什么让我开始。

祝你好运!

答案 1 :(得分:2)

此时答案是否定的,我很害怕。

您不能只将带有连接的关系模型转换为键值存储设计,并期望它是1:1映射。从您所说的看来,您确实有连接,其中一些是递归的,即引用同一个表中的另一行。

您可以从对现有关系模式进行非规范化开始,使其更接近您希望实现的设计。然后,如果您尝试做的事情可以通过实际方式完成,以及选择哪种技术,您可以更轻松地看到。您甚至可以选择继续使用MySQL。仅仅因为你可以有连接并不意味着你必须这样做,这使得在像MySQL这样的关系型DBMS中实现非关系设计成为可能。

另外,请记住 - 非关系型数据库是为可扩展性而设计的 - 而不是性能!如果您没有数千个用户和服务器场,传统的关系数据库实际上可能更适合您。

答案 2 :(得分:2)

嗯,你想要非常高性能的遍历,你使用“朋友”这个词。首先想到的是图形数据库。它们专门针对这种情况而制作。

尝试Neo4j http://neo4j.org/

它是免费的,开源的,但也有商业支持和商业许可,具有出色的文档,可以从多种语言(REST界面)访问。

它是用java编写的,因此您可以使用本机库,也可以将其嵌入到java / scala应用程序中。

答案 3 :(得分:0)

关于MongoDB或Cassendra,您现在(2016年12月,迟了5年)尝试longevityframework.org

  

使用标准Scala惯用法(例如案例类,伴随对象,选项和不可变集合)构建域模型。告诉我们模型中的类型,并提供持久性。

参见" More Longevity Awesomeness with Macro Annotations! "来自John Sullivan
他提供example on GitHub

  

如果你以前看过长寿,你会惊讶于开始持久保存你的域名对象变得多么容易。最好的部分是所有与持久性相关的内容都隐藏在注释中。您的域类完全没有持久性问题,完美地表达您的域模型,并且可以在应用程序的所有部分中使用。