《大数据存储与管理》课程作业(MongoDB)

1  应用场景

假设我是胡润百富榜的后台数据库管理人员,负责增删查改富豪信息,对富豪信息做一些统计。我需要管理一个数据库,其中包含有关每个富豪的信息,包括姓名、出生地、财富总额、公司名称、行业、年份等信息。以下是一些应用场景:

  • 增加新的富豪信息

如果有新的富豪被添加到胡润百富榜中,我需要将他们的信息添加到数据库中。我可以创建一个表格,包括富豪的姓名、国籍、财富总额、公司名称、行业、财富来源等信息。我需要确保所有的信息都被正确添加到数据库中。

  • 删除富豪信息

如果富豪从胡润百富榜中被删除,我需要从数据库中删除他们的信息。我需要确定要删除的富豪的姓名或其他唯一标识符,然后从数据库中删除他们的信息。

  • 更新富豪信息

如果富豪的信息有所更改,例如财富总额发生变化,我需要更新他们的信息。我需要确定要更新的富豪的姓名或其他唯一标识符,然后将他们的信息更新到数据库中。

  • 查询富豪信息

我需要能够查询富豪的信息。我需要能够根据富豪的姓名、国籍、行业等信息来查询富豪。我需要确保查询结果是准确的,并且可以满足不同类型的查询需求。

  • 统计富豪信息

除了管理和查询富豪的信息之外,我还需要对富豪的信息进行一些统计。例如,我可能需要统计不同国籍、行业或性别的富豪的数量、平均财富、最大财富等信息。我需要确保统计结果是准确的,并且可以满足不同类型的统计需求。

2  数据库选择

针对上述应用场景,本次大作业我选择使用MongoDB数据库。

当选择数据储存方式时,需要考虑数据的特点以及数据库本身的特点,下面结合胡润百富榜数据的特点和MongoDB数据库的特点,解释我为什么选择MongoDB储存数据,以及为什么不选择其他数据库。

  1. 数据特点:胡润百富榜数据集包括大量非结构化数据,例如富豪的公司名、行业、出生地等信息,这些数据具有不确定性和可变性,不适合使用关系型数据库进行存储,并且通过观察图2.1发现胡润百富榜的数据是json结构,最适合使用MongoDB数据库。
  2. MongoDB的特点:MongoDB是一种面向文档的数据库,具有高度的可扩展性和强大的查询和索引功能,可以更好地处理非结构化数据集和大规模数据集。此外,MongoDB还支持副本集和分片等高可用性和负载均衡的功能,可以更好地满足大规模应用程序的需求。

基于以上分析,选择MongoDB作为胡润百富榜数据集的储存方式,具有以下优点:

  1. 面向文档的数据模型:MongoDB的面向文档的数据模型可以更好地适应非结构化数据的存储和管理,例如富豪的公司名、行业、出生地等信息。
  2. 高度可扩展性:MongoDB的分布式架构和可扩展性,可以轻松扩展存储空间和支持高并发的读写操作,这非常适合胡润百富榜这种大规模的数据集。
  3. 强大的查询和索引功能:MongoDB支持多种类型的索引,包括文本索引、地理空间索引和哈希索引等,可以更好地满足不同类型的查询需求,而且查询操作非常快速。
  4. 高性能的读写操作:MongoDB采用内存映射的方式进行数据读写,可以快速读取和写入大量数据,而且支持多种高可用性和负载均衡的功能。
  5. 相比之下,关系型数据库例如MySQL,虽然可以进行数据建模和约束,但是不适合处理非结构化数据和大规模数据集,对于胡润百富榜这种数据集,使用MySQL等关系型数据库,需要对数据进行严格规范化和模式化处理,会降低数据存储和管理的灵活性和效率。因此,选择MongoDB作为储存方式是比较合适的。

3  数据库安装与启动 

见本人博客MongoDB的安装配置与操作  

4  数据操作过程与结果 

 1.使用Python把爬取的富豪数据从csv文件存储到MongoDB中的代码如下,结果如图4.1所示,爬虫爬取的数据包含的字段如图4.2所示:

import pandas as pd
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['mydatabase']
collection = db['mycollection']
df = pd.read_csv('2021胡润百富榜.csv')
for index, row in df.iterrows():
    data_dict = dict(row)
    collection.insert_one(data_dict)

图4.1 爬取数据展示 

 

 图4.2 字段展示

2.单个文档插入

3.批量插入

4.删除单个文档

5.批量删除

6.查询所有信息

7.条件查询

8.查询符合条件的第一条数据

9.投影查询

10.文档修改

11.批量修改

12.统计查询

13.按条件统计记录数

14.分页查询

15.排序查询

16.正则的复杂条件查询

17.比较查询

18.包含查询

19.条件链接查询

20.查看插入索引前根据年龄查询数据的情况

21.单字段索引

22.查看插入索引后根据年龄查询数据的情况

5  分析与总结 

在本次大数据储存与管理大作业中,我选择了胡润百富数据的存储管理作为应用场景,使用Python爬虫爬取了胡润百富榜单中的富豪信息,并将数据存储在MongoDB数据库中。通过这个案例,我深入了解了MongoDB的各种功能和操作方法,能够完成CRUD操作,能够通过聚合管道对数据进行一些操作,如使用countDocuments()进行统计查询、使用skip()和limit()完成分页查询功能、使用sort()对数据进行排序查询等。使用高山老师讲解的三板斧的方法,db.集合名.操作,可以让我在进行操作时更加清晰。

在完成这个项目的过程中,我遇到了一些问题。比如使用use xxx创建数据库后show dbs后不出现刚创建的的数据库,是因为还没有一个集合存在数据库中,目前数据库是在内存当中,还没有持久化到硬盘,插入一个文档后会持久化到硬盘。我也通过一些博客了解到了使用insertMany插入多条数据时,可能会由于数据较多出现失败,如果某条数据插入失败,将会终止插入,但已插入成功的数据不会回滚掉,可以通过js语法try catch语句解决。

通过这次作业,我深刻认识到MongoDB数据库的强大和适用场景,以及如何在实际应用中使用MongoDB。我也了解到了如果没有索引,MongoDB必须执行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的,如果查询存在适当的索引,MongoDB可以使用该索引限制必须检查的文档数,所以我在最后的操作中给年龄字段添加了索引,并给出了插入索引前后查询数据的情况对比。所以在学习这门课程的过程中,我不仅学习了MongoDB的基本知识和操作,还学习了数据库设计和优化的相关知识,对我未来的开发工作具有很大的帮助。

总之,这门课程让我受益匪浅,让我对数据库有了更深入的了解和认识。同时,通过使用Python爬虫将数据存储到MongoDB中,我也掌握了使用Python爬虫爬取数据并将数据存储到数据库中的方法。我相信,在今后的学习和工作中,我会继续深入学习数据库相关知识,为我的职业生涯打下坚实的基础。

参考文献

  1. 袁燕妮. NoSQL数据库技术[M].北京:北京邮电大学出版社, 2020.
  2. MongoDB官方手册[OL]. What is MongoDB? — MongoDB Manual.
  3. 黑马程序员. NoSQL数据库技术与应用[M]. 北京:清华大学出版社,2020.
  4. MongoDB教程[OL].MongoDB 教程 | 菜鸟教程 (runoob.com)
  5. 黑马程序员.MongoDB基础入门到高级进阶[OL].MongoDB简介&体系结构&数据模型&特点_哔哩哔哩_bilibili
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
随着计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机管理企业势在必行。而仓库管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面,对前者要求建立起数据的一致性和完整性强,数据安全性好的库,而对于后者则要求应用程序功能完备,易使用等特点。本文通过分析浏览器/服务器结构的特点并结合企业仓储管理的实际情况,简要介绍了系统各功能模块及数据库的设计,着重讨论了用ASPNET 技术和SQLServer2005开发企业仓库管理系统时的数据库访问技术和动态网页制作技术,并给出了部分实现代码。使用ASP VBScript作为开发语言,SQL Server 2008作为后台数据库,该数据库系统在安全性、准确性、运行速度方面均有绝对的优势,并且能够对容量较大的数据库进行处理, 效率高。系统有较高的安全性和较好的性能。 本次课程设计的题目是仓库管理系统,系统内容要求是:某公司有多个下属仓库,每一仓库有多个职工,一个职工仅隶属于一个仓库;且一个职工仅在一个仓库中工作,但一个仓库中有很多职工参加工作。 系统的使用者分为管理人员和普通用户。他们对该数据库系统有不同的操作: 管理人员:可以对单位的职工信息进行删除和添加操作,也可以设置职工的工资,作为发放资金的凭证;可以在单位更换单位经理时进行信息的更改;可以在有新的仓库开设时,对工程仓库信息进行添加,包括该仓库的地址、名字总之,管理人员可以对数据库系统进行增加、删除、更新、查询。 普通用户:普通用户可以根据单位号找到该单位的地址;也可以根据职工的号码来找到该职工所对应的公司、所属仓库、聘期、工资;可以通过查询仓库号得到该仓库的信息。总之,普通用户只可以对数据库系统进行查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小关不摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值