mongodb,mysql,redis,sqlite等数据库使用

 

mongodb中upsert和insert的使用注意

https://blog.csdn.net/jeffrey11223/article/details/80366368

参考

Mysql和MongoDB性能对比及应用场景分析

https://blog.csdn.net/zombres/article/details/82020931

MySQL、MongoDB、Redis 数据库之间的区别

https://blog.csdn.net/CatStarXcode/article/details/79513425

 

MongoDB 的应用场景

在另一方面,对开发者来说,如果是因为业务需求或者是项目初始阶段,而导致数据的具体格式无法明确定义的话,MongoDB的这一鲜明特性就脱颖而出了。相比传统的关系型数据库,它非常容易被扩展,这也为写代码带来了极大的方便。

不过 MongoDB 对数据之间事务关系支持比较弱,如果业务这一方面要求比较高的话,MongoDB 还是并不适合此类型的应用。
非关系型数据库(NoSQL ),属于文档型数据库。先解释一下文档的数据库,即可以存放 xml、json、bson 类型系那个的数据。这些数据具备自述性(self-describing),呈现分层的树状数据结构。数据结构由键值(key=>value)对组成。

存储方式:虚拟内存+持久化。
持久化方式:

MongoDB 的所有数据实际上是存放在硬盘的,所有要操作的数据通过 mmap 的方式映射到内存某个区域内。
然后,MongoDB 就在这块区域里面进行数据修改,避免了零碎的硬盘操作。
至于 mmap上的内容flush到硬盘就是操作系统的事情了,所以,如果,MongoDB 在内存中修改了数据后,mmap 数据flush到硬盘之前,系统宕机了,数据就会丢失。

它是一个内存数据库,数据都是放在内存里面的。
对数据的操作大部分都在内存中,但 MongoDB 并不是单纯的内存数据库。
MongoDB 是由 C++ 语言编写的,是一个基于分布式文件存储的开源数据库系统。
高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
 

mongodb优缺点

优点: 
1)社区活跃,用户较多,应用广泛。 
2)MongoDB在内存充足的情况下数据都放入内存且有完整的索引支持,查询效率较高。 
3)MongoDB的分片机制,支持海量数据的存储和扩展。 
缺点: 
1)不支持事务 
2)不支持join、复杂查询 
初步调研下来,MongoDB具备我们需要的特性,而缺点不影响我们的应用场景,故接下来我们就开始做实际的性能压测。

 

MongoDB 与 MySQL 的适用场景:

MongoDB 的适用场景为:数据不是特别重要(例如通知,推送这些),数据表结构变化较为频繁,数据量特别大,数据的并发性特别高,数据结构比较特别(例如地图的位置坐标),这些情况下用 MongoDB , 其他情况就还是用 MySQL ,这样组合使用就可以达到最大的效率。

1.如果需要将 MongoDB 作为后端 db 来代替MySQL使用,即这里 MySQL 与 MongoDB 属于平行级别,那么,这样的使用可能有以下几种情况的考量:

    (1)MongoDB 所负责部分以文档形式存储,能够有较好的代码亲和性,json 格式的直接写入方便。(如日志之类) 

    (2)从 data models 设计阶段就将原子性考虑于其中,无需事务之类的辅助。开发用如 nodejs 之类的语言来进行开发,对开发比较方便。

    (3)MongoDB 本身的 failover 机制,无需使用如 MHA 之类的方式实现。

2.将 MongoDB 作为类似 Redis,memcache 来做缓存db,为 MySQL 提供服务,或是后端日志收集分析。 考虑到 MongoDB 属于 No SQL 型数据库,SQL 语句与数据结构不如 MySQL 那么亲和 ,也会有很多时候将 MongoDB 做为辅助MySQL 而使用的类 Redis memcache 之类的缓存db来使用。 亦或是仅作日志收集分析。

MongoDB 有一个最大的缺点,就是它占用的空间很大,因为它属于典型空间换时间原则的类型。那么它的磁盘空间比普通数据库会浪费一些,而且到目前为止它还没有实现在线压缩功能,在 MongoDB 中频繁的进行数据增删改时,如果记录变了,例如数据大小发生了变化,这时候容易产生一些数据碎片,出现碎片引发的结果,一个是索引会出现性能问题。
另外一个就是在一定的时间后,所占空间会莫明其妙地增大,所以要定期把数据库做修复,定期重新做索引,这样会提升MongoDB 的稳定性和效率。

1.MySQL 来自女儿的名字; MongoDB 来自 humongous
2.MySQL 使用 Table/Row/Column; MongoDB 使用 Collection/Document
3.MySQL 需要指定 table 的 schema; MongoDB的 collection 的每个 document 的 schema 可以自由修改
4.MySQL 支持 join; MongoDB 没有 join
5.MySQL 使用 SQL 语言; MongoDB 使用类似 JavaScript 的函数

 

 

游戏服务器使用MongoDB作为数据库,还有必要使用Redis缓存吗?

https://www.zhihu.com/question/29775064

看你做多大规模,比如,热数据(比如1天内频繁访问的)放 redis,冷数据(超过一天的)放 mongo。

把MongoDB当成MySQL, 把Redis当成内存

跨服数据交换用Redis. 数据持久化用MongoDB

Redis持久化别沾, 系统的未必适合游戏, 而自己做未必靠谱. 用专业的持久化DB才是正道

 

 

MongoDB 和 Redis 的区别:

简介

MongoDB 更类似 MySQL,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询 JSON 数据,能存储海量数据,但是不支持事务。

MySQL 在大数据量时效率显著下降,MongoDB 更多时候作为关系数据库的一种替代。

内存管理机制

Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。
MongoDB 数据存在内存,由 linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。

支持的数据结构

Redis 支持的数据结构丰富,包括hash、set、list等。
MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。

性能

二者性能都比较高,应该说都不会是瓶颈。

可靠性

二者均支持持久化。

集群

MongoDB 集群技术比较成熟,Redis从3.0开始支持集群。

不适用的场景

Ø  需要使用复杂sql的操作
Ø  事务性系统
下面是 MongoDB 和 Redis 的对比图:

MySQL 与 Redis 的区别:

MySQL 是持久化存储,存放在磁盘里面,检索的话,会涉及到一定的 IO,为了解决这个瓶颈,于是出现了缓存,比如现在用的最多的 memcached(简称mc)。首先,用户访问mc,如果未命中,就去访问 MySQL,之后像内存和硬盘一样,把数据复制到mc一部分。

  Redis 和mc都是缓存,并且都是驻留在内存中运行的,这大大提升了高数据量web访问的访问速度。然而mc只是提供了简单的数据结构,比如 string存储;Redis却提供了大量的数据结构,比如string、list、set、hashset、sorted set这些,这使得用户方便了好多,毕竟封装了一层实用的功能,同时实现了同样的效果,当然用Redis而慢慢舍弃mc。
  内存和硬盘的关系,硬盘放置主体数据用于持久化存储,而内存则是当前运行的那部分数据,CPU访问内存而不是磁盘,这大大提升了运行的速度,当然这是基于程序的局部化访问原理。
  推理到 Redis + MySQL,它是内存+磁盘关系的一个映射,MySQL 放在磁盘,Redis放在内存,这样的话,web应用每次只访问Redis,如果没有找到的数据,才去访问 MySQL。
  然而 Redis + MySQL 和内存+磁盘的用法最好是不同的。
前者是内存数据库,数据保存在内存中,当然速度快。
后者是关系型数据库,功能强大,数据访问也就慢。
像memcache,MongoDB,Redis,都属于No SQL系列。
不是一个类型的东西,应用场景也不太一样,还是要看你的需求来决定。
 

面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)

https://blog.csdn.net/Design407/article/details/103242874?depth_1-utm_source=distribute.pc_feed.none-task&request_id=&utm_source=distribute.pc_feed.none-task

 

你可能感兴趣的:(数据库)