2012-12-18 44 views
1

我有2個DBS:一個在MySQL和一個MongoDB中與內部相同的數據... 我做後續在MySQL的:選擇MySQL的VS發現的MongoDB

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

,這是結果:

1627 rows in set (2.79 sec) 

,但如果我在蒙戈高管:

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

這就是結果:

nscannedObjects" : 1606334, 
"n" : 1169, 

,或者如果我前高管:

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

這就是結果:

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

爲什麼行/文件在MySQL /蒙戈找到數量是不同的?

+0

當您檢查僅由MongoDB而不是由mySQL返回的情況時,差異可能會變得很明顯。 – Philipp

+0

要查看mongo結果和mysql結果之間的差異,可以給出答案。打印不在兩個結果中的記錄並觀察其中的一些。 – Muatik

回答

2

爲什麼mysql/mongo中的行/文件數量不同?

可能有1000000000000000個原因,包括當天的太陽溫度。

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

+0

感謝您的回答...我的問題非常簡單:我捕獲Twitter的推文並將其保存在mongodb和mysql中..所以我確信在每兩個數據庫中我有相同的數據..博客! – alessio1985

+0

必須有一些東西使得兩者在某種程度上有所不同,以便MySQL選擇該數字,並且MongoDB選擇另一個數字,你確定所有在Twitter上的tweet嗎?如果你在MongoDB結果和MySQL結果之間做了差異,你會得到什麼? – Sammaye

+0

謝謝Sammaye ..我不知道如何做差異...如果我搜索的東西,返回幾個文件/行數目是相同的,但是如果返回許多文件/行是不同的,並看到差異是複雜的。 – alessio1985

0

當您的SQL查詢開始like '%pizza%'不得以字符串「比薩餅」開始,因爲在前面的通配符的皮卡項目。試試下面的SQL查詢來排除與MongoDB的

使用SQL和正則表達式匹配任何邏輯語法差異
Select tweet.testo From tweet Where lower(tweet.testo) like ‘%pizza%’ or lower(tweet.testo) like ‘pizza%’ 

免責聲明:我沒有MySQL的在我面前剛纔所以無法驗證上述領導通配符行爲,但是這是與其他RDBMS一致所以它的價值檢查

+0

我剛剛在MySQL 5.1.63上測試了這個,'%string%'和'string%'找到同樣的東西 – Sammaye

+0

confirm ...%string%find astring abcstingabc stringfff ... string%find string stringabc stringfff但不是abcstring – alessio1985

0

感謝ü非常匹配的一切,對不起,如果有II浪費了你的時間...... mysql命令

選擇鳴叫.testo從tweet tweet.testo lik E '%比薩餅%'

Db.tweets.find同樣的事情({文本:/比薩餅/ I})。說明()

我意識到,我的兩個DBS包含相同數量的對象,但有時在MySQL上的文本被切斷,因此返回更少的行,因爲我搜索的文字沒有在文本中.. 再次..坦克!