Mongodb vs MySql搜索优化

时间:2014-09-08 12:12:08

标签: mysql mongodb rdbms nosql

所以我正在设计一个系统,用于存储文档类型的数据(即转录文档)。我立刻认为这是利用像MongoDB这样的NOSQL实现的好机会。然而,鉴于我对Mongo没有经验,我想知道:在每个docuemnts中,我都有一些我希望能够搜索的元数据标签:日期,作者,关键字等等。如果我如果使用像MySql这样的RDBMS,我可能会将这些项目存储在外键所喜欢的单独表中,并将索引存储在最有可能被搜索的项目中。然后,我可以对该表运行查询,只返回匹配的项目的全文结果(保存在磁盘上读取不必通过包含大量文本或BLOB信息的行)。

与Mongo有类似的可能吗?我知道在Mongo中我可以简单地创建一个具有所有元数据和实际转录的文档,但是如果文档是这样存储的话,搜索元数据中的各个字段是否容易且高效?当需要在Mongo中的文档中的各个项目中执行搜索时,是否有最佳实践?或者这种类型的场景更适合RDBMS而不是NOSQL实现?

2 个答案:

答案 0 :(得分:0)

您可以为mongodb文档中的各个字段添加索引。只有当索引大于内存时,基于索引的搜索的性能才会成为问题。

当您决定是否使用mongodb时,请记住没有连接操作。这必须由您的数据库层或更高层完成。

如果您主要关注的是搜索,那么mongodb就有一条ElasticSearch河,因此您可以在数据集上使用ElasticSearch。

答案 1 :(得分:0)

NoSQL模型适用于远程数据存储(OLTP模型),是的,您可以创建索引并执行所需的查询,而不是跨表拥有相关实体,您拥有一个拥有所有实体的完整实体在她自己内部依赖它。

当您必须在数百万个数据的上下文中提取关系数据库中包含许多联接的复杂报表时,这样做会变得不切实际,因为您可能最终会破坏其他应用程序。

例如:

我们有房间和学生团体。

每个房间都有很多学生,关系模型我们会有以下几点:

SELECT * FROM ROOM R
INNER JOIN
S STUDENT
ON = S.ID R.STUDENTID

想象一下,用大约20个包含数千个数据的表来做到这一点?他的表现太可怕了。

使用MongoDB,您将这样做:

db.sala.find (null)

并将把他们所有的房间都留给他们的学生。

MongoDB是一个水平执行扫描的数据库。

您可以阅读:

http://openmymind.net/mongodb.pdf

该网站还有一个使用本书示例的互动教程。很好。

在这里,您可以在线体验mongodb并测试您的命令。

搜索try mongo db。

还可以阅读有关replicaSet的分片。我相信它会让你大开眼界。

你可以安装Robomongo,它是一个图形界面,你可以修改mongodb。

http://robomongo.org/