带你读《2022技术人的百宝黑皮书》——数据库存储选型经验总结(4)

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 带你读《2022技术人的百宝黑皮书》——数据库存储选型经验总结(4)

带你读《2022技术人的百宝黑皮书》——数据库存储选型经验总结(3)https://developer.aliyun.com/article/1340014?groupCode=taobaotech


列式 NoSql(代表 —-HBase)

 

列式 NoSql 和关系型数据库一样都有主键的概念,区别在于关系型数据库是按照行组织的数据,数据字段即使没有值同样占空间,列式存储完全是另一种方式,它是按列进行数据组织的,好处在于:

 

  1. 查询时只有指定的列会被读取,不会读取所有列
  2. 存储上节约空间,空值不会被存储,一列中有时候会有很多重复数据(尤其是枚举数据,性别、状态等字段), 这类数据可压缩
  3. 列数据被组织到一起,一次磁盘 IO 可以将一列数据一次性读取到内存中

 

大数据时代最具代表性的技术之一 HBase 就是列式 NoSQL 的产品实现,其优点主要是:

 

  1. 海量数据存储,PB 级别数据随便存,底层基于 HDFS(Hadoop 文件系统),数据持久化
  2. 读写性能好,只要没有滥用造成数据热点,读写基本没任何问题
  3. 横向扩展在关系型数据库及非关系型数据库中都是最方便的之一,只需要添加新机器就可以实现数据容量的线性增长,且可用在廉价服务器上,节省成本
  4. 可存储结构化或者半结构化的数据
  5. 本身没有单点故障,可用性高
  6. 列数理论上无限制,HBase 本身只对列族数量有要求,建议 1~3

 

缺点主要表现在:

 

  1. HBase Hadoop 生态的一部分,因此它本身是一款比较重的产品,依赖很多 Hadoop 组件,数据规模不大没必要用,运维还是有点复杂的。
  2. 不支持分页查询,因为统计不了数据总数。
  3. KV 式存储,条件查询很弱,HBaseScan 扫描一批数据的情况下还是提供了前缀匹配这种 API 的,条件查询除非定义多个 RowKey 做数据冗余。

 

因此 HBase 比较适用于 KV 型存储且未来无法预估数据增长量的场景,另外 HBase 使用还是需要一定的经验,主要体现在 RowKey 的设计上。

 

文档型 NoSql(代表 —-MongoDB)

 

文档型 NoSql 指的是将半结构化数据存储为文档的一种 NoSql,文档型 NoSql 通常以 JSON 或者 XML 格式存储数据,因此文档型 NoSql 是没有 Schema 的,由于没有 Schema 的特性,我们可以随意地存储与读取数据,因此文档型 NoSql 的出现是解决关系型数据库表结构扩展不方便的问题的。

 

 

 

MongoDB 是文档型 NoSql 的代表产品,同时也是所有 NoSql 产品中的明星产品之一,它的很多概念与关系数据库类似,因此,对于 MongDB,我们只需要理解成一个 Free-Schema 的关系型数据库就好了,其优点主要是:

 

  1. 没有预定义的字段,扩展字段容易
  2. 相较于关系型数据库,读写性能优越,命中二级索引的查询不会比关系型数据库慢,对于非索引字段的查询则是全面胜出

 

缺点在于:

 

  1. 不支持事务操作,虽然 Mongodb4.0 之后宣称支持事务,但是效果待观测
  2. 多表之间的关联查询不支持(虽然有嵌入文档的方式),join 查询还是需要多次操作
  3. 空间占用较大,这个是 MongDB 的设计问题,空间预分配机制 + 删除数据后空间不释放,只有用 db.repair Database () 去修复才能释放
  4. 目前没发现 MongoDB 有关系型数据库例如 MySqlNavicat 这种成熟的运维工具

 

总而言之,MongDB 的使用场景很大程度上可以对标关系型数据库,但是比较适合处理那些没有 join、没有强一致性要求且表 Schema 会常变化的数据。

 

通过以上讨论分析我们心中已经有了一个基本的选型框架指导,实际上在数据库选型时回答自己两个核心问题就好了:

 

  1. 什么时候选用关系型数据库,什么时候选用非关系型数据库
  2. 选用非关系型数据库的话,使用哪种非关系型数据库

 

带你读《2022技术人的百宝黑皮书》——数据库存储选型经验总结(5)https://developer.aliyun.com/article/1340012?groupCode=taobaotech

相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3天前
|
存储 调度 数据库
存储物理页属性的PFN数据库
存储物理页属性的PFN数据库
|
2天前
|
SQL 缓存 负载均衡
数据库设计优化:性能提升与扩展性的技术探讨
【6月更文挑战第28天】数据库设计优化聚焦性能与扩展性:SQL优化、索引策略、缓存利用及分库分表、集群技术,旨在平衡处理速度与系统稳定性。通过智能SQL、复合索引、查询缓存减少数据库压力,垂直/水平拆分与集群实现数据分布式处理,提升并发能力。
|
6天前
|
Java 数据库连接 API
后端开发之用Mybatis简化JDBC的开发快速入门2024及数据库连接池技术和lombok工具详解
后端开发之用Mybatis简化JDBC的开发快速入门2024及数据库连接池技术和lombok工具详解
13 3
|
6天前
|
监控 Java 数据库连接
Java开发者必读:连接池技术如何提升数据库连接效率
【6月更文挑战第24天】Java开发中,面对高并发的数据库访问,连接池技术成为性能优化的关键。它预先创建连接池,减少频繁的连接创建/关闭,提升响应速度,节省资源,并增强系统稳定性。例如,HikariCP连接池通过配置实现DB连接管理,简化代码并提升应用性能。
|
3天前
|
存储 SQL 运维
OLAP数据库选型指南:Doris与ClickHouse的深入对比与分析
OLAP数据库选型指南:Doris与ClickHouse的深入对比与分析
|
3天前
|
编译器 API 数据库
技术好文共享:(xxxx)十一:SQLite3的db数据库解密(三)数据库在线备份
技术好文共享:(xxxx)十一:SQLite3的db数据库解密(三)数据库在线备份
|
3天前
|
存储 NoSQL 关系型数据库
技术心得:常用数据库有哪些
技术心得:常用数据库有哪些
|
3天前
|
SQL 缓存 Java
必知的技术知识:hsql数据库使用详解(入门)及快速使用
必知的技术知识:hsql数据库使用详解(入门)及快速使用
|
3天前
|
存储 关系型数据库 MySQL
技术笔记:MySQL数据库优化详解(收藏)
技术笔记:MySQL数据库优化详解(收藏)
|
3天前
|
SQL 关系型数据库 MySQL
技术笔记:python连接mysql数据库
技术笔记:python连接mysql数据库