情况:
- 单一视图应用程序 🔍
- 融合任何类型的数据 🌐
- 动态模式以便迭代 🔀
- 表达性查询语言、索引和聚合以查找和过滤数据 🔍
挑战:
- 多样的数据类型:从不同系统中协调模式很困难 🤯
- rigid 模式:无法更改模式 📛
缺点:
- 只能有细粒度的数据模式 📋
- 无法添加临时查询 🚫
- 无法添加辅助索引 🚫
解决方案: MongoDB 文档模型 💥
- 使用任何类型的数据(数字、字符串、二进制数据、数组) 🔢🔤🔣🔢
- 动态模式:不需要所有字段都一样 🔀
- 查询示例:索引以查找和过滤数据 🔍
- 索引: pet
{
"name": "Peter"
}
{
"name": "Mary",
"pet": "cat"
}
结果:
- 只能查询 Mary,因为她在索引中有 pet 😕
属性模式: 🔑
- 子集:包含许多相似字段的大型文档 📜
- 将子集数据移动到键值子文档中 📂
- 在少量文档的子集中对字段进行排序 🗂️
优势:
- 避免创建大量索引并减少性能 💪
属性模式用例 1:保险公司 🏦
- 将数据从多个来源聚合到一个中心位置 🌐
- 获得客户的 360°视图 🔍
- 以较低的成本提供更好的客户服务 💰
- 快速创新 🚀
之前:
{
release_Italy: ISODate("1977-10-20T01:00:00+01:00"),
release_France: ISODate("1977-10-19T01:00:00+01:00"),
release_UK: ISODate("1977-12-27T01:00:00+01:00"),
}
索引:
{release_Italy: 1}
{release_France: 1}
{release_UK: 1}
之后:
{
releases: [
{
location: "USA",
date: ISODate("1977-05-20T01:00:00+01:00")
},
{
location: "France",
date: ISODate("1977-10-19T01:00:00+01:00")
}
],
}
索引:
{ "releases.location": 1, "releases.date": 1}
非确定性命名: 🔖
- 轻松添加额外的限定符 🔍
- 明确说明原始字段和值的关系 📝
{
"specs": [
{ k: "volume", v: "500", u: "ml" },
{ k: "volume", v: "12", u: "ounces" }
]
}
索引:
{"specs.k": 1, "specs.v": 1, "specs.u": 1}
属性模式用例 2:服装 👕
- 以 small、medium、large 表示尺寸 📏
- 部分服装系列以数字表示(11、12、13) 🔢
- 特征很少在资产中共同存在 🎨
产品目录中有相似的属性,如名称、供应商、制造商、原产地 🏭
- 为数据提供良好的结构 🗂️
{
"specs": [
{ k: "size", v: "11", u: "CHINA" },
{ k: "size", v: "large", u: "USA" }
]
}
索引:
{"specs.k": 1, "specs.v": 1, "specs.u": 1}
Reference:
https://www.mongodb.com/developer/products/mongodb/attribute-pattern/
Building with Patterns: The Attribute Pattern
https://www.mongodb.com/solutions/use-cases/single-view
Single View applications
https://www.mongodb.com/blog/post/building-with-patterns-a-summary
Building with Patterns: A Summary
https://www.mongodb.com/blog/post/building-with-patterns-the-approximation-pattern
Building with Patterns: The Approximation Pattern
Editor
Danny Chan, specialty of FSI and Serverless
Kenny Chan, specialty of FSI and Machine Learning
Top comments (0)