对象数据库Nosql的在实际应用中的几个优点

2019-05-25南京培训网

对象数据库Nosql的在实际应用中的几个优点

 

本篇仅以mongodb作为nosql讨论内容。

 

结构性数据库SQL,在实际应用的时候,存在几种常见的问题。

1、结构化设计,在表结构改动时,会很困难。

2、多对多的关系运用,需要额外补充数据表,记录M-N关系,表的数量会增长。

3、分片存储,由于表结构的ID自增长,在每个片的存储中分别自增,数据合并ID冲突,需要独立的解决方案。

 

 

mongodb数据库对以上问题的解决方案

1nosql数据库是以k-v模式存储,每条记录为一份文档,可以任意修改每份文档的内容格式,其存储可以灵活应对外界的变化。

2M-N的对应关系解决,举例说明:

一个数据线,既属于手机配件类别,也属于电脑配件类别,在查询2种类别的时候,都要展示出这个数据线记录。

SQL中的设计如下

Category类别表

cat_id int

cat_name varchar(20)

Insert into category values(1,'电脑配件'),(2,'手机配件');

 

Product产品表

product_id int

product_name varchar(50)

Insert into product values(1,'xx数据线')

 

Product_Category对应关系表

pc_id int

product_id int

category_id int

此处建立对应关系

Insert into product_category values(1,1,1),(2,1,2);

我们需要3张表,且m-n的对应关系表中,需要大量的冗余存储。 m*n的存储量。

查询sql需要select *** from xx join2个表,导致索引失效且创建临时表(temp table , file sort),效率问题解决困难。

 

 

mongodb中,可以这样存储

Category分类集

{_id : xxxxxxxxxxx1, name: '电脑配件'}

{_id : xxxxxxxxxxx2, name: '手机配件'}

 

 

Product产品集

{_id : ObjectId(), name: '数据线', cat_ids[xxxxxxxxxxx1,xxxxxxxxxxx2,...]}

此处使用了mongodb的特性:k-v的键值存储方案,是可以为array类型的多数据,数据存储的时候减少了一个表,3个字段的维护,在查询的时候,避免了多表join,使用单表查询, find({cat_ids:'xxxxxxxxxxx1'}) 即可查询出该类别的相关数据。

 

3、数据分片

mongodb_id使用的是ObjectId自动编号规则,以12字节的BSON串格式存储(例如5349b4ddd2781d08c09890f4),其中规则如下

4字节为unix time时间戳 (5349b4dd

3字节机器识别码 (d2781d

2字节为进程id 08c0

3字节随机数 (9890f4

该存储方案避免了id自增长的分片问题,ObjectId已经存储hash信息,极大的降低系统设计的负责度。

 

 


[ 数据库工程师培训 ]   18913820670

学徒·精彩推荐

学徒·培训新闻