NoSQL的一个主要类型就是文档型NoSQL,例如 MongoDB,使用 json 结构存储数据,不需要事先定义好记录结构,自由添加删除记录中的某项,非常灵活
通过下面的这个场景,可以很好的看到NoSQL的便利性
场景 联系人列表
sql 的实现方式
我们要先定义好联系人的表结构,如
id (主键ID)
title (标题)
firstname (姓)
lastname (名)
gender (性别)
telephone (电话)
email (邮箱)
address1 (地址1)
address2 (地址2)
city (城市)
现在出现了新问题,很多人都有多个电话号码,例如 2个手机号,1个工作电话,或者其他,这时,为了可扩展性,我们需要单独建立一张电话表,就不关心联系人有多少个电话了
contact_id(联系人ID)
name (例如座机号,工作手机等)
number (电话号码)
同样的,邮箱、地址 也有这个问题,还按照上面的方式,新建 email表 和 address表
但很快,新问题又出现了,我们需要记录联系人的社交账号、他的喜好……,我们只好新建各种表来对应
这就造成了数据库管理员和开发人员都有点麻烦了,需要经常修改数据库结构,需要很多表的关联查询等
用sql来记录这种碎片化的数据就稍显费力了
NoSQL 的实现方式
每个联系人信息都是一个 json 数据,联系人列表就是一个 json 数据的集合,存储在一个文档里
例如
{
name: [ "Billy", "Bob" ],
company: "Corp",
jobtitle: "Data Management",
telephone: {
mobile: "9876543210",
work: "2244668800"
},
email: {
personal: "bob@mail.net",
work: "bob@mail.com"
},
address: {
home: {
line: "10 Non-Existent Street",
city: "Nowhere",
country: "Australia"
}
},
twitter: '@bobsfakeaccount',
note: "Don't trust this guy"
}
例如这个联系人多了一个电话号,直接在 telephone 中添加一个新数据项就好,例如
telephone: {
home: "0123456789",
mobile: "9876543210",
work: "2244668800"
}
又例如,现在需要记录用户的微信号了,直接在联系人的 json 中新加一个微信号的数据项即可
通个这个场景,可以看到在某些场景使用 NoSQL 会更便利一些,NoSQL已经比较成熟,可以在实际操作中多考虑下如何应用