说说mongodb和sql数据库区别——存储的区别
以下内容为原创,也仅是我个人的理解,要是理解的不对,请指正。
mongodb与sql存储上的最大的区别,我个人认为是一个没有表结构,一个有表结构,在表结构。

mongo的collection相当于sql的table,但collection只是document的集合,它对document并没有约束的,比如collection1中有doc1和doc2两个document,doc1和doc2的字段可以不同,相同的字段数据类型也可以不一样。sql有表结构,严格的定义了每一行有多少列,每一列是什么数据类型,所以每一行的长度,每一列的偏移量是可以算出来的。

mongo既然没有表结构概念,那自然就没有什么表结构改变了。这里要注意的是,对已经存在的document增加一列,可能导致这个document变大,原来的位置放不下,这时候程序会把这个document移动到另外一个能放下的位置。

sql的表是有表结构概念,既然是结构,那它就具有了约束性,表结构定义了每一行有多少个列,每个列的数据类型是什么(就是说结构定下来了,每一行占的长度就是固定的了,比如一行有两个类型为int的列,那行的长度就为64bit)。sql表结构改变时(上图是增加了列4),要把后面的数据依次往后移,腾出空间给前面的行,结构改变后,每一列的长度还是一样。
总的来说,sql改变表结构的时候,是一次完成磁盘IO的操作(表数据多的话会很慢),mongo会把磁盘IO分散了,要是不动旧数据就不会增加额外的IO,但总的来说,mongo的IO操作还是比sql少。

浙公网安备 33010602011771号