MongoDB
外观
Developer(s) | MongoDB Inc. |
---|---|
Initial release | February 11, 2009 |
Repository |
|
Written in | C++, JavaScript, Python |
Engine | |
Operating system | 跨平台 |
Type | NoSQL数据库 |
License | Server Side Public License |
Website | https://www.mongodb.com |
MongoDB是一个开源的NoSQL文档数据库,采用JSON风格的文档存储数据。它由MongoDB Inc.开发并维护,具有高性能、高可用性和易扩展性等特点,广泛应用于现代Web应用和大数据处理场景。
历史[编辑 | 编辑源代码]
MongoDB最初由10gen公司(后更名为MongoDB Inc.)在2007年开始开发,并于2009年2月首次公开发布。其名称源自英文单词"humongous"(巨大的),反映了其处理大规模数据的能力。
主要特性[编辑 | 编辑源代码]
文档数据模型[编辑 | 编辑源代码]
MongoDB使用灵活的文档数据模型,数据以BSON(Binary JSON)格式存储,每个文档可以有不同的结构。
{
_id: ObjectId("5f8d8b8b8b8b8b8b8b8b8b8b"),
name: "张三",
age: 30,
address: {
city: "北京",
street: "中关村大街"
},
hobbies: ["编程", "阅读", "旅行"]
}
查询语言[编辑 | 编辑源代码]
MongoDB提供丰富的查询操作符:
// 查询年龄大于30的用户
db.users.find({ age: { $gt: 30 } })
// 聚合查询:按城市统计用户数量
db.users.aggregate([
{ $group: { _id: "$address.city", count: { $sum: 1 } } }
])
索引支持[编辑 | 编辑源代码]
MongoDB支持多种索引类型,包括单字段索引、复合索引、多键索引、全文索引和地理空间索引等。
// 创建索引
db.users.createIndex({ name: 1 })
// 创建复合索引
db.users.createIndex({ name: 1, age: -1 })
复制与分片[编辑 | 编辑源代码]
- 复制集:提供自动故障转移和数据冗余
- 分片集群:支持水平扩展,处理大规模数据集
架构[编辑 | 编辑源代码]
MongoDB的主要组件包括:
与其他系统的集成[编辑 | 编辑源代码]
MongoDB可以与多种大数据技术集成,如Apache Drill、Apache Spark等。例如在Apache Drill中可以直接查询MongoDB数据:
-- 在Drill中查询MongoDB
SELECT * FROM mongo.test.users WHERE age > 30;
使用案例[编辑 | 编辑源代码]
MongoDB被广泛应用于以下场景:
- 内容管理系统
- 用户数据管理
- 实时分析
- 物联网数据处理
- 移动应用后端
版本历史[编辑 | 编辑源代码]
版本 | 发布日期 | 主要特性 |
---|---|---|
1.0 | 2009-02-11 | 初始版本 |
2.0 | 2011-09-12 | 引入分片集群 |
3.0 | 2015-03-03 | WiredTiger存储引擎 |
4.0 | 2018-06-26 | 多文档ACID事务 |
5.0 | 2021-07-13 | 时序集合 |
6.0 | 2022-07-12 | 查询加密 |
7.0 | 2023-08-15 | 可查询加密 |
与其他数据库的比较[编辑 | 编辑源代码]
特性 | MongoDB | MySQL | Cassandra | PostgreSQL |
---|---|---|---|---|
数据模型 | 文档 | 关系 | 宽列 | 关系/文档 |
扩展方式 | 水平 | 垂直 | 水平 | 垂直 |
事务支持 | ✓ | ✓ | ✗ | ✓ |
地理空间查询 | ✓ | ✓ | ✗ | ✓ |
社区与支持[编辑 | 编辑源代码]
MongoDB拥有活跃的开源社区,提供:
- 官方文档和教程
- MongoDB University免费课程
- 社区论坛
- 专业的企业版支持