MongoDB系列12:MongoDB电子商务产品目录模型设计

邓开表同学实战MongoDB系列文章,非常不错,赞!大力推荐!

本文是第12篇,主要讲述MongoDB电子商务产品目录模型设计实战操作,非常值得一看。

MongoDB系列文章:

MongoDB安全实战之Kerberos认证

MongoDB Compass--MongoDB DBA必备的管理工具

MongoDB安全实战之审计

MongoDB安全实战之SSL协议加密

MongoDB安全实战之网络安全加固

MongoDB索引的介绍

MongoDB存储引擎

MongoDB集合的增量更新

MongoDB数据迁移到MySQL

Change Streams构建实时同步数据流

Munin监控MongoDB



电子商务的产品目录必须具有存储不同属性的许多不同类型的对象的能力。这些类型的数据集合与MongoDB的数据模型非常兼容。

对于关系型数据库,有几个解决这个问题的解决方案,每个解决方案都有不同的性能配置文件。以下讲述关系型数据库的几个解决方案以及MongoDB的解决方案。

1、关系型数据模型

1) 具体表继承

在关系模型中,一个解决方案就是为每个产品类别创建一个表。比如:视音产品类别;其中电影产品表product_film是视音产品类别的一个继承。

以下两个原因限制了模型的灵活性:

·必须为每个新类别的产品创建新表;

·必须为产品的类型关联所有查询;

2) 单表模型

这个模型使用所有产品类别的单个表,并在需要存储新产品类型的数据时添加新列。

这个模型比表继承更灵活,它允许单个查询跨越不同的产品类型,但是牺牲了空间。

3) 多重表继承

在关系模型中,可以使用多表继承模型表示通用的产品表中的共性,个别类型产品表中有一些变化。

多表继承比单表模型更具空间效率,比具体表继承更灵活一些。然而,该模型需要昂贵的连接操作来获得与产品相关的所有相关属性。

4) 实体属性值模型

关系建模的最终实体模式是实体属性值模式,可以理解为模型的元数据表,在其中创建产品数据的元模型。在这种方法中,只需要维护一个具有三列表,例如,entity(实体),attribute(属性),value(值)。

这个模式是完全灵活的:

·任何实体都可以有任何属性集合;

·新产品类别不需要对数据库中的数据模型进行任何更改;

缺点:所有非平凡查询都需要大量的连接操作,从而导致较大的性能损失。

2、非关系型数据模型

由于MongoDB是一个非关系型数据库,所以产品目录的数据模型可以从这种额外的灵活性中获益。最好的模型使用单个mongoDB集合来存储所有的产品数据,这类似于单表模型的关系模型。MongoDB的动态模式意味着每个文档不需要遵循相同的模式。因此,每个产品的文档只需要包含与该产品相关的属性。

模式

在文档的开头,架构必须包含一般的产品信息,以便于搜索整个目录。然后,包含在产品类型之间变化的字段的详细子文档。例如,一个视音产品示例如下:

对于一个电影产品有领域,一般的产品信息,航运和定价,但也有不同的细节子文档。如下:

小结:

在非关系模型中,MongoDB可以拥有多个值(即数组)的字段,而不需要对字段或值的数量进行任何限制(比如关系模型中的genre_0和genre_1),也不需要连接操作。相比关系模型而言,这节省了昂贵的连接开销。

原文发布于微信公众号 - 大数据和云计算技术(jiezhu2007)

原文发表时间:2018-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏happyJared

Python + Selenium 自动发布文章(四):加入 bat 脚本

  这是本系列的第四篇文章,同时也是最后一篇。有关于Bat脚本和自动发布博客的内容,不太了解的可以先看看之前写的文章。这篇文章是介绍如何整合Bat脚本来一键自动...

1332
来自专栏CSDN技术头条

轻博客始祖Tumblr:哈希以支撑2.3万Blog请求/秒

【编者按】Tumblr是目前全球最大的轻博客网站,也是轻博客网站的始祖。当下已有超过1.96亿博客,930亿帖子,每秒2万3千请求。近日,该公司网站可靠性工程师...

2215
来自专栏Laoqi's Linux运维专列

Ansible线上部署出现中文乱码

2622
来自专栏平凡文摘

你真的很熟分布式和事务吗?

1902
来自专栏玉树芝兰

如何用Python批量提取PDF文本内容?

本文为你展示,如何用Python把许多PDF文件的文本内容批量提取出来,并且整理存储到数据框中,以便于后续的数据分析。

3972
来自专栏存储

你真的很熟分布式和事务吗?

微吐槽 hello,world. 不想了,我等码农,还是看看怎么来处理分布式系统中的事务这个老大难吧! 本文略长,读者需要有一定耐心,如果你是高级码农或者架构师...

2329
来自专栏Crossin的编程教室

喜大普奔!Django官方文档终于出中文版了

之前对于 Django 的学习我一直推荐看官方文档,但不得不加上一句“如果你英语水平允许的话……”。现在总算是等来好日子了。各位想向网站/服务器开发方向进阶的同...

1701
来自专栏互联网杂技

Propel: 由Node.js之父创建的JavaScript科学计算库

Propel 是一个新推出的 JavaScript 科学计算库,它使用图形处理器来支持 JavaScript 中的机器学习和科学计算。

1154
来自专栏IT大咖说

Elastic探秘:技术海洋里遗落的珍珠

内容来源:2018 年 06 月 30 日,Elastic工程师与布道师曾勇在“Elastic Meetup 南京交流会”进行的《Elastic探秘之遗落的珍珠...

1053
来自专栏腾讯防水墙

以变制变 - 前端动态化代码保护方案探索

本文分享了腾讯防水墙团队关于机器对抗的动态化思路,希望能抛砖引玉,给现在正在做人机对抗的团队一些启发。

78618

扫码关注云+社区

领取腾讯云代金券