你们如何理解mongoDB和SQL数据的区别?

bandaoyu 2018-03-28 11:59:22
先说我对mongoDB的理解,

mogonDB 是文档数据库,所谓的文档,就是拥有一定数据格式的数据块。那么mongoDB的文档就是BSON,一条记录就是一个BSON,既一个文档。


BSON是JSON发展而来,为了方便说明,下面我用JSON来代替BSON继续对MongoDB理解。


关于mongoDB的schemaless(无模式)的理解,可以这样理解,既因为一条记录是一个文档,JSON ,JSON是灵活的,成员的增加都不影响其读取,也不影响其他JSON文件的读取,所以这个特性构成了mongoDB的灵活的schemaless。

index  | user | sex |  age  |  class


1 Lilei f 12 3

2 Xiaoming m 18 2

3 Duba f 16 7



例如:SQL数据的表和记录是这样的




mongoDB的“表”--集合和“记录”--文档是这样的


{

“index”:1,

“user”:Lilei,

“sex”:f,

“age”:12,

“calss”:3

}



{

“index”:2,

“user”:Xiaoming,

“sex”:m,

“age”:18,

“calss”:2

}



{

“index”:3,

“user”:Duba,

“sex”:f,

“age”:16,

“calss”:7

}


此时需求变更,多一个属性 country,SQL只能改表增加1列



index | user | sex | age | class | country



1 Lilei f 12 3 Nan

2 Xiaoming m 18 2 Nan

3 Duba f 16 7 Nan

4 Huang m 21 7 china

5 Guan f 17 2 India




而mongoDB 因为每一条记录都是独立的,需求的变更只需在后续的记录中体现即可


{

“index”:1,

“user”:Lilei,

“sex”:f,

“age”:12,

“calss”:3

}



{

“index”:2,

“user”:Xiaoming,

“sex”:m,

“age”:18,

“calss”:2

}



{

“index”:3,

“user”:Duba,

“sex”:f,

“age”:16,

“calss”:7

}



{

“index”:4,

“user”:Huang,

“sex”:m,

“age”:21,

“calss”:7,

“country”:china

}



{

“index”:4,

“user”:Guan,

“sex”:f,

“age”:17,

“calss”:2,

“country”:India

}




还有可以嵌套





{

“index”:4,

“user”:Guan,

“sex”:f,

“age”:17,

“calss”:2,

“country”:India,

"course":{

"english":98,

"chinese":88,

"math":78

}


}





这个嵌套行列式数据库就无能为力了

所以mongoDB灵活。我理解的是否正确




自己还存在的疑问:



1、关于mongoDB的性能,比较难以理解的是,因为每个文档的结构都有可能不同,那么它是如何做到查询高效呢?



比如我要查询country=china的记录,那么因为有些记录没有country这个内容,它去查找的时候,是不是应该多一步查找是否存在country这个属性,然后再比对country的值,那么多了一步判断,那速度不就比SQL慢了吗?



2、postgrepSQL正在崛起,而且支持了jsonb,也就是说有noSQL功能了,网上不少人从mongoDB迁到postgrepSQL,还有的人劝选择坑更少的postgrepSQL,是不是postgrepSQL是比mongoDB更好的选择?
...全文
1555 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bandaoyu 2018-04-23
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
嗯,查了一下速度对比,好像我写反了?????
嗯,感谢回复哈, 资料不是我抄的,是我自己的理解,我对mongoDB不熟悉,所以过来问问为的理解是否正确。 关系数据库的索引一般是B-TREE结构。 建立索引的确实可以“后查询{country: "巴拉巴拉"} 的时候,它是从索引中直接找到记录编号,再从记录编号直接换算出数据块位置,直接取出具体的 BSon 对象“, 那么没有建立索引的是不是还是需要”比如我要查询country=china的记录,那么因为有些记录没有country这个内容,它去查找的时候,是不是应该多一步查找是否存在country这个属性,然后再比对country的值,那么多了一步判断,那速度不就比SQL慢了吗“ 速度对比,哪个和哪个的速度写反了? 一起研究研究,一起进步
  • 打赏
  • 举报
回复
嗯,查了一下速度对比,好像我写反了?????
  • 打赏
  • 举报
回复
引用 楼主 bandaoyu 的回复:
比如我要查询country=china的记录,那么因为有些记录没有country这个内容,它去查找的时候,是不是应该多一步查找是否存在country这个属性,然后再比对country的值,那么多了一步判断,那速度不就比SQL慢了吗?
唉!你吵了那么多 mongodb 的资料,但是对于 mongodb 的基本特征还需不理解啊。不过这可能说明你对于传统数据库技术的索引也根本不了解,传统技术不了解,也就不容易了解新技术。 mongodb 支持索引,索引它可以对 country 进行索引。然后查询{country: "巴拉巴拉"} 的时候,它是从索引中直接找到记录编号,再从记录编号直接换算出数据块位置,直接取出具体的 BSon 对象。
引用 楼主 bandaoyu 的回复:
postgrepSQL正在崛起,而且支持了jsonb,也就是说有noSQL功能了,网上不少人从mongoDB迁到postgrepSQL,还有的人劝选择坑更少的postgrepSQL,是不是postgrepSQL是比mongoDB更好的选择?
据说 postgrepSQL 的性能跟屎一样,比 MySql 尚且慢数倍,更怎么跟 mongodb 相比呢?
方丈的寺院 2018-04-21
  • 打赏
  • 举报
回复
推荐一篇Nosql的整体概括,包括mongo,可以对比看下 http://mp.weixin.qq.com/s?__biz=MzI4NjI3MDc1NA==&mid=2247483674&idx=1&sn=0d98432b7b775625febe4c5cac771da0&chksm=ebde3557dca9bc411e23baadb1c3c7de08b1c61b6b2dd186c63ead22d272d899bc690819bad9&mpshare=1&scene=23&srcid=0421nbhtO5iVa6737z37NTzv#rd
crynono 2018-03-30
  • 打赏
  • 举报
回复
没了解过postgresql,不过好像是支持对象吧,有发展趋势
bandaoyu 2018-03-30
  • 打赏
  • 举报
回复
引用 1 楼 crynono 的回复:
简单来说就是海量数据时仍然有良好的读性能,mongodb的分片功能,水平扩展的机制,这个技术好像其他没多少家有吧
postgrepSQL 与之对比如何
crynono 2018-03-29
  • 打赏
  • 举报
回复
简单来说就是海量数据时仍然有良好的读性能,mongodb的分片功能,水平扩展的机制,这个技术好像其他没多少家有吧

1,747

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧