前言

以前我在看关于架设网站的相关帖子时,就觉得为什么他们非得用数据库?我在课堂里学的数据库不就是一个存储和读取数据的外部系统么,理论上,不使用数据库也能架设网站的。然而,各大云计算平台,鸟哥的linux私房菜和其他一些贴子在说到网站的时候都有说数据库(现在,也包括我自己。。),好像不用数据库网站就不能访问一样,所以有必要记录一下下我的想法。

从纯网络服务的角度来说,不使用数据库当然也是可以架一个网站的。如果页面是静态的,只需要在服务器上存网页文件就可以了。浏览器请求,服务器直接返回。但一个网页服务,99%都是需要数据支持的。最常用的场景就是我们得记录用户信息。假如我们做了一个社交用途的网站,还得记录用户的发言和评论信息。最后浏览器请求的时候,我们把这些数据用后台render的方式或者前端JavaScript动态加载的方式显示出来。在这过程中,数据服务就躲不掉了。

我以前经常都会有一个想法,存文件不行么?自己写个模块,专门对文件进行处理。数据的输入与输出就有办法了。用数据库还得学,付出学习成本。到后来才发现自己too naive。用这种方法能解决问题的话,数据库就没必要诞生了哈哈。一些数据库提供的功能,自己想要实现出来,这个实现成本可比数据库的学习成本大太太太多了!

举个例子,我想要找到id是1234567的用户的用户信息。通常我们的想法是,把这些用户存成一个list,然后遍历整个list去匹配id。或者在Python里有更方便的方式,把文件存成Json,然后将文件读进来,用id作为key去找,而熟悉Python的大概知道,dict使用哈希表实现的,找一个key很快。

接下来我们想两个复杂一些但是也十分常用的例子。假如我要找建号时间在一周前到两周前之间所有用户信息呢?上述两种方法都需要遍历。有没有更好的方法呢?第二个,假如用户数据量巨大(10G)要怎么处理呢?,即使用Python dict,将全部数据读进内存,IO效率呢?内存消耗呢?

解决方案肯定是有的呀!数据库原理就讲过了!索引可以用B+树,虽然不如哈希定位快,但是人家有序呀!有了索引之后,数据就可分块存储了,不需要把所有数据都读到内存才能定位到它。另外,数据库还支持多索引呀,比如用户表,出了用id作为索引,假设我们经常需要用时间戳进行用户查找,那么给每个用户信息的时间戳建个索引,在用时间戳进行查找和排序效率就上来了。

这些好功能实现起来可是相当费劲的呢!!既然数据库帮我们实现了,何不使用起来!

MongoDB

为什么选择MongoDB呢,之前也用过MySQL,对比起来,第一个是感觉MongoDB的document跟Python dict几乎是一致的,不需要多做太多的处理,用起来很方便。第二个是从坊间听说,用现在MongoDB使用的更多。

关于数据库原理希望以后能继续探讨下,在建站的过程中,对数据库的理解似乎在FJL老师的数据库原理课上所学的就足够了。于是直接查文档,看怎么做增删查改。菜鸟教程里就有一整套了,当然,更多的东西,比如账号管理,数据库安全等等,我是需要哪个就去查文档。英文看不懂就去找中文帖子~

MongoDB 教程 | 菜鸟教程​www.runoob.com

mongodb用户创建以及权限控制​www.jianshu.com

Pymongo

Pymongo是MongoDB的Python扩展,使用这个库,就能通过调Python接口的方式去操作MongoDB。具体具体操作可以参考官方文档。

Tutorial - PyMongo 3.9.0 documentation​api.mongodb.com

关于部署

一般来说,MongoDB和Http服务是不部署在一个机器上的,MongoDB作为一个独立的服务服务于我们的服务器。比如阿里云是可以专门申请MongoDB数据库服务的。为什么呢?也很好理解,首先,数据库是一种服务,既然是服务他就可以为多个客户进行服务了。不然一个数据库对应一个服务,那估计会很浪费。另外,数据库和服务器的解耦也可以很好的防止机器坏掉而数据丢失的问题,毕竟数据库服务独立出来,就可以做副本集进行备份。然而,对于目前的我来说嘛,没必要再搞一笔花费,建站的目的是为了学习,给别人尝试使用估计也不会有很多用户。负载均衡那一套估计我是用不上了,所以我直接在我的服务器机器上部署了MongoDB,和我的http服务同时运行再同一机器上。

python建站部署_记录一下自己的建站过程(四)MongoDB与Pymongo相关推荐

  1. 网站更新部署20110210,新站部署全过程记录

    网站更新部署20110210,新站部署全过程记录 sudo adduser <用户名> 按提示输入 更改初始root账户密码 ubuntu修改初始root密码 2007-01-24 20: ...

  2. arcengine遍历属性表_记录一次Hive表清理过程

    记录一次Hive表清理过程 背景 时间:2020-07-17 在用spark+hive做数仓的过程中往往会产生很多表,过多历史表会很快消耗掉有限的hdfs资源,并且时间过于久远的表一般不会具有利用价值 ...

  3. python建站的缺点_记录一下自己的建站过程(三):Python与Django

    前言(都是唠叨) 讲完了前端了,后端开始了.还是pml老师,因为我后面的课都没听过,所以一直都是不知道后端到底是怎么工作的.只听过一个词叫Tornado,对就真的只知道这个词,龙卷风,它是个啥我到现在 ...

  4. python flask api部署_使用flask开发api——部署flask,使用gunicorn+gevent模式的http server...

    使用flask开发api--部署flask,使用gunicorn+gevent模式的http server 用flask开发了服务端的api,记录部署上服务器的过程,以供后续使用. 安装python3 ...

  5. python restful服务部署_用python为mysql实现restful接口

    编辑推荐: 本文来自于朱念洋 ,文中针对游戏服务层的案例详细介绍的,代码描述详细. 最近在做游戏服务分层的时候,一直想把mysql的访问独立成一个单独的服务DBGate,原因如下: 请求收拢到DBGa ...

  6. 云服务器建站原理_云服务器cvm与建站主机之间的区别

    (文章来源:西部数码) 云服务器cvm与建站主机区别是什么?cvm的英文全拼是CloudVirtualMachine(云虚拟机),所以云服务器cvm是指虚拟云服务器,属于云服务器产品中的一种.而建站主 ...

  7. 我的python学习笔记全集_记录我的Python学习笔记

    不想再像以前那样,什么都从头开始学习语法.总结语法,这样反而会过分纠结于语法,耽误了开发,毕竟语言的主要属性是工具,次要的属性是语言本身. 所以还是先熟练使用语言去进行开发,等足够熟悉了,再去研究语言 ...

  8. python代码风格指南_记录Python代码:完整指南

    python代码风格指南 Welcome to your complete guide to documenting Python code. Whether you're documenting a ...

  9. python国内源 失效_使用pypi国内镜像资源站解决Python工具包安装失败

    今天用pip工具箱安装Python的jieba分词工具包,总是到20%左右就安装失败,而且最开始下载速度极慢,几kb的速度,以为是电脑网的问题,又试了好几次还是失败,最后利用清华大学的pypi 镜像资 ...

最新文章

  1. SAP有用的NOTE(持续更新)
  2. win7 旗舰版 截图工具不能使用 解决办法
  3. STM32 进阶教程 11 - RAM中运行程序
  4. 消防信号总线原理_建筑电气消防设计6大常见问题分析
  5. 3 Python os 文件和目录
  6. Android AudioTrack/AudioRecord -wav文件读取3
  7. python日志,支持彩色打印和文件大小切片写入和写入mongodb
  8. 国内三大PT(Private Tracker)站分析
  9. linux内存管理(五)-引导内存分配器
  10. 14章类型信息之使用类字面常量
  11. C++17 Any类
  12. tornado celery mysql_tornado中使用celery实现异步MySQL查询
  13. Ubuntu18.04配置ork(ecto、ecto_image_pipeline、ecto_opencv、ork_reconstruction)
  14. 世界上最详细的Linux C udp实现文件传输
  15. python计算方位角_python如何计算方位角 python计算方位角代码实例
  16. Java序列化与注解面试题
  17. Linux安装jdk,mysql,tomcat,redis和nginx
  18. 情景剧《重走长征路》上演
  19. goldendb与mysql_GoldenDB ,一个已经全面支撑银行核心系统的国产数据库
  20. flash+AS3制作的倒计时效果

热门文章

  1. 使用nginx代理的情况下获取用户真实IP
  2. Nvidia 视频处理框架----1. VideoProcessingFramework 介绍和安装
  3. pc端微信分享(不是直接分享)
  4. SAP BW4 410(数据抽取、信息对象、建模等)学习1-5章
  5. 含氮杂环化合物改性磁性聚苯乙烯微球/酰基化聚苯乙烯微球/酞胺化聚苯乙烯微球/酸化功能化聚苯乙烯微球
  6. 毕业设计 - 题目:垃圾邮件(短信)分类 算法实现 机器学习 深度学习 开题
  7. pd快充线无法连接计算机,一种PD快充高清连接线的制作方法
  8. 通过自动驾驶+物联网解决道路拥堵的方案建议(以虎门大桥为例)
  9. 建站之星 自定义html,建站之星如何设伪静态规则?建站之星伪静态设置方法!
  10. 用C++实现的高性能WEB服务器