关系型数据库能够搭建成集群模式为什么还要非关系型数据库呢?

本文探讨了关系型数据库集群模式与非关系型数据库的对比,从速度、集群扩展性、数据结构灵活性及快速读写四个方面分析了各自的优劣。

今天偶然看到了一个面试,题目就是“关系型数据库能够搭建成集群模式为什么还要非关系型数据库呢?”

想了一下觉得我自己也答不出来,于是就上网查了一下,然后问了公司的DBA。

然后总结一下,个人答案如下:


这个问题的关键点在于关系型数据库是集群模式来和非关系型数据库进行对比。

1、速度:虽然是集群模式,但是数据量一多的话,关系型数据库插入会非常慢,即便你做了读写分离,库表散列之类的都没用,插入也会很慢(这基于关系型数据库的特点)

2、集群扩展:关系型数据库扩展起来是非常麻烦的,而且添加机器的时候要进行rebalance,耗时;但是非关系型数据库扩展起来就很方便了,直接配置几下就可以完成,而且现在的非关系型数据库都是基于内存而设计的,Rebalance之类的会很快

3、库表的数据结构:现在的非关系型数据库可以随意添加字段和值,没哟受限于表本身的结构,所以很方便,表数据也很干净,没哟冗余,所以随着大数据的发展,各式各样结构的数据有很多,所以这就很符合非关系型数据库的特点。相比之下关系型数据库,如果只想添加一个字段的数据,那么还要占据一整条数据,冗余!

4、快速读写:由于现在的非关系型数据库基本都是基于内存的,所以查询会很快,即使数据量再大也是如此。

### MySQL 分区表与 Hive 分区表的区别与联系 #### 数据存储方式 MySQL 的分区表是在数据库内部实现的一种逻辑分片机制,其主要目的是优化查询性能并减少 I/O 开销。它将一张大表按照指定的规则划分为多个子集,这些子集仍然属于同一个物理表的一部分[^1]。 相比之下,Hive 的分区是一种外部文件系统的组织形式。当创建一个带分区的 Hive 表时,实际上是在 HDFS 上为每个分区创建了一个独立的目录结构。这种设计使得 Hive 可以高效地过滤掉不需要读取的数据块,从而提升大规模数据分析的速度[^3]。 #### 查询处理能力 对于 MySQL 来说,在执行涉及分区的操作时,SQL 引擎会自动判断哪些分区满足条件,并仅扫描那些符合条件的部分而不是整个表格的内容[^2]。这种方法极大地提高了复杂 SQL 请求下的响应时间特别是针对海量级记录集合的情况下显得尤为重要。 然而,Hive 并不真正理解所谓的“分区”,它的所谓‘分区’只是简单映射到了 HDFS 文件夹路径而已;因此所有的计算工作都依赖 MapReduce 或 Tez 等框架来完。尽管如此,由于采用了基于列存格式(如 ORC/Parquet),加上良好的压缩算法以及分布式架构的支持下,即使面对 PB 级别的数据规模也能够保持较高的吞吐率和较低延迟特性. #### 使用场景差异 通常情况下会选择利用 Mysql 进行事务型业务操作比如订单管理系统或者用户认证服务等领域应用频繁更新删除动作较多的小批量实时交易类任务适合采用关系型数据库解决方案即Mysql;而像日志分析、点击流统计这类需要处理大量历史积累下来非结构化半结构化的离线批处理作业则更适合交给大数据平台上的工具例如 Apache Hive 去解决. 以下是两种技术栈之间可能存在的转换过程的一个例子: ```sql -- Sqoop 导入命令示例 sqoop import --connect jdbc:mysql://localhost/dbname --table mysql_table_name --target-dir /path/in/hdfs -m 1; ALTER TABLE hive_partitioned_table ADD PARTITION (partition_column='value'); ``` 上述脚本展示了如何借助 Sqoop 工具先把来自 MySQL 中的关系型数据迁移到 Hadoop 集群内的临时位置后再加载至最终目标——已定义好相应分区属性的目标 Hive 表当中去. ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值