如今,大多数的计算机系统(包括服务器、PC、移动设备等)都会产生庞大的数据量。其实,早在2012年的时候,全世界每天产生的数据量就达到了2.5EB(艾字节,)。这些数据有很大一部分是由关系型数据库来存储和管理的。 早在1970年,E.F.Codd发表了论述关系型数据库的著名论文“A relational model of data for large shared data banks”,这篇文章奠定了关系型数据库的基础并在接下来的数十年时间内产生了深远的影响。实践证明,关系型数据库是实现数据持久化最为重要的方式,它也是大多数应用在选择持久化方案时的首选技术。
NoSQL是一项全新的数据库革命性运动,虽然它的历史可以追溯到1998年,但是NoSQL真正深入人心并得到广泛的应用是在进入大数据时候以后,业界普遍认为NoSQL是更适合大数据存储的技术方案,这才使得NoSQL的发展达到了前所未有的高度。2012年《纽约时报》的一篇专栏中写到,大数据时代已经降临,在商业、经济及其他领域中,决策将不再基于经验和直觉而是基于数据和分析而作出。事实上,在天文学、气象学、基因组学、生物学、社会学、互联网搜索引擎、金融、医疗、社交网络、电子商务等诸多领域,由于数据过于密集和庞大,在数据的分析和处理上也遇到了前所未有的限制和阻碍,这一切都使得对大数据处理技术的研究被提升到了新的高度,也使得各种NoSQL的技术方案进入到了公众的视野。
NoSQL数据库按照其存储类型可以大致分为以下几类:
类型 | 部分代表 | 特点 |
---|---|---|
列族数据库 | HBase<br>Cassandra<br>Hypertable | 顾名思义是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的I/O优势,适合于批量数据处理和即时查询。 |
文档数据库 | MongoDB<br>CouchDB<br>ElasticSearch | 文档数据库一般用类JSON格式存储数据,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能,但不提供对参照完整性和分布事务的支持。 |
KV数据库 | DynamoDB<br>Redis<br>LevelDB | 可以通过key快速查询到其value,有基于内存和基于磁盘两种实现方案。 |
图数据库 | Neo4J<br>FlockDB<br>JanusGraph | 使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。图数据库从设计上,就可以简单快速的检索难以在关系系统中建模的复杂层次结构。 |
对象数据库 | db4o<br>Versant | 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。 |
Redis:https://www.cnblogs.com/zhangyafei/p/10138629.html
二、
MongoDB是2009年问世的一个面向文档的数据库管理系统,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。虽然在划分类别的时候后,MongoDB被认为是NoSQL的产品,但是它更像一个介于关系数据库和非关系数据库之间的产品,在非关系数据库中它功能最丰富,最像关系数据库。
MongoDB将数据存储为一个文档,一个文档由一系列的“键值对”组成,其文档类似于JSON对象,但是MongoDB对JSON进行了二进制处理(能够更快的定位key和value),因此其文档的存储格式称为BSON。关于JSON和BSON的差别大家可以看看MongoDB官方网站的文章《JSON and BSON》。
目前,MongoDB已经提供了对Windows、MacOS、Linux、Solaris等多个平台的支持,而且也提供了多种开发语言的驱动程序,Python当然是其中之一。
2.1 MongoDB的安装和配置
可以从MongoDB的官方下载链接下载MongoDB,官方为Windows系统提供了一个Installer程序,而Linux和MacOS则提供了压缩文件。下面简单说一下Linux系统如何安装和配置MongoDB。
官网:https://www.mongodb.com/download-center/community
windows
下载安装包直接安装
centos:
# 官网:https://www.mongodb.com/download-center/community wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.3.tgz tar -xvf mongodb-linux-x86_64-rhel70-4.2.3.tgz mv mongodb-linux-x86_64-rhel70-4.2.3 mongodb mkdir data touch dblogs vi /etc/profile export PATH=$PATH:/usr/local/mongodb/bin source /etc/profile # 参数启动 mongod --dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/dblogs --fork # 后台启动 # 配置文件启动 vi mongodb.conf port=27017 #端口 dbpath=/usr/local/mongodb/data #数据库存文件存放目录 logpath=/usr/local/mongodb/dblogs #日志文件存放路径 fork=true #以守护进程的方式运行,创建服务器进程 bind_ip=0.0.0.0 auth=true mongod --config mongodb.conf
windows远程连接
C:\Users\fei>mongo --host 182.254.179.186 MongoDB shell version v3.6.5 connecting to: mongodb://182.254.179.186:27017/ MongoDB server version: 4.2.3 WARNING: shell and server versions do not match Server has startup warnings: 2020-02-14T13:04:58.978+0800 I STORAGE [initandlisten] 2020-02-14T13:04:58.978+0800 I STORAGE [initandlisten] ** WARNING: Using the X FS filesystem is strongly recommended with the WiredTiger storage engine 2020-02-14T13:04:58.978+0800 I STORAGE [initandlisten] ** See http:// dochub.mongodb.org/core/prodnotes-filesystem 2020-02-14T13:05:01.297+0800 I CONTROL [initandlisten] 2020-02-14T13:05:01.297+0800 I CONTROL [initandlisten] ** WARNING: Access cont rol is not enabled for the database. 2020-02-14T13:05:01.297+0800 I CONTROL [initandlisten] ** Read and wr ite access to data and configuration is unrestricted. 2020-02-14T13:05:01.297+0800 I CONTROL [initandlisten] ** WARNING: You are run ning this process as the root user, which is not recommended. 2020-02-14T13:05:01.297+0800 I CONTROL [initandlisten] 2020-02-14T13:05:01.297+0800 I CONTROL [initandlisten] 2020-02-14T13:05:01.297+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel /mm/transparent_hugepage/enabled is 'always'. 2020-02-14T13:05:01.297+0800 I CONTROL [initandlisten] ** We suggest se tting it to 'never' 2020-02-14T13:05:01.297+0800 I CONTROL [initandlisten] 2020-02-14T13:05:01.297+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel /mm/transparent_hugepage/defrag is 'always'. 2020-02-14T13:05:01.297+0800 I CONTROL [initandlisten] ** We suggest se tting it to 'never' 2020-02-14T13:05:01.297+0800 I CONTROL [initandlisten] 2020-02-14T13:05:01.297+0800 I CONTROL [initandlisten] ** WARNING: soft rlimit s too low. rlimits set to 7282 processes, 100001 files. Number of processes shou ld be at least 50000.5 : 0.5 times number of files. 2020-02-14T13:05:01.297+0800 I CONTROL [initandlisten] > show dbs admin 0.000GB config 0.000GB local 0.000GB
三、MongoDB基本概念及增删改查
SQL | MongoDB | 解释(SQL/MongoDB) |
---|---|---|
database | database | 数据库/数据库 |
table | collection | 二维表/集合 |
row | document | 记录(行)/文档 |
column | field | 字段(列)/域 |
index | index | 索引/索引 |
table joins | --- | 表连接/嵌套文档 |
primary key | primary key | 主键/主键(_id 字段) |