
说到mongoDB就不得不提到传统的关系型数据库。
传统关系型数据库在现代的计算系统上每天网络上都会产生庞大的数据量,这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理。
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织[1]。
当前关系模型是结构化数据存储在网络和商务应用的主导技术。当今十大主流的关系型数据库Oracle,MicrosoftSQLServer,MySQL,DB2,MicrosoftAccess,SQLite,Teradata(MySQL的一个分支),SAP。
常见的使用方式是:
select*fromdatabase;
但是,随着大数据时代的到来,关系型数据库逐渐体现出一些不能满足实际业务需求的问题。那么关系型数据的缺点是什么呢?
存在的问题我们设想一个场景,如果我们在业务初期,设计的数据库包含7个字段,用着感觉也不错,但是现在做大做强了,忽然需要增加一个业务,比方说现在新来了一种通信方式叫做“巨信”,我们要存储一下客户的相关号码。这时怎么做呢?一个是在原表格上增加一列,另一种方式是新建一个表格,然后join到原来的表格上。貌似可行。
这时候需求又来了,如果公司又做大做强了,还需要其他的信息呢?在拥有海量的数据需要存储,岂不是要做无数表格,无数的JOIN操作?此外,海量数据带来的还有很多其他的问题,如下所列:
关系型数据库存在的问题[2]
1.网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统关系型数据库来说,硬盘I/O是一个很大的瓶颈
2.网站每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的
3.在基于web的结构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法像webserver和appserver那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。当需要对数据库系统进行升级和扩展时,往往需要停机维护和数据迁移。
4.性能欠佳:在关系型数据库中,导致性能欠佳的最主要原因是多表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询。为了保证数据库的ACID特性,必须尽量按照其要求的范式进行设计,关系型数据库中的表都是存储一个格式化的数据结构。
正所谓成也萧何,败也萧何。笔者认为关系型数据库的瓶颈也在于其结构化的表示方法。那么有没有方法能够不用这种“表格”式的方法来构建数据库呢?答案就是:非关系型数据库
NoSQL数据库NoSQL(NoSQL=NotOnlySQL,而不是不需要SQL),指的是非关系型的数据库,意即"不仅仅是SQL",是对不同于传统的关系型数据库的数据库管理系统的统称。
非关系型数据库以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。
主要分为以下几类(知识所限,我了解的):
面向key-value
具有代表性的是Redis。redis比较明显的一个特点,支持5种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sortedset:有序集合)。
面向文档(document)
具有代表性的是MongoDB。此类数据库的主要特点是在海量的数据中可以快速的查询数据。文档存储通常使用内部表示法,可以直接在应用程序中处理,主要是JSON。没错,用JSON存储,一个JSON就是一个document。
像这样:


其实从上述结构中就很容易想到,很容易扩展,因为扩展只需要再JSON数据汇总增加一个“key”就可以,而不需要保持每个document需要有同样的字段,不是吗?
RDBMSvsNoSQL[3]RDBMS
高度组织化结构化数据
结构化查询语言(SQL)
数据和关系都存储在单独的表中。
数据操纵语言,数据定义语言
严格的一致性
NoSQL
代表着不仅仅是SQL
没有声明性查询语言
没有预定义的模式-键-值对存储,列存储,文档存储,图形数据库
非结构化和不可预知的数据
高性能,高可用性和可伸缩性
小结非结构化数据库是在传统关系型数据库在大数据时代背景下产生的,用以满足非结构化查询的需求。相比传统关系型数据库既有缺点也有优点。优点是可扩展性强,缺点是没有结构化的数据,性能上有一定的影响
mongodb就是NoSQL的一种,使用JSON存储数据。
为什么使用mongo数据库MongoDB的一些基本概念因为传统关系型数据库已经使用了很多年了,相关的概念已经深入人心,因此有必要对相关的概念与非结构化数据MongoDB进行对比。为了更好的理解MongoDB,这里给出一个与传统关系型数据库的术语对比:
SQL术语/概念
MongoDB术语/概念
解释/说明
database
database
数据库
table
collection
数据库表/集合
row
document
数据记录行/文档
column
field
数据字段/域
index
index
索引
tablejoins
表连接,MongoDB不支持
primarykey
primarykey
主键,MongoDB自动将_id字段设置为主键
MongoDB的优点/缺点优点:
高可扩展性(可随意扩展字段)
分布式计算
低成本
架构的灵活性,半结构化数据(JSON)
没有复杂的关系(不需要复杂的JOIN操作)
缺点:
没有标准化
有限的查询功能(到目前为止)
mongo数据库怎么使用MongoDB安装不同操作系统的可以参考如下链接进行安装:
Windows:
macOS:
Linux:
命令行显示数据库showdbs设置当前数据库(注意不是表格)useXXdb查找具体某一项()
eg:
(){"_id":ObjectId("6131bbc5c3e97444f4b027c4"),"x":10}{"_id":ObjectId("6131bc35c3e97444f4b027c5"),"x":12}{"_id":ObjectId("6131bc3ec3e97444f4b027c6"),"x":144}({x:10}){"_id":ObjectId("6131bbc5c3e97444f4b027c4"),"x":10}创建数据库在insert的时候,如果原来数据库不存在,那么就直接创建一个数据库。
eg:eg:({x:10})WriteResult({"nRemoved":1})查
(query)eg:(){"_id":ObjectId("6131bc35c3e97444f4b027c5"),"x":12}{"_id":ObjectId("6131bc3ec3e97444f4b027c6"),"x":144}({x:12},{y:20})WriteResult({"nMatched":1,"nUpserted":0,"nModified":1})(){"_id":ObjectId("6131bc35c3e97444f4b027c5"),"y":20}{"_id":ObjectId("6131bc3ec3e97444f4b027c6"),"x":144}可扩展性示例(){"_id":ObjectId("6131bc35c3e97444f4b027c5"),"y":20}{"_id":ObjectId("6131bc3ec3e97444f4b027c6"),"x":144}{"_id":ObjectId("6131bf67fd8e703e23f71a67"),"z":"mongodb"}{"_id":ObjectId("6131bf9bfd8e703e23f71a68"),"xxx":10010}列出数据库列表dblist=_database_names()if"runoobdb"indblist:print("数据库已存在!")查询数据x=_one()修改多个数据myquery={"name":{"$regex":"^F"}}newvalues={"$set":{"alexa":"123"}}#使用操作符$setx=_many(myquery,newvalues)更多内容可以参考:
mongodb进阶mongo操作符汇总:
findandmodify:
工具推荐NavicatPremium15(Windows)
这款工具是数据库方面比较好的工具,免去一切繁杂的命令行操作,直观的感受数据库。
支持的数据库包括:

添加图片注释,不超过140字(可选)
白嫖,可以参考这篇文章:
参考资料↑
↑
↑