`
javandroid
  • 浏览: 25557 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

Mongo设计原则

 
阅读更多
Collection 的单个 doc 有大小上限,现在是 16MB,这就使得你不可能把所有东西都揉到一个 collection 里。而且如果 collection 结构过于复杂,既会影响查询、更新效率,也会造成维护困难和操作风险。你有尝试过手一抖就把一个 doc 不小心存成 null 的么,反正我做过,要是一个人所有信息都在这个 collection 里面,那感觉一定相当酸爽吧。

一般的原则是:

按照查询方式来聚类

需要经常一起读取的数据放一起.
在逻辑上关系紧密的信息放在一起。
有 map-reduce/aggregation 需求的数据放在一起,这些操作都只能操作单个 collection。
按照数据量来拆分

如果发现要在 collection 里面用数组,数组长度还会不断增加,那么应该把数据内容放到一个专门的 collection,每条数据都引用当前这个 doc 的主键(就像 mysql 的 1..N 外键依赖一样)。
如果发现某个 doc 层次过深(超过 2 层),八成得考虑要拆分了,要不然性能和可维护性都会有问题。
按照有表结构的方式来设计

MongoDB 是没有表结构这个概念的,但是实际使用的时候,很少说一个 collection 里面存在各式各样结构的 doc,如果发现 doc 的结构差别越来越大了,那么应该考虑怎么抽象成类似结构,把变化的东西扔到其他 collection 去,用外键依赖的方式互相引用。

比如设计一个用户系统,user collection 应该放 name 等常用的信息,也应该放 lastLoginAt 这些仅跟 user 相关的东西,或许应该把用户有哪些访问权限的信息也放进来,但是不要放用户的登录日志这种信息会不断增加的信息。

至于 user 之间的关系是否存在 user collection 则需要讨论。假如仅仅需要存储用户间的关系,记录下好友的 uid 就行,而且好友数量也不太大,几百个最多了,那么我倾向于放在一个 collection 里。如果关系数据本身就比较复杂,或者好友数会上千,那我倾向于拆分。

另外,Mongodb 官方的 数据模型设计范式 很值得一读,推荐去好好看看。

转自:MongoDB倾向于将数据都放在一个Collection下吗?
分享到:
评论

相关推荐

    qinxuewu-mongo-web-select-master_java_

    9. **Web接口设计**:可能包括API设计原则,如RESTful API设计,以及JSON格式的数据交换。 10. **安全性**:考虑Web应用的通用性,项目可能还涉及到身份验证、授权以及数据安全的处理。 通过"mongo-web-select"这...

    Python库 | mongoquery-1.3.4.tar.gz

    它的设计原则是尽可能接近Python的自然语法,减少学习曲线,使得Python开发者能够更轻松地处理MongoDB数据。 在安装的压缩包`mongoquery-1.3.4`中,你将找到源代码和其他相关文件,包括`setup.py`用于安装,`README...

    PyPI 官网下载 | flask_rest_mongo-0.1.2-py3-none-any.whl

    `flask_rest_mongo`这个名字暗示了它可能是一个将Flask与RESTful API设计原则结合的库,用于构建基于MongoDB的Web服务。MongoDB是一个流行的文档数据库系统,常用于处理JSON格式的数据。REST(Representational ...

    postgres-mongo的对比1

    【标准化】:标准化是关系型数据库设计的重要原则,旨在减少数据冗余和提高数据一致性。Postgres遵循标准化原则,尤其是第三范式(3NF),以保持数据的整洁和无冗余。相比之下,MongoDB的数据模型更加灵活,允许存储...

    开源项目-mongodb-mongo-go-driver.zip

    它遵循Go的语义和设计原则,提供了同步和异步两种API,以适应不同的编程需求。Alpha 2版本可能包含了新的功能、改进和错误修复,为开发者提供了更稳定和强大的工具。 在`mongo-go-driver-master`这个压缩包中,我们...

    Rest-Api-Node-Mongo-源码.rar

    6. **RESTful API 设计原则**:遵循 REST 原则,如资源的命名规范、状态码的正确使用、HTTP 方法与 CRUD 操作的对应等。 7. **版本控制**:项目可能使用 Git 进行版本控制,了解基本的 Git 操作如 commit、push、...

    go 学习(成长之路) 这是一本学习Go 语言的教程,设计基础语法、redis、mongo、mysql、restfu.zip

    学习RESTful API设计,你需要理解REST原则,状态码,资源表示,以及如何在Go中使用net/http包构建一个完整的RESTful API服务器。 总的来说,这个《Go语言学习(成长之路)》教程提供了一个全面的学习路径,不仅教授Go...

    restapi-mongo

    在"restapi-mongo"项目中,API设计应遵循REST原则,使得每个URI对应数据库中的一个资源,HTTP方法则对应对资源的操作。 2. MongoDB简介 MongoDB是一款分布式文档数据库,支持JSON格式的文档存储,提供丰富的查询...

    Go-pogo采用Golang开发的PokémonGoAPI工具

    《深入解析Go-pogo:基于Golang的PokémonGo API工具》 在现代软件开发领域,Golang以其高效、简洁的语法以及强大的并发处理能力,逐渐成为开发工具库和API接口的重要选择。其中,Go-pogo就是一款用Golang编写的...

    30分钟学MongoDB系列——Mongo分布式架构篇(简介)

    因此,合理使用分布式架构时需要遵循两个原则:一是对于单机能处理的数据尽量不使用分布式系统处理;二是对于需要强一致性的数据,分布式系统可能不是最佳选择。 在企业级和互联网应用中,数据挖掘是一个关键环节。...

    mongodb官网文档集合

    在文档中,“Storing Data”部分深入讲解了如何在MongoDB中存储和检索数据,包括数据模型的设计原则、数据类型的选择以及数据操作的最佳实践。 #### 性能优化与监控 为了确保MongoDB系统的高效运行,文档提供了...

    jwt-express-mongo

    4. RESTful API设计:项目遵循RESTful原则,使用HTTP方法(GET、POST、PUT、DELETE等)来操作资源,使得API清晰且易于理解。 5. 错误处理与日志记录:Express.js的中间件可以捕获和处理错误,同时记录日志,便于调试...

    自己将项目的mongo 换成mysql 学习.zip

    - MySQL是关系型数据库(SQL),遵循ACID事务原则,使用表格和列的形式存储数据。 2. **数据模型转换**: - MongoDB的文档结构与MySQL的表格结构不同,需要设计合适的表结构来映射原有的MongoDB文档结构。 - ...

    Quick-Rest-API-Express-Mongo

    【标题】"Quick-Rest-API-Express-Mongo...通过"Quick-Rest-API-Express-Mongo",开发者可以快速构建一个稳定、可扩展的API服务,利用JavaScript和MongoDB的强大功能,同时遵循RESTful设计原则,实现高效的数据交互。

    bizvest-mongo-reactive-v1

    10. **Reactive Manifesto**: 反应式编程的基础理论,包括响应式、弹性、容错性和消息驱动等原则,理解这些原则有助于更好地设计和实现bizvest-mongo-reactive-v1项目。 通过深入研究这些知识点,开发者可以了解到...

    Express-Mongo-CRUD

    项目的接口设计遵循RESTful原则,使用不同的HTTP方法(GET、POST、PUT、DELETE)映射到不同的资源操作。例如,`/api/users`接口可能支持以下操作: - `GET /api/users`:获取所有用户。 - `POST /api/users`:创建新...

    MongoDB-manual.pdf

    - **设计原则**:提供了一些设计高效索引的原则。 - **案例分析**:通过案例分析展示了如何根据实际需求选择合适的索引。 #### 6.4 地理空间查询与2d索引 - **地理空间查询**:介绍了如何执行地理空间查询。 - **2d...

    Node.js-ReactSynthesis-利用ReactReduxExpress和Mongo构建的开源可扩展的CMS系统

    React Synthesis的架构设计遵循模块化和组件化原则,这使得系统能够轻松扩展新的功能。开发者可以通过添加新的React组件来扩展UI,通过Express的路由和中间件来扩展后端功能,同时,MongoDB的灵活数据模型允许添加新...

    node-express-mongo-API

    构建 RESTful API 遵循一组原则,确保接口清晰、一致且易于使用。通常,API 使用 HTTP 方法(GET、POST、PUT、DELETE)来表示对资源的操作,URL 表示资源,而状态码(如 200、404、500)传达操作结果。例如,`/users...

    Api-Expres-Mongo-DB

    这个项目的开发者可能使用了RESTful API设计原则,这意味着每个URL代表一种资源,而HTTP方法表示对这些资源的操作。这种设计使API易于理解和使用,也易于与其他系统集成。 通过学习和理解这个项目,开发者可以提升...

Global site tag (gtag.js) - Google Analytics