一文看懂Python Web开发常见数据库MangoDB, Memcached和Redis

在Python Web和Django开发过程中我们有必要根据不同的应用场景来选择非关系型的数据库(no-SQL)来提升网站性能。当我们的网站流量变得非常大时,从传统关系型数据库如MYSQL中读写数据会变得很消耗时间和计算资源。例如当MySQL单表数据达到5GB以上时,读写性能会有显著的下降,这时我们就需要考虑使用其它类型数据库来补充了。目前最流行的no-SQL数据库非MangoDB, Memcached和Redis莫属了。今天我们就来介绍下它们的区别及应用场景。


MangoDB

mongodb是文档型的非关系型no-SQL数据库,其优势在于查询功能比较强大,能存储海量数据。对于中小型网站而言,MySQL和其它关系型数据库完全能胜任,不需要使用MangoDB。对于大中型网站而言,MangoDB可以作为关系性数据库很好的补充。MongoDB由于侧重海量数据写入性能, 而非事务安全, 所以很适合存储业务系统中海量“低价值”的数据。对于事务要求很高的应用比如银行交易系统,MangoDB是不适用的。


MangoDB常见应用场景包括爬虫爬来数据的存储,存储网站的日志,存储海量用户的评论。


值得一提的是,mongodb数据和MySQL的数据都是保存在磁盘中的,而不是内存中,这是它与Memcached和Redis最大的区别。MangoDB本质上来看是用来永久存储数据的数据库,而Memcached和Redis主要用来做缓存,从这个角度讲Memcached和Redis更像。


Memcached

Memcached是内存性数据库,数据以Key-Value形式存储,主要用来提供高性能分布式内存缓存服务。在实际Web开发过程中,学会利用缓存是非常重要的。在动态网站中,用户每次请求一个页面,服务器都会执行以下操作:查询数据库,渲染模板,执行业务逻辑,最后生成用户可查看的页面。这会消耗大量的资源,当访问用户量非常大时,就要考虑这个问题了。缓存就是为了防止重复计算,把那些消耗了大量资源的结果保存起来,下次访问时就不用再次计算了,这样可以大大减轻数据库的负载。

扫描二维码关注公众号,回复: 1462201 查看本文章


由于memcached保存的数据都存储在memcached内置的内存存储空间中, 因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。


Memcached的应用场景只有一个: 缓存。例如缓存一个页面,一个数据集或整个网站。


Redis

Redis也是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,但支持数据类型更多,包括:字符串、哈希表、链表等。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。


Redis一般也用来提供高效的缓存服务,而不是做数据的永久存储。其应用场景有缓存和记录网站日志。


Redis和Memcached都可以设置缓存数据过期。在实际Web开发中,数据库缓存Redis和Memcached基本上是二选一。Redis作为后期之秀,越来越多抢了Memcached的风头。


Memcached和Redis的区别

  • Memcached支持缓存图片和小文件(比如用户头像),redis不支持

  • Redis内部是支持事务的,Memcached不支持

  • Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;

  • 存储数据安全--memcache挂掉后,数据没了;redis可以定期保存到磁盘

  • 灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复;


后续我们会介绍Django的缓存系统,及如何使用Redis和Memcached缓存。如果你喜欢我们的文章,欢迎订阅我们的微信公众号【Python与Django大咖之路】

猜你喜欢

转载自blog.csdn.net/weixin_42134789/article/details/80568055