因爲我一直在閱讀Mongo文檔,所以這並不意味着消極。我對這個概念很陌生。 Mongo被吹捧爲這個殺死MySQL的超高效數據庫,但是我讀的所有Mongo語句似乎都是可以縮減的,因此沒有更高效的SQL。也許我採取了錯誤的做法。此Mongo查詢與此SQL查詢相同嗎?我是否正確地考慮Mongo?
比方說,你有兩個表:
User
ID Name FavoriteColor
1 John 1
2 Jona 2
3 Jack 1
Color
ID Name
1 Red
2 Green
3 Blue
要得到用戶的顏色,我會做
SELECT
`u`.`Name`,
`c`.`color`
FROM `user` AS `u`
LEFT JOIN `color` AS `c` ON `u`.`FavoriteColor` = `c`.`id`
不知道這句法是正確的,我沒有在MySQL的前我。
現在,Mongo不支持連接(人們說這就是Mongo的重點),所以如果我要這樣做,我會迭代用戶集合,然後對每條記錄進行查詢,然後查詢顏色數據庫以反映該用戶最喜歡的顏色ID和「迭代」顏色集合(應該只返回一行)。但是,這似乎是完全一樣的東西(在PHP):
<?
$query = "SELECT `Name`, `FavoriteColor` FROM `users`";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
$username = $row["Name"];
$query = "SELECT `Name` FROM `Color` WHERE `id` = " . $row["FavoriteColor"] . " LIMIT 1";
$result = mysql_query($query);
$color = "";
//I know we return only one row but I am illustrating the concept of scanning the entire color table
while($row2 = mysql_fetch_array($result)) {
$color = $row2["Name"];
}
echo "Hi I'm $username and my favorite color is $color <br>";
}
?>
從效率的角度來看,我不能看到的MongoDB如何能得到任何速度比SQL(加入或PHP迭代的方式似乎仍是一樣的東西)。在一天結束時,它必須掃描整個用戶表,並且對於每個用戶,它必須掃描整個顏色表以使colorID符合最喜歡的顏色。
我應該試圖從邏輯上減少MongoDB存儲下來的行\ colums \表,還是MongoDB本質上執行不同?
下面是我對一個非常好的問題+1。現在我只需要等待Mongo狂熱者試着解釋這個,而不用挖掘他自己的墳墓:) –