MongoDB:怎样看待它?
1、MongoDB是什么?
MongoDB是一种非关系型数据库管理系统,由C++语言编写而成。相比传统的关系型数据库,例如MySQL,MongoDB采用了面向文档的数据模型,将数据存储为一个文档,而不是存储在关系型表中,这使得MongoDB更加适用于大数据量和需要高性能读写的应用,同时在开发、测试、运维过程中也更加灵活。
1.1、面向文档的数据模型
一个MongoDB的文档可以看做是一个数据对象,其中包含了名称/值对或者键/值对,这些键和值可以是任何可以用编程语言表示的类型,例如:字符串、整数、浮点数、数组和嵌入文档等等。在MongoDB中,一个文档可以使用类似于Javascript语言的对象表示法来表示:
{
"_id": ObjectId("5be11f800d22e21ad0fc9f76"),
"name": "Tom",
"age": 21,
"hobby": ["reading", "riding"],
"address": {
"city": "Beijing",
"street": "Haidian Road"
}
}
其中,"_id"字段在MongoDB中是一个特殊的字段,用于唯一标识文档。MongoDB将一个文档存储成BSON(二进制JSON)格式,这种格式可以跨语言、跨平台使用。
2、MongoDB的优势
2.1、高性能读写
相比传统关系型数据库,MongoDB采用的面向文档的数据模型,具有更高的灵活性,并且在一些读取数据的场景下,它比传统关系型数据库具有更高的性能。另外,MongoDB内置了分片(sharding)技术,可以将大数据库分割为小的块,分别存储在不同的服务器上,大大提高了系统的并行计算能力。
2.2、易于扩展
当应用程序需要处理更大的数据集时,MongoDB的分片技术可以很容易地扩展到成千上万的节点,从而为海量数据提供良好的存储和查询性能,这种扩展性比传统关系型数据库方便得多。
2.3、开发效率高
由于MongoDB采用的是面向文档的数据模型,开发人员可以更快地处理具有未知或者繁琐结构的数据,因为文档数据库模型是更贴近于对象,ORM框架可以更方便的处理和操作数据。此外,MongoDB内部提供了很多丰富的操作指令,开发人员可以更容易地对数据进行查询、排序、分页、更新等操作。
3、MongoDB的局限性
3.1、缺少事务支持
在传统的关系型数据库中,事务是一个非常重要的特性,而MongoDB并没有完全支持事务特性。虽然MongoDB的单个操作是原子的,但是在进行多个文档的操作时,这些操作无法被捆绑起来作为一个事务进行管理。
3.2、存储空间和备份难度大
MongoDB的土语对磁盘空间的使用比较高,每个文档默认有4字节的内部索引,而且每个文档还会写入写先操作日志等,如果在数据量较大的情况下,存储及备份需要的磁盘空间势必会成为一个比较突出的问题。
3.3、安全性不足
MongoDB当前并没有提供如传统数据库这类扯操作处理安全性问题的措施,如支持的授权管理、传输加密、ACL、安全审计等等,而且甚至连基本的加密和用户管理都没有。
4、结论
总的来说,MongoDB采用面向文档的数据模型,与传统的关系型数据库相比,具有更高的灵活性和易扩展性,在大数据量的情况下读写性能强大。但是MongoDB也存在一些缺点,例如不支持事务,存储空间和备份难度大,安全性不足等。对于开发人员而言,在项目初期,可以根据实际情况选择用MongoDB还是传统的关系型数据库,需要根据数据的实际情况来进行技术选型。