NoSQL第一篇——初次見面MongoDB

season0891發表於2011-02-10

還是在2008年的時候,“F5”同學就和我提起過key-value的問題。當時我沒有太明白,只朦朧的覺得好像在說快取


最近有開發又和我提起了,我必須得關注下,否則我就out了,呵呵呵

馬上搜了下,目前吵的最熱的是由10gen開發維護的MongDB資料庫,隨機down了體會下

答案是輕巧,速度快


下面就說一下我們初次見面的感受:

維護了一段時間的MySQL了,難免拿他們倆對比下,先上個直觀的效果作為參考

MySQL——

mysql> select * from t;

+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 張三 | 30 |
| 2 | 李四 | 25 |
| 3 | 王五 | 12 |
| 4 | 趙六 | 57 |
+------+--------+------+
4 rows in set (0.00 sec)

MongDB——

{ "_id" : ObjectId("4cbfdaabab5abedbd22f0bc3"), "name" : "mongodb" }
{ "_id" : ObjectId("4cbfdaabab5abedbd22f0bc3"), "x" : 3 }
{ "_id" : ObjectId("4cbfdce3ab5abedbd22f0bc4"), "x" : 4, "j" : 1 }
{ "_id" : ObjectId("4cbfdce3ab5abedbd22f0bc5"), "x" : 4, "j" : 2 }
{ "_id" : ObjectId("4cc10b58dbf9242801dfacae"), "author" : "joe", "created" : "Sat Mar 28 2009 00:00:00 GMT+0800 (CST)", "title" : "Yet another blog post", "text" : "Here is the text...", "tags" : [ "example", "joe" ], "comments" : [
{
"author" : "jim",
"comment" : "I disagree"
},
{
"author" : "nancy",
"comment" : "Good post"
}
] }



下面在幾個基礎方面的東西做下對比:

1.儲存的區別

MySQL——表資料以記錄為單位,每條記錄以N個欄位列屬性組成,每條記錄有相同的欄位屬性

MongDB——文件資料以陣列為單位,每條記錄以N維陣列組成,每個陣列鍵值數不一定相同


2.命令工具的區別

MySQL——mysql-xxx/bin/下的mysql命令和perl工具有39個,在這就不列舉了

MongDB——mongodb-linux-xxx/bin/下的工具只有11個,下面這些二進位制命令從命名就可初步瞭解他們的作用,具體用法請參考官網指南

bsondump

mongo
mongod
mongodump
mongoexport
mongofiles
mongoimport
mongorestore
mongos
mongosniff
mongostat

3.命令列的區別

MySQL——在"mysql>"提示符下insert,update,delete,select,create,drop,alter,show...

MongDB——在">"提示符下db.dbname.save(),db.dbname.insert(),db.dbname.update,db.dbname.remove(),db.dbname.find(),show...

我們可以看出,MongDB都是使用函式呼叫的方式操作文件的;熟悉Memcached的同學看到find()方法的使用會覺得很熟悉,where 條件語句是透過在find()函式中指定的,order by,limit是透過find()函式的sort()和limit()函式處理的


後面管理的章節我還沒有看呢,有興趣的同學請重定向到^_^

另外MongoDB也支援主從Master-Slave架構和有限的雙主Master-Master架構,不過目前只支援2個節點間的相互監聽,等我嘗試了再寫...


總結下,網上看了些資料大多是拿MongDB和MySQL做比較的,前面我也是。其實這兩個資料庫並非一個必須替代掉另一個,在接觸了MongoDB後感覺它不一定適應所有業務,應該是某種特殊業務更能體現出他的價值

所以,雖然國外一些網站已經陸續遷移到MongoDB,我們卻不一定著急動手,技術還不是很成熟,會有哪些不穩定因素還有待觀察考證。未來一段時間 內估計會是這兩者合作的天下,徹底拋棄MySQL或者Oracle是不理智的,我們現在要做的是逐漸過渡到MySQL+MongDB,發揮他們的最大功效


一點心得,希望大家多多指教


mckobe23 發表於:2010.10.25 14:37 ::分類: ( NoSQL ) ::閱讀:(85次) :: 評論 (0) :: 引用 (0)
===========================================================
NoSQL學習——初次見面MongDB
===========================================================

還是在2008年的時候,“F5”同學就和我提起過key-value的問題。當時我沒有太明白,只朦朧的覺得好像在說快取


最近有開發又和我提起了,我必須得關注下,否則我就out了,呵呵呵

馬上搜了下,目前吵的最熱的是由10gen開發維護的MongDB資料庫,隨機down了體會下

答案是輕巧,速度快


下面就說一下我們初次見面的感受:

維護了一段時間的MySQL了,難免拿他們倆對比下,先上個直觀的效果作為參考

MySQL——

mysql> select * from t;
+------+--------+------+
| id | name | age |
+------+--------+------+
| 1 | 張三 | 30 |
| 2 | 李四 | 25 |
| 3 | 王五 | 12 |
| 4 | 趙六 | 57 |
+------+--------+------+
4 rows in set (0.00 sec)

MongDB——

{ "_id" : ObjectId("4cbfdaabab5abedbd22f0bc3"), "name" : "mongodb" }
{ "_id" : ObjectId("4cbfdaabab5abedbd22f0bc3"), "x" : 3 }
{ "_id" : ObjectId("4cbfdce3ab5abedbd22f0bc4"), "x" : 4, "j" : 1 }
{ "_id" : ObjectId("4cbfdce3ab5abedbd22f0bc5"), "x" : 4, "j" : 2 }
{ "_id" : ObjectId("4cc10b58dbf9242801dfacae"), "author" : "joe", "created" : "Sat Mar 28 2009 00:00:00 GMT+0800 (CST)", "title" : "Yet another blog post", "text" : "Here is the text...", "tags" : [ "example", "joe" ], "comments" : [
{
"author" : "jim",
"comment" : "I disagree"
},
{
"author" : "nancy",
"comment" : "Good post"
}
] }



下面在幾個基礎方面的東西做下對比:

1.儲存的區別

MySQL——表資料以記錄為單位,每條記錄以N個欄位列屬性組成,每條記錄有相同的欄位屬性

MongDB——文件資料以陣列為單位,每條記錄以N維陣列組成,每個陣列鍵值數不一定相同


2.命令工具的區別

MySQL——mysql-xxx/bin/下的mysql命令和perl工具有39個,在這就不列舉了

MongDB——mongodb-linux-xxx/bin/下的工具只有11個,下面這些二進位制命令從命名就可初步瞭解他們的作用,具體用法請參考官網指南

bsondump
mongo
mongod
mongodump
mongoexport
mongofiles
mongoimport
mongorestore
mongos
mongosniff
mongostat

3.命令列的區別

MySQL——在"mysql>"提示符下insert,update,delete,select,create,drop,alter,show...

MongDB——在">"提示符下db.dbname.save(),db.dbname.insert(),db.dbname.update,db.dbname.remove(),db.dbname.find(),show...

我們可以看出,MongDB都是使用函式呼叫的方式操作文件的;熟悉Memcached的同學看到find()方法的使用會覺得很熟悉,where 條件語句是透過在find()函式中指定的,order by,limit是透過find()函式的sort()和limit()函式處理的


後面管理的章節我還沒有看呢,有興趣的同學請重定向到^_^

另外MongoDB也支援主從Master-Slave架構和有限的雙主Master-Master架構,不過目前只支援2個節點間的相互監聽,等我嘗試了再寫...


總結下,網上看了些資料大多是拿MongDB和MySQL做比較的,前面我也是。其實這兩個資料庫並非一個必須替代掉另一個,在接觸了MongoDB後感覺它不一定適應所有業務,應該是某種特殊業務更能體現出他的價值

所以,雖然國外一些網站已經陸續遷移到MongoDB,我們卻不一定著急動手,技術還不是很成熟,會有哪些不穩定因素還有待觀察考證。未來 一段時間內估計會是這兩者合作的天下,徹底拋棄MySQL或者Oracle是不理智的,我們現在要做的是逐漸過渡到MySQL+MongDB,發揮他們的 最大功效


一點心得,希望大家多多指教


come from:http://mckobe23.itpub.net/category/29123/66613



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-686961/,如需轉載,請註明出處,否則將追究法律責任。

相關文章