选择MySQL vs find MongoDB

时间:2012-12-18 10:20:05

标签: mysql mongodb

我有2个dbs:一个在mySql中,另一个在MongoDB中,里面有相同的数据... 我在mySQL中执行以下操作:

Select tweet.testo From tweet Where tweet.testo like ‘%pizza%’

这就是结果:

1627 rows in set (2.79 sec) 

但如果我执行mongo:

Db.tweets.find({text: /pizza/ }).explain() 

这是结果:

nscannedObjects" : 1606334,
"n" : 1169,

或者如果我执行:

Db.tweets.find({text: /pizza/i }).explain() 

这是结果:

"nscannedObjects" : 1606334,
"n" : 1641,

为什么mysql / mongo中的行数/文件数不同?

3 个答案:

答案 0 :(得分:3)

  

为什么mysql / mongo中的行数/文件数不同?

可能有1000亿个原因,包括当天的太阳温度。

MongoDB和MySQL是两个完全独立的技术,如果你希望保持同步,你需要在两者之间使用某种复制器。您还没有让我们知道是否是这种情况。

此外,我们不知道您的编码,服务器设置,网络设置以及其他所有内容,所以我们甚至无法开始回答这个问题。

一个好的答案是说你看到这个的原因是因为两者之间的数据不同......

至于:

之间的区别
Db.tweets.find({text: /pizza/ }).explain()

Db.tweets.find({text: /pizza/i }).explain() 

这是因为默认情况下,我认为MySQL是小写的,我认为MongoDB(我知道)并不是这样的,因为它区分大小写(这个i使它不区分大小写。)

然而关于复制者,这里是一个很好的:https://docs.continuent.com/wiki/display/TEDOC/Replicating+from+MySQL+to+MongoDB

答案 1 :(得分:1)

mysql命令

Select tweet.testo From tweet Where tweet.testo like ‘%pizza%’

等同于MongoDB的

Db.tweets.find({text: /pizza/i })

我意识到它们都包含相同的数据,但在某些情况下,mysql中的文本被截断,因此返回的行数较少。

答案 2 :(得分:0)

从SQL查询开始like '%pizza%'可能无法提取以字符串'pizza'开头的条目,因为前面有通配符。尝试使用以下SQL查询来排除SQL中的匹配逻辑和MongoDB使用的正则表达式之间的任何语法差异

Select tweet.testo From tweet Where lower(tweet.testo) like ‘%pizza%’ or lower(tweet.testo) like ‘pizza%’

免责声明:我刚才没有在我面前使用mySQL,因此无法验证上述的主要通配符行为,但这与其他RDBMS一致,因此值得检查