先说我对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更好的选择?