postgreSQL、mysql、Mongoldb、redis的对比
1 postgreSQL 和 mysql的对比
目前国内Mysql是主流,PG屈于二线。
mysql和Pg早期就是两个极端,mysql基本上就是满足数据库语法的大号KV,对关系型数据库的高级语法支持的不是很好。早期的很多互联网公司只是使用它存储,而复杂的一些计算都在服务器完成,由于确实部分高级功能和数据一致性保障,mysql支持简单SQL更加具备速度优势。
mysql多线程模型,并发支持良好,PG是多进程模型,创建进程更慢
PostgreSQL支持的数据类型比MySQL更为丰富。如array, xml,JSONB(二进制格式的JSON, 读取更快), timestamptz(带时区的时间戳) ,numrange(数值的范围)等
事务的支持:PostgreSQL支持事务的强一致性,事务保证性好,完全支持ACID特性。MySQL只有innodb引擎支持事务,mysiam不支持事务。
PG SQL支持的索引类型很多,如:GiST(Generalized Search Tree,通用搜索树)、GIN(Generalized Inverted Index,通用倒排索引)和BRIN(Block Range INdex,块范围索引)等,可以根据不同的查询需求和数据类型选择合适的索引。这种灵活性使得PG在处理复杂查询和大数据量时更具优势。``
总之,MySQL 简单易用、性能优越,适用于处理大量读操作和小型项目;而 PostgreSQL 强大灵活、具备丰富的数据类型和高级特性,适用于处理复杂数据和大型项目。
JSON 和JSONB对比
- JSON:以文本格式存储JSON数据,保留了JSON数据的原始格式,包括键之间的空格、键的顺序以及重复的键。当从数据库中检索JSON数据时,需要再次解析这些数据。
- JSONB:以二进制格式存储JSON数据,这种格式在存储前会先对数据进行解析和规范化。因此,JSONB在读取时不需要重新解析,从而提高了性能。
如果你的应用只需要将JSON数据保存到数据库中,并且很少进行读取和查询操作,那么JSON可能是一个更好的选择。
如果你的应用需要在数据库中频繁地读取和查询JSON数据,或者需要在JSON列上使用索引来提高查询性能,那么JSONB将是更好的选择。
2 Mysql 和Mongoldb对比
- postgresql是关系型数据库,Mongoldb 是非关系型数据库,
- 查询语法不同。postgresql使用基本的sql操作,mongodb使用pipeline,比如pg join ,mongo $lookup
- mongodb的优势就是文档存储,业务经常变动,需要不时的添加字段,那么mongodb比较适合
- 对于那些需要对多个文档(在单个或多个集合中)进行原子性读写的场景,MongoDB支持了多文档事务。
- mysql集群主要模式是:主从+哨兵+cluster,mongoDb的是主从+复制集+分片集群
3 Redis
- 非常丰富的数据结构
- Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断;
- 数据存在内存中,读写非常的高速,可以达到10w/s的频率
4 es和mongo
相同点:
MongoDB
和Elasticsearch
都属于NoSQL大家族, 且都属于文档型数据存储- 两者都通过分片支持水平扩展,分片将数据进行水平切分之后,将其存储到多个不同的服务器节点上的一 种扩展方式。
水平分片: 通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或表中,每个分片仅包含数据的一部分。取模,范围
垂直分片: 按照业务将表进行归类,分布到不同的数据库或表
不同点:
- 定位不同
- MongoDB 是 文档型数据库, 提供 数据存储和管理服务
- Elasticsearch 是搜索服务, 提供 数据检索服务
- 使用场景:
- 如果你有一批数据要看, 但是不经常进行修改, 这个时候毫无疑问可以用es
- 如果你还打算继续修改数据, 最好就是使用MongoDB
5. influxDb是什么?
InfluxDB 是一个高性能、开源的时间序列数据库,专门设计用于存储和管理时间序列数据,如监控数据、物联网数据和实时分析数据。
我们团队使用的场景是:opc数据采集,需要定时去采集设备的主轴数据。如:主轴转速、主轴负载、主轴倍率等