在企业级大数据平台的建设中,从传统关系型数据库(如Oracle)向Hadoop平台汇聚数据是一个重要的课题。目前主流的工具有Sqoop、DataX、Oracle GoldenGate for Big Data等几种。Sqoop使用sql语句获取关系型数据库中的数据后,通过hadoop的MapReduce把数据从关系型数据库中导入数据到HDFS,其通过指定递增列或者根据时间戳达到增量导入的目的,从原理上来说是一种离线批量导入技术;DataX 直接在运行DataX的机器上进行数据的抽取及加载,其主要原理为:通过Reader插件读取源数据,Writer插件写入数据到目标 ,使用Job来控制同步作业,也是一种离线批量导入技术;Oracle Goldengate for Big Data抽取在线日志中的数据变化,转换为GGS自定义的数据格式存放在本地队列或远端队列中,并利用TCP/IP传输数据变化,集成数据压缩,提供理论可达到9:1压缩比的数据压缩特性,它简化了向常用大数据解决方案的实时数据交付,可以在不影响源系统性能的情况下将交易数据实时传入大数据系统。对比以上工具及方法,结合数据处理的准确性及实时性要求,我们评估Oracle Goldengate for Big Data基本可以满足当前大数据平台数据抽取的需求。
分页查询一般 DBA 想到的办法是在某个(如ID,create_time)字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。
因为如果当 LIMIT 子句变成 “LIMIT 1000000,10” 时,你会抱怨:我只取10条记录为什么还是慢?
要知道数据库也并不知道第1000000条记录从什么地方开始,即使有索引也需要从头计算一次。出现这种性能问题,多数情形下是程序员偷懒了。在前端数据浏览翻页,或者大数据分批导出等场景下,是可以将上一页的最大值当成参数作为查询条件的。SQL 重新设计如下:
SELECT
FROM 表
WHERE create_time > '2017-07-04 09:00:00'
ORDER BY create_time limit 10;
这样查询时间基本固定,不会随着数据量的增长而发生变化。
简单的说几句吧。其实这个解决方案呢,主要是要先考虑成本问题,其他的,技术问题其实都很容易解决,但是企业应用上,最大的限制就是成本。下面以ORACLE数据库为例,简单说说。希望对你有所帮助。(数据库类型并不重要,解决方案都是大同小异。)
1、基于存储层的容灾复制方案
这种技术的复制机制是通过基于SAN的存储局域网进行复制,复制针对每个IO进行,复制的数据量比较大;系统可以实现数据的同步或异步两种方式的复制。对大数据量的系统来说有很大的优势(每天日志量在60G以上),但是对主机、 *** 作系统、数据库版本等要求一致,且对络环境的要求比较高。
2、基于逻辑卷的容灾复制方案
这种技术的机制是通过基于TCP/IP的网络环境进行复制,由 *** 作系统进程捕捉逻辑卷的变化进行复制。其特点与基于存储设备的复制方案比较类似,也可以选择同步或异步两种方式,对主机的软、硬件环境的一致性要求也比较高,对大数据量的应用比较有优势。其目标系统如果要实现可读,需要创建第三方镜像。个人认为这种技术和上面提到的基于存储的复制技术比较适合于超大数据量的系统,或者是应用系统的容灾复制。
3、基于oracleredolog的逻辑复制方式
使用这种方式的主要有一些第三方的软件,以及oracle自己的DATAGUARD中的logicalStandby。目前,国外已经有了很多比较成熟的产品及成功案例,国内也有类似的产品,但在产品的成熟程度和成功案例上跟国外还有一定的差距。
使用oracle以外的独立进程,捕捉redologfile的信息,将其翻译成sql语句,再通过网络传输到目标端数据库,在目标端数据库执行同样的sql。如果其进程赶不上oracle日志切换,也可以捕捉归档日志中的内容。也有的产品在源端以事务为单位,当一个事务完成后,再把它传输到目标端。所有的产品一般都是以表为单位进行复制,同时也支持大部分DDL的复制(主要在oracle9i环境中)。
数据库的吞吐量太大时,其实据会有较大的延迟,当数据库每天的日量达到60G或更大时,这种方案的可行性交差;实施的过程可能会有一些停机时间,来进行数据的同步和配置的激活;复制环境建立起来以后,对数据库结构上的一些修改需要按照规定的 *** 作流程进行,有一定的维护成本。
1、这个数据量并不算什么大数据量,就以我们平时看到的bbs来说,几千万的数据都正常,用的还是普通的mysql。
2、如果你是一次读出100万数据,这个其实是没什么意义的,人的眼睛没那高的分辨率,10万数据跟100万在人肉看来没啥差别的,所以你可以限定一个取值的上限,比如最大5万,另外比如说你要在一个屏幕的曲线上画出100万个点,不是不可能,但一般建议这种需求不做实时查询,而是在后台做一个服务,比如凌晨的时候来直接定时生成,下次查询的时候直接读而不是读数据库。
3、如果你的查询是以时间来界面的话,最主要的就是要给时间列建好索引,这样就会快很多。
大数据量下的分页解决方法:要看你的数据存储是用的什么数据库了。常用的有mysql,sqlserver,oracle。没种数据库进行分页的SQL语句不同。
做大数据分页都是无刷新的技术,这里我们选择ajax来实现。ajax请求地址需要你使用后台代码来实现,后台代码除了要返回数据集合还要返回数据的总数量,总页数,下一页等参数,方便选择分页的时候获取数据。
下面看一下后台代码实现,sqlserver的分页SQL:selecttop一页数量from表名where主键notin(selecttop15主键from表名)
mysql的分页语句SQL:selectfrom表名where主键>10orderbydeptnoascpmitn;
MySQL322限制的表大小为4GB。由于在MySQL323中使用了MyISAM存储引擎,最大表尺寸增加到了65536TB(2567_1字节)。由于允许的表尺寸更大,MySQL数据库的最大有效表尺寸通常是由 *** 作系统对文件大小的限制决定的,而不是由MySQL内部限制决定的。
InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建。这样,表的大小就能超过单独文件的最大容量。表空间可包括原始磁盘分区,从而使得很大的表成为可能。表空间的最大容量为64TB。
扩展资料
MySQL数据库中,数据量越来越大的优化方案:
单表优化可以从这几个角度出发:
1、表分区
MySQL在51之后才有的,可以看做是水平拆分,分区表需要在建表的需要加上分区参数,用户需要在建表的时候加上分区参数;分区表底层由多个物理子表组成,但是对于代码来说,分区表是透明的。
SQL中的条件中最好能带上分区条件的列,这样可以定位到少量的分区上,否则就会扫描全部分区。
2、增加缓存
主要的思想就是减少对数据库的访问,缓存可以在整个架构中的很多地方;比如:数据库本身有就缓存,客户端缓存,数据库访问层对SQL语句的缓存,应用程序内的缓存,第三方缓存(如Redis等)。
以上就是关于如何对大数据量的数据实时抓取全部的内容,包括:如何对大数据量的数据实时抓取、求教,MYSQL大数据量分页哪些好办法、海量数据库解决方案的内容简介(海量数据查询方案)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)