用什么NoSQL数据库替代MySQL?

ace*_*ace 6 scala nosql playframework

谈到NoSQL,在NoSQL维基中可以清楚地看到选择特定NoSQL数据库的数量令人眼花缭乱.

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

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

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

Jan*_*anx 9

我想你可能误解了"文档数据库"的本质.因此,我会推荐MongoDB,它是一个文档数据库,但我想你会喜欢它.

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

{
  "name": "Gregg",
  "fave-lang": "Scala",
  "fave-colors": ["red", "blue"]
}
Run Code Online (Sandbox Code Playgroud)

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

Play提供了一个我没有使用过的MongoDB插件.你也可以使用Casbah驱动程序用于MongoDB,我已经使用了很多并且非常好.如果你喜欢MongoDB,那么由FourSquare编写的用于MongoDB 的Rogue查询DSL也值得一看.

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

这就是让我开始的原因.

祝好运!


Gor*_*vic 2

恐怕目前的答案是否定的。

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

您可以首先对现有的关系模式进行非规范化,使其更接近您希望实现的设计。然后,您可以更容易地了解您正在尝试做的事情是否可以以实用的方式完成,以及选择哪种技术。您甚至可以选择继续使用 MySQL。可以拥有连接并不意味着必须如此,这使得在 MySQL 等关系 DBMS 中进行非关系设计成为可能。

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

  • @Vagif:我并不是说它没有意义。它的意思确实如其所说。我的意思是,对许多非常不同的数据存储技术使用相同的名称,这些技术只有共同点“不是 SQL”,并不是特别有用。 (5认同)
  • 您混淆了 NoSql 和键值数据存储。有些 NoSql 数据库(例如图形数据库 (Neo4J) 和 OO 数据库 (db4o))不是键值数据存储。它们提供了强大的关系机制。 (2认同)