MongoDB结构划分

一、 基本结构划分

从整体上可以将MongoDB自底向上划分为四部分:

1. 基础数据部分

2. 一般的数据库操作

3. MongoDB提供的操作特性

4. 数据库架构管理

clip_image002

二、 各部分简介

1. 基础数据部分

数据库最终的工作就是把数据存储,然后在用户需要的时候以一种方式把数据提出去。因此,所有数据都需要以一种形式保存到内存或者硬盘里。

在MongoDB里面主要有两种数据的存储方式。

BSON:类似于一个有序的JSON。是数据存储的基础,在MongoDB中的大部分数据都是用这种数据结构与用户交互。与一般数据库不同虽然MongoDB也是KV操作读取数据,但是用一Key对应的Value可以是不同类型。

GridFS:BSON只能存储最大4MB的数据,当需要存储大型数据的时候,就需要用GridFS来做存储了。

2. 一般数据库操作

作为数据库应该包含基本的增、删、改、查功能,并且提供加速基本操作的辅助工具,MongoDB同样也提供了这些基本功能。

动态查询:基本的增删改查功能。同时在做这些操作的时候MongoDB为这些操作自动优化,如:考虑可以利用的索引,直接从缓存中读取内容等等。

索引:在MongoDB中为每一条数据创建了一个_id的属性,作为最基本的索引。用户也可以自己创建一个索引来提高查询效率。MongoDB也提供了合并索引的功能,可以用来合并多关键词的索引。

地理位置索引:可以根据距离等位置相关属性来做索引。

预查询:在真正执行一条语句前,测试查询等基本操作的耗时,作为数据库设计或者语句效率的检测。

3. MongoDB提供的操作特性

同一位置插入数据:与其他数据库不同,MongoDB在真正将数据写入本地前,做了缓存处理,在内存中读写数据的速度比每次都写到本地的速度快多了。

Map and Reduce Function:MongoDB的特殊数据结构,决定了他可以有与众不同的特殊数据处理方式。编写这两个函数可以完成很多数据库本身没有提供的自定义功能。

4. 数据库架构管理

数据备份:由于MongoDB的实时读取性和内存中处理数据的特性,单个MongoDB数据库是很容易造成数据丢失的,为保证数据不丢失或少丢失(实际生产中会丢失),MongoDB提供了数据备份和选举运行主机的机制。(在实际生产中不能需要多台MongoDB服务器共同运行)下图简单描述了MongoDB的主从机关系。

clip_image004

自动分片:在实际生产中,当数据量过大超过了一台MongoDB服务器所能支持的时候,需要考虑建立一个MongoDB的数据库集群,每一个集保存整体数据的某一部分。下图简单描述了一个MongoDBs集群的工作情况:

clip_image006

三、 源码阅读顺序及要点

了解了MongoDB的集群方式后,我觉得自底向上对MongoDB的源码进行阅读比较好。

原因:

1. 先了解基础的数据结构,对逻辑算法中出现的数据结构有所了解。

2. 算法与运行平台无关,集群等功能与运行平台有关。为了不过早的牵绊与系统功能,理解MongoDB的设计哲学之后对深层次功能的了解更有利。

3. 在生产优化中,底部的数据结构或者算法调整可能更容易产生效果。

因此,列出如下几点阅读顺序:

1. GridFS,BJSON

了解基本数据结构

2. 基本搜索功能

了解对数据的基本处理,输入输出规则

3. 索引,搜索优化

索引的创建和索引是如何提供其强大的辅助搜索功能的。

4. 数据备份

多台服务器的副本是如何保持同步的

当主服务器宕机程序是如何选择副本服务器的

当主服务器恢复后是以什么策略再次同步数据的

5. 自动分片搜索

当创建完分片之后,MongoDB是如何处理多个服务器之间的数据跳转搜索的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于提升 Java 中 MongoDB 查询速度的方法,有以下几点建议: 1. 创建适当的索引:在 MongoDB 中,索引可以显著提高查询性能。确保在查询经常使用的字段上创建索引,特别是在经常进行排序、过滤或分组的字段上。可以使用 MongoDB 的 `createIndex` 方法来创建索引。 2. 使用投影(Projection)减少返回数据量:在进行查询时,使用投影操作符来指定只返回所需的字段,以减少数据传输量。这可以通过将需要返回的字段设置为 1 或排除不需要返回的字段(设置为 0)来实现。 3. 使用聚合管道(Aggregation Pipeline):聚合管道是 MongoDB 中用于处理数据的强大工具。通过使用聚合操作符(如 `$match`、`$group`、`$project` 等),可以对数据进行多个操作,并将结果返回给客户端。使用聚合管道可以减少数据库往返次数,提高查询效率。 4. 优化查询语句:确保查询语句使用正确的查询条件和运算符,以便 MongoDB 可以有效地选择索引并执行查询。可以使用 MongoDB 的 `explain()` 方法来分析查询执行计划,并根据结果进行优化。 5. 批量操作:如果需要执行多个查询或更新操作,尽量使用批量操作(如 `insertMany`、`updateMany` 等)而不是逐个操作。这样可以减少与数据库的通信次数,提高效率。 6. 考虑数据模型设计:合理设计数据模型可以提高查询性能。根据应用的查询需求和数据访问模式,合理划分和组织文档结构,以减少查询时的数据扫描和连接操作。 7. 考虑使用缓存:如果查询结果较为稳定且数据量较大,可以考虑使用缓存技术,将查询结果缓存到内存中,以减少对数据库的频繁访问。 以上是一些常见的方法和技巧,可以帮助提升 Java 中 MongoDB 的查询速度。根据具体的应用场景和需求,还可以进一步深入优化和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值