几大数据库的区别
关系型数据库
mysql
开发中小型项目效率高且够用
优点:开源免费,轻量级方便部署和备份恢复,简单,在主流平台上几乎都能运行
缺点:性能相对缓慢,并发能力弱(最大连接数100)Oracle
优点:几乎适合全平台,安全(获得最高级别ISO标准认证),性能高
缺点:贵,维护成本高,复杂access
优点:界面简单,维护简单,支持广泛易于拓展
缺点:数据量大时性能低(超过100M数据),并发编辑性能差,不能通过安装包而不得不安装access运行环境来使用sql server
优点:简单
缺点:只能在Windows上运行,风险大无任何安全证书
非关系型数据库
1, redis
优点:数据结构多样化,不用担心数据丢失,单线程请求所以不用担心数据一致性
缺点:占内存(string类型),数据关系性能差(尤其是对字符串数据进行检索时),单进程性能受CPU限制
Mongo
优点:支持丰富的数据表达和索引,适合大数据存储,不用担心数据丢失,内置数据分析功能
缺点:不支持事务,数据一致性差memcache
优点:吞吐量大速度快
缺点:数据结构单一,保存在内存中所以一旦机器关机就会导致数据丢失
(传统)数据库和数据仓库的区别
服务对象不同。
数据库服务于业务,数据仓库服务于分析。
企业常用的ERP系统、OA系统,手机上的点餐APP、网购APP,用户通过这些软件程序与背后的数据库进行交互,在底层的数据表上进行增删改查的操作。
数据仓库是面向报表查询、数据分析服务的,分析师通过BI可视化分析工具、ETL工具来访问数据仓库。数据来源不同。
数据库的数据来源于各种业务系统软件程序与用户交互产生的数据。
数据仓库是各个数据库的集合体,其数据直接来源于业务系统的多个数据库。数据量不同。
数据库很少存放历史数据,通常只描述某个业务时刻的数据,随着业务系统变化而变化。
数据仓库为了分析会存放大量的历史数据,大部分数据都是静态的。建模方式不同。
数据库为了实现业务流程,设计表的方式通常采用“三范式3NF”建模方式,最小原子列不可分、主外键等,通过一对多或多对多的形式减少数据冗余。
数据仓库的建模方式既有“三范式3NF”,又有维度建模比如星型模型、雪花模型,通常采用“Kimball”的维度建模。由于是反规范式设计,会保留大量的数据冗余。
同时,为了底层架构的稳定性和健壮性,数据仓库还会进行底层表的分层设计,比如经常看到的ODS 层、Staging 层、Trans 层、Dimension 层、Fact 层、Data Mart 层等,都是为了分析的需要而进行设计
简言之:
数据仓库的本质仍然是数据库,只是为了BI建设和分析的目的在底层表与表的关系建模设计上和传统基于业务系统的数据库建模设计上有很大的差异。传统数据库多增删改,数据仓库多查询分析。传统数据库服务于业务流程,通过业务软件来访问;数据仓库服务于BI分析,通过BI分析软件来访问。
什么是Hive
Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便。并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
Hive和SQL的区别
1.查询语言不同:hive是hql语言,mysql是sql语句;
2.数据存储位置不同:hive是把数据存储在hdfs上,而mysql数据是存储在自己的系统中;
3.数据格式:hive数据格式可以用户自定义,mysql有自己的系统定义格式;
4.数据更新:hive不支持数据更新,只可以读,不可以写,而sql支持数据更新;
5.索引:hive没有索引,因此查询数据的时候是通过mapreduce很暴力的把数据都查询一遍,也造成了hive查询数据速度很慢的原因,而mysql有索引;
6.延迟性:hive延迟性高,原因就是上边一点所说的,而mysql延迟性低;
7.数据规模:hive存储的数据量超级大,而mysql只是存储一些少量的业务数据;
8.底层执行原理:hive底层是用的mapreduce,而mysql是excutor执行器;
——
hive有哪些保存元数据的方式,各有什么特点。
内存数据库derby,安装小,但是数据存在内存,不稳定
mysql数据库,数据存储模式可以自己设置,持久化好,查看方便。hive内部表和外部表的区别
内部表:加载数据到hive所在的hdfs目录,删除时,元数据和数据文件都删除
外部表:不加载数据到hive所在的hdfs目录,删除时,只删除表结构。生产环境中为什么建议使用外部表?
因为外部表不会加载数据到hive,减少数据传输、数据还能共享。
hive不会修改数据,所以无需担心数据的损坏。
删除表时,只删除表结构、不删除数据。你们数据库怎么导入hive 的,有没有出现问题?
在导入hive的时候,如果数据库中有blob或者text字段,会报错,解决方案在sqoop笔记中Redis,传统数据库,hbase,hive 每个之间的区别?
Redis:分布式缓存,强调缓存,内存中数据【内存、缓存】
传统数据库:注重关系
Hbase:列式数据库,无法做关系数据库的主外键,用于存储海量数据,底层基于hdfs【数据量】
hive:数据仓库工具,底层是mapreduce。不是数据库,不能用来做用户的交互存储【用于分析】
- Hive提供了三个虚拟列:
INPUT__FILE__NAME
BLOCK__OFFSET__INSIDE__FILE
ROW__OFFSET__INSIDE__BLOCK
但ROW__OFFSET__INSIDE__BLOCK默认是不可用的,需要设置hive.exec.rowoffset为true才可以。可以用来排查有问题的输入数据。
INPUT__FILE__NAME, mapper任务的输出文件名。
BLOCK__OFFSET__INSIDE__FILE, 当前全局文件的偏移量。对于块压缩文件,就是当前块的文件偏移量,即当前块的第一个字节在文件中的偏移量。
hive partition分区
分区表,动态分区insert into 和 override write区别?
insert into:将某一张表中的数据写到另一张表中
override write:覆盖之前的内容。用mapreduce怎么处理数据倾斜问题?
数据倾斜:map /reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,
这是因为某一个key的条数比其他key多很多(有时是百倍或者千倍之多),这条key所在的reduce节点所处理的数据量比其他节点就大很多,
从而导致某几个节点迟迟运行不完,此称之为数据倾斜。
用hadoop程序进行数据关联时,常碰到数据倾斜的情况,这里提供一种解决方法。
自己实现partition类,用key和value相加取hash值
==============================
Hadoop面试题:
业务场景:
用户访问网站时,每个页面会上报一条PV数据,同时做一些业务操作,会上报事件数据如:
- 用户浏览页面PV
- 用户事件行为(开户、下单买东西)
- 页面click点击(包含各自超链接、可点击按钮)
每日以上数据上报数约为10、1000、10000
业务需求:
- 按时间维度(天、周),某种业务维度(开户、买xx),定时做统计(总人数、金额等)
例:过去一周(隔日)的PV、UV数,交易总金额 - 需要回溯历史数据,如:过去某个时间点(段)访问过某页面的用户,在某个时间点导致某种业务发生的统计数据
例:2020-01-01至2020-12-31访问A页面并在这期间开户下单的用户数
技术方案:
- 用hive分析业务数据
- 将数据导入至hive
- sql设计思路:多表关联
找到所有在2020-01-01至2020-12-31访问A页面的用户
在这些用户中筛选开户下单的用户
统计总数