Python工具箱系列(二十九)

MongoDB号称文档数据库,是目前发展迅速的NoSQL数据库。它由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

主要功能特性有:

◆面向集合存储,易存储对象类型的数据。

◆模式自由。

◆支持动态查询。

◆支持完全索引,包含内部对象。

◆支持查询。

◆支持复制和故障恢复。

◆使用高效的二进制数据存储,包括大型对象(如视频等)。

◆自动处理碎片,以支持云计算层次的扩展性。

◆支持Golang,RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。

◆文件存储格式为BSON(一种JSON的扩展)。

◆可通过网络访问。

其主要场景如下:

◆实时数据处理。它非常适合实时的插入、更新与查询,并具备实时数据存储所需的复制及高度伸缩性。

◆缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。

◆高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,已经包含了对MapReduce引擎的内置支持。

不适用的场景如下:

◆要求高度事务性的系统。

◆传统的商业智能应用。

◆复杂的跨文档(表)级联查询。

MongoDB服务端可运行在Linux、Windows或mac os x平台,支持32位和64位应用,默认端口为27017。推荐运行在64位非Windows平台上。笔者最喜欢的特性之一就是MongoDB具备的灵活的分片机制,配置好的分片机制不仅能够达到负载均衡的目标,而且还能够冗余备份。

一、Ubuntu bionic下安装

直接使用官网提供的deb文件安装即可。

 

# server
wget https://repo.mongodb.org/apt/ubuntu/dists/focal/mongodb-org/4.4/multiverse/binary-arm64/mongodb-org-server_4.4.15_arm64.deb
# mongos,分片服务器
wget https://repo.mongodb.org/apt/ubuntu/dists/bionic/mongodb-org/4.4/multiverse/binary-amd64/mongodb-org-mongos_4.4.15_amd64.deb

# setup server
dpkg -i mongodb-org-server_5.0.9_amd64.deb 

# 检查相关状态
systemctl status mongod

# 自动启动
systemctl enable mongod

# 使用命令行操作mongodb
mongo

 

对配置文件/etc/mongod.conf进行修改,以获得远程访问的能力。

cat /etc/mongod.conf |grep bind
sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mongod.conf
cat /etc/mongod.conf |grep bind
systemctl restart mongod
systemctl status mongod

MongoDB提供了丰富的命令,专家可以全面操控数据库以及数据,但对于初学者不太友好。为此推荐使用MongoDB官方提供的MongoDBCompass,在windows下载安装即可,随后连接远程MongoDB数据库,使用效果如下图所示:

从图中可以看出,服务器在远程,并且通过这个GUI界面,也能够输入命令来操作MongoDB数据库。

二、Python连接使用MongoDB

用Python操作MongoDB非常方便,无需定义表结构就可以直接将数据插入,使用pymongo模块,可以实现MongoDB与Python的交互。安装命令如下:

pip install pymongo

下述代码示例了创建/使用定制的数据库,并且插入三条记录,并且查询的过程。

 
import pymongo

client = pymongo.MongoClient("mongodb://192.168.0.66:27017")
print(client.list_database_names())
db = client['raindrop']
collection = db['pm25']

# 增加一条
stu1 = {'id': '001', 'area': 'office', 'pm25': 8}
result = collection.insert_one(stu1)

# 增加多条
stu2 = {'id': '002', 'area': 'field01', 'pm25': 15, "temp": 10.5}
stu3 = {'id': '003', 'monitor': 'wangwu', 'area': 'field02', 'age': 20}
result = collection.insert_many([stu2, stu3])

# 查询记录
ret = collection.find_one({'area': 'office'})
print(ret)

通过MongoDB Compass可以看到数据库保存了三个文档。

由于MongoDB无模式特点,使用起来非常方便,尤其对于半结构化的数据存储特别有利。


 

posted @ 2023-03-23 16:31  西安衍舆航天  阅读(124)  评论(0编辑  收藏  举报