NoSQL是一种非关系型DMS,不需要固定的架构,可以避免joins链接,并且易于扩展。NoSQL数据库用于具有庞大数据存储需求的分布式数据存储。NoSQL用于大数据和实时Web应用程序。例如,像Twitter,Facebook,Google这样的大型公司,每天可能产生TB级的用户数据。
NoSQL数据库代表“不仅仅是SQL”或“不是SQL”。虽然NoRELNoSQL会是一个更好的名词。Carl Strozz在1998年引入了NoSQL概念。
传统的RDBMS使用SQL语法来存储和查询数据。相反,NoSQL数据库系统包含可存储结构化,半结构化,非结构化和多态数据的多种数据库技术。
NoSQL 数据库的概念在处理大量数据的互联网巨头(例如Google,Facebook,Amazon等)中变得很流行。使用RDBMS处理海量数据时,系统响应时间变慢。
为了解决此问题,当然可以通过升级现有硬件来“横向扩展”我们的系统。但这个成本很高。
这个问题的替代方案是在负载增加时将数据库负载分配到多个主机上。这种方法称为“横向扩展”。
NoSQL数据库是非关系数据库,因此在设计时考虑到Web应用程序,比关系数据库更好地扩展。
非关系
动态架构
简单的API
分布式
MongoDB是面向文档的NoSQL数据库,用于大量数据存储。MongoDB是一个在2000年代中期问世的数据库。属于NoSQL数据库的类别。
每个数据库都包含集合,而集合又包含文档。每个文档可以具有不同数量的字段。每个文档的大小和内容可以互不相同。文档结构更符合开发人员如何使用各自的编程语言构造其类和对象。开发人员经常会说他们的类不是行和列,而是具有键值对的清晰结构。从NoSQL数据库的简介中可以看出,行(或在MongoDB中调用的文档)不需要预先定义架构。相反,可以动态创建字段。MongoDB中可用的数据模型使我们可以更轻松地表示层次结构关系,存储数组和其他更复杂的结构。可伸缩性– MongoDB环境具有很高的可伸缩性。全球各地的公司已经定义了自己的集群,其中一些集群运行着100多个节点,数据库中包含大约数百万个文档。
以下是一些为什么应该开始使用MongoDB的原因
下面是MongoDB中使用的一些常用术语
下图显示了带有键值对的字段的示例。如下的例子中,CustomerID和11是文档中定义的键值对之一。
下表将帮助您更容易理解Mongo中的一些概念:
主要是MongoDB数据库服务以及一些工具。
MongoDB Database Tools
除了上述没有列举到,还有:
包组件可以在官网MongoDB Package Components找到详细的用法。
其中最主要的程序当然是mongod(数据库服务),mongod在不同的部署方案中(单机部署,副本集部署,分片集群部署),通过不同的配置,可以扮演多种不同的角色:
在一台服务器上,可以启动多个mongod服务。但在实际生产部署中,通常还是建议一台服务器部署一个mongod实例,这样不仅减少资源竞争,而且服务器故障也不会同时影响到多个服务。
MongoDB 数据逻辑结构分为数据库(database)、集合(collection)、文档(document)三层 :
一个数据库中可以创建多个集合,原则上我们通常把逻辑相近的集合都放在一个数据库中,当然出于性能或者数据量的关系,也可能进行拆分。
在MongoDB中有几个内建的数据库:
集合由若干条文档记录构成。
文档是MongoDB中数据的基本存储单元,它以一种叫做BSON文档的结构表示。BSON,即Binary JSON,多个键及其关联的值有序地存放在其中,类似映射,散列或字典。
注意
MongoDB数据库文件和MongoDB存储的引擎有直接关系,MongoDB一共提供了三种存储引擎:WiredTiger,MMAPV1和In Memory;在MongoDB3.2之前采用的是MMAPV1; 后续版本v3.2开始默认采用WiredTiger;且在v4.2版本中移除了MMAPV1的引擎。
在后续文章中,还将对MongoDB存储引擎进行详解。
MongoDB - MMAPv1引擎下的数据库文件由于v3.0后续版本已经弃用了,所以这里不会详细介绍。
db
|------journal
|----_j.0
|----_j.1
|----lsn
|------local
|----local.ns
|----local.0
|----local.1
|------mydb
|----mydb.ns
|----mydb.0
|----mydb.1
如果你希望详解了解MongoDB MMAP的引擎(源码级别),你可以参考这篇MongoDB Mmap 引擎分析(https://cloud.tencent.com/developer/article/1004385)
MongoDB v3.2已经将WiredTiger设置为了默认的存储引擎
后续的文章将对WiredTiger存储引擎进行详解。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!