开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2700人左右 1 + 2 + 3 + 4 +5 + 6 + 7 + 8 + 9) )(1 2 3 4 5 6群均已爆满,新人进7群400+,8群,9群)
最近没有怎么写MongoDB的部分,本周开始连续的搞MongoDB的部分,搞一个MongoDB宣传系列,系列将主要聚焦在MongoDB的核心,设计与建模部分。
建模与设计
在本人8年的MongoDB的工作和学习中,已经深刻理解到MongoDB的精髓,设计,设计,还是TM的设计。在去年MongoDB的CTO,技术负责人在MongoDB的大会上的轰炸式的宣传中,提高MongoDB的性能的方式或者说重点,已经深入人心。那就是MongoDB的设计,在理解业务后,如何设计出一个适合当前业务的“集合”结构,对于提高MongoDB是非常重要的,这点传统的DBA可能有这个意识,但无法理解其中的玄妙。
本系列将探讨的是
1 更好的迎接面向对象的继承性和多态性
2 在模式之间迁移如何更简单,让应用停机的时间更少
3 更好的支持结构化的数据
4 基于基本操作的复杂更新
5 如何利用传统数据库经常谈到的,两阶段提交协议在MongoDB中应用乐观更新的模式
如果你从未接触过MongoDB,那么你将开启听天书的模式,坐好,抓紧你身边的扶手,系紧安全带发车了。
1 今天我们讨论,MongoDB 如何更好的迎接面向对象的继承性和多态性
首先我们统一思想,MongoDB是一个彻头彻尾的“无模式”数据库,这决定了MongoDB中的集合--“表”并不强制每行数据的结构是一致的。那么什么是多态性,这里指的是,在大部分行都具有相同的属性,但又有自己的特殊的属性的情况下,我们称之为,多态性。
在传统的数据库中,无论你是ORACLE, SQL SERVER, MYSQL,还是现在最红的PostgreSQL,在表设计中,统统逃不过一个命运,在设计中要不进行表集成方式的设计,要不就进行单表集成模式的设计,术语--范式。
当然在MongoDB出现之前,一些想要摆脱这些数据库在设计上的限制,出现了一种设计的模式,实体--属性--值 的方式来进行表的设计,我们举一个简单的例子
实体 ID (Entity ID) | 属性 ID (Attribute ID) | 值 (Value) |
---|---|---|
1 | 1 车身 | 掀背 |
1 | 2 (尺寸) | B 级别 |
1 | 3 (价格) | $288,000 |
2 | 1 (颜色) | 蓝色 |
2 | 3 (价格) | $300,000 |
2 | 2 (尺寸) | C级别 |
这样的方式有什么好处,主要就是灵活,将传统数据库的固定模式,列转行。将表的结构数据化。 缺点也是显而易见的:
1 查询复杂
2 数据类型处理麻烦(还是传统数据库的罪过)
3 索引的效率低下
4 数据的完整性难以保证
基于EAV 模式的需求,这就是产生MONOGDB的一部分原因,让数据存储运算更加的灵活,但还保留数据库的特性,我想着就是MongoDB最早的初衷,或许这是一群爱自由的人。
那么有人会说,到底MongoDB的多态性,有什么好处? 我们举一些例子
好处可以总结为
1 简化数据模型: 无需为每种类型的实体创建单独的集合。可以将所有相关的实体存储在同一个集合中,通过一个公共字段(通常称为“类型”或“类别”)来区分不同的实体类型。这简化了数据模型,减少了集合的数量,使数据库更易于管理。
2 提高查询效率: 当需要查询所有类型的实体时,只需在一个集合上进行查询,而不需要在多个集合之间进行连接(Join)操作。连接操作在关系型数据库中是常见的性能瓶颈,而 MongoDB 通过多态性避免了这个问题,从而提高了查询效率。
3 方便应用程序开发: 应用程序可以更方便地处理不同类型的实体。可以根据文档中的类型字段来决定如何处理该文档,例如使用不同的类或函数来处理不同类型的实体。
4 易于扩展和修改: 当需要添加新的实体类型时,只需在集合中添加新的文档,并为其指定新的类型值即可,无需修改集合的 schema。这使得数据库更容易扩展和适应变化的需求。
此时应该有人跳出来,给一句! 说人话,你上面的我看不懂
那咱们就用最朴实无华的语言进行描述
1 原来咱们二维关系型数据库都是包子,把那个数据库包到皮里面,MongoDB可以理解为披萨,你想吃什么,就往那个面饼上放馅料,放多少吃多少。
2 原来包子里面的馅料比较均匀,每个包子里面都的有一个虾仁,现在MongoDB大披萨可不是,你做四种馅料在一个面饼上都可以,你可以是4分之一的,牛肉芝士,4分之一的奥尔良鸡肉,4分之一的夏威夷水果,4分之一的泰国榴莲。
3 原来你吃包子,你的分馅料,你吃一个猪肉三鲜的,他一定不能是牛肉西葫的,这披萨可不是,这口是肉的,下一口可能就是菠萝,具体看你咬哪里了
4 这包子你在大你能有包子屉大,这披萨可不是,你要多大咱们就马上让他变大,这张6寸,下张就10寸,扩展性刚刚的。
你看说着说着,说饿了,咱们看一下下面的一个例子,基于Json的格式,我们每个collection 都看着和其他的类似,但有自己独有的东西,你就像下面这个例子,一推的运动员登记表,里面可能有一半人,比赛完没有成绩,而另一半人有成绩,在传统数据库上怎么办,你就的有一半的成绩在这个列,都是NULL,可MongoDB不用,没有就不写就好了。
[
{
"_id": ObjectId("..."),
"type": "footballer",
"name": "Lionel Messi",
"age": 36,
"country": "Argentina",
"goals": 800,
"assists": 350
},
{
"_id": ObjectId("..."),
"type": "basketballer",
"name": "LeBron James",
"age": 38,
"country": "USA",
"points": 38000,
"rebounds": 10000,
"assists": 10000
},
{
"_id": ObjectId("..."),
"type": "swimmer",
"name": "Michael Phelps",
"age": 38,
"country": "USA",
"style": "Butterfly",
"best_time": "49.82s"
}
]
当然他本身也有主键,基于分布式的概念,这里大家记住,最好使用MongoDB自己给你的主键 ObjectID 作为默认的物理主键,如果你想要自己弄一个主键也不是不可以,建议你就在objectID
建立一个collection的唯一索引就可以了。
写到这里,暂停一下,咱们后面继续见面,普及Mongo大DB。
MongoDB 相关文章
MongoDB 合作考试报销活动 贴附属,MongoDB基础知识速通
MongoDB 使用网上妙招,直接DOWN机---清理表碎片导致的灾祸 (送书活动结束)
数据库 《三体》“二向箔” 思维限制 !8个公众号联合抽奖送书 建立数据库设计新思维
MongoDB 是外星人,水瓶座,怎么和不按套路出牌的他沟通?
17000多张MongoDB表的锅 自动分析删除表数据难题--从头到尾的处理过程(文尾有MongoDB开发规范)
MongoDB 插入更新数据慢,开发问哪的问题?附带解决方案和脚本
MongoDB 挑战传统数据库聚合查询,干不死他们的MongoDB 2023纽约 MongoDB 大会 -- 我们怎么做的新一代引擎 SBE Mongodb 7.0双擎力量(译)
MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模
MongoDB 双机热备那篇文章是 “毒”
MongoDB 会丢数据吗?在次补刀MongoDB 双机热备
MONGODB ---- Austindatabases 历年文章合集
MySQL相关文章
"DBA 是个der" 吵出MySQL主键问题多种解决方案
MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验
用MySql不是MySQL, 不用MySQL都是MySQL 横批 哼哼哈哈啊啊
MYSQL --Austindatabases 历年文章合集
PolarDB 相关文章
PolarDB 答题拿-- 飞刀总的书、同款卫衣、T恤,来自杭州的Package(活动结束了)
PolarDB for MySQL 三大核心之一POLARFS 今天扒开它--- 嘛是火星人
PolarDB-MySQL 并行技巧与内幕--(怎么薅羊毛)
PolarDB 并行黑科技--从百套MySQL撤下说起 (感谢8018个粉丝的支持)
PolarDB 杀疯了,Everywhere Everytime Everydatabase on Serverless
POLARDB 从一个使用者的角度来说说,POALRDB 怎么打败 MYSQL RDS
PolarDB 最近遇到加字段加不上的问题 与 使用PolarDB 三年感受与恳谈
PolarDB 从节点Down机后,引起的主从节点强一致的争论
PolarDB serverless 真敢搞,你出圈了你知道吗!!!!
PolarDB VS PostgreSQL "云上"性能与成本评测 -- PolarDB 比PostgreSQL 好?
临时工访谈:PolarDB Serverless 发现“大”问题了 之 灭妖记 续集
临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一
PolarDB for PostgreSQL 有意思吗?有意思呀
PolarDB Serverless POC测试中有没有坑与发现的疑问
临时工说:从人性的角度来分析为什么公司内MySQL 成为少数派,PolarDB 占领高处
POLARDB -- Ausitndatabases 历年的文章集合
PolarDB for PostgreSQL 有意思吗?有意思呀
临时工访谈系列
国内最大IT服务公司-招聘DBA “招聘广告”的变化--分析与探讨
OceanBase 相关文章
跟我学OceanBase4.0 --阅读白皮书 (OB分布式优化哪里了提高了速度)
跟我学OceanBase4.0 --阅读白皮书 (4.0优化的核心点是什么)
跟我学OceanBase4.0 --阅读白皮书 (0.5-4.0的架构与之前架构特点)
跟我学OceanBase4.0 --阅读白皮书 (旧的概念害死人呀,更新知识和理念)
OceanBase 学习记录-- 建立MySQL租户,像用MySQL一样使用OB
临时工访谈:OceanBase上海开大会,我们四个开小会 OB 国产数据库破局者
临时工说:OceanBase 到访,果然数据库的世界很卷,没边
数据库信息速递 阿里巴巴的分布式数据库OceanBase旨在进军中国以外的市场 (翻译)
PostgreSQL 相关文章
PostgreSQL 什么都能存,什么都能塞 --- 你能成熟一点吗?
全世界都在“搞” PostgreSQL ,从Oracle 得到一个“馊主意”开始PostgreSQL 加索引系统OOM 怨我了--- 不怨你怨谁
PostgreSQL “我怎么就连个数据库都不会建?” --- 你还真不会!
病毒攻击PostgreSQL暴力破解系统,防范加固系统方案(内附分析日志脚本)
PostgreSQL 远程管理越来越简单,6个自动化脚本开胃菜
PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆
PostgreSQL 分组查询可以不进行全表扫描吗?速度提高上千倍?
POSTGRESQL --Austindatabaes 历年文章整理
PostgreSQL 查询语句开发写不好是必然,不是PG的锅
PostgreSQL 字符集乌龙导致数据查询排序的问题,与 MySQL 稳定 "PG不稳定"
PostgreSQL Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)
PostgreSQL 玩PG我们是认真的,vacuum 稳定性平台我们有了
PostgreSQL DBA硬扛 垃圾 “开发”,“架构师”,滥用PG 你们滚出 !(附送定期清理连接脚本)
SQL SERVER 系列
SQL SERVER 如何实现UNDO REDO 和PostgreSQL 有近亲关系吗
SQL SERVER 我没有消失,SQL SERVER下一个版本是2025 (功能领先大多数数据库)
SQL SERVER 2022 针对缓存扫描和Query Store 的进步,可以考虑进行版本升级
阿里云系列
阿里云数据库产品权限设计缺陷 ,六个场景诠释问题,你可以做的更好?
阿里云数据库--市场营销聊胜于无--3年的使用感受与反馈系列
阿里云数据库产品 对内对外一样的卷 --3年阿里云数据库的使用感受与反馈系列
阿里云数据库使用感受--客户服务问题深入剖析与什么是廉价客户 --3年的使用感受与反馈系列
阿里云数据库使用感受--操作界面有点眼花缭乱 --3年的使用感受与反馈系列