来自一个朋友圈,

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已经比较成熟,可以在实际操作中多考虑下如何应用

posted on 2015-12-12 23:59  meslog  阅读(263)  评论(0编辑  收藏  举报