还是在2008年的时候,F5同学就和我提起过key-value的问题。这都2011年了,当时我没有太明白,只朦胧的觉得好像在说缓存 最近有开发又和我提起了,我必须得关注下,否则我就out了,呵呵呵 马上搜了下,目前吵的最热的是由10gen开发维护的MongDB数据库,随机down了体会下
还是在2008年的时候,“F5”同学就和我提起过key-value的问题。这都2011年了,当时我没有太明白,只朦胧的觉得好像在说缓存
最近有开发又和我提起了,我必须得关注下,否则我就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个,下面这些二进制命令从命名就可初步了解他们的作用,具体用法请参考官网指南
http://www.mongodb.org 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个,下面这些二进制命令从命名就可初步了解他们的作用,具体用法请参考官网指南
http://www.mongodb.org 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,发挥他们的 最大功效
延伸阅读:什么是NoSQLNoSQL会取代SQL数据库吗?2010年10大热门的开源NoSQL服务器软件