热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MySQL在DataWarehouse应用的一些指引

我想许多公司的研发或者DBA都会碰到一个问题,MySQL在处理海量数据上往往力不从心,硬件是一个因素,自身缺乏对复杂SQL处理,也是一个硬伤。但事实也没有那么糟糕,MySQL对于绝

我想许多公司的研发或者DBA都会碰到一个问题,MySQL在处理海量数据上往往力不从心,硬件是一个因素,自身缺乏对复杂SQL处理,也是一个硬伤。但事实也没有那么糟糕,MySQL对于绝大部分公司来说,也是够用的,如果每个公司都创建自己的一套海量数据分析平台,使用hadoop等各类分析框架/平台/工具,反而难以取得好的收益。我们投入到设计/策略的时间越多,我们越能获得更好的投入/产出比。充分利用现有的技术和标准的产品/组合,往往可以取得 更好的效益,除非事实证明,你需要在某个时间点重构你的分析平台了。

许多项目在上线的时候,其实并没有充分想好数据的处理和分析,如果项目进展很快,数据量爆炸式增长,基于原有的数据做分析,往往会出现一些问题,所以在项目上线之前,就考虑好数据的记录和分析是有必要的,并不是要求每个业务,都单独搭建自己的一个统计库/分析平台,但你需要有所准备。

如下是一些OLAP的大的原则和方向,

1、MySQL实例控制在几个2个T以内,是DBA们比较赞同的策略,OLAP数据库可以大到几个T,但是备份之类的操作很耗时,percona工具之xtrabackup可以比较好的备份大数据库;

2、对于数据分析,应该尽量避免重复计算,对于报表之类的应用,最好定期生成统计表,基于统计表,可以快速的查看统计数据,而不需要从原始数据表里去扫描统计大量数据;

3、对于旧数据的归档/清理,需要考虑,理论上来说,如果你的设计比较完善,绝大部分时候,你已经不需要原始数据了,保留统计表数据即可,你可以定期把原始数据清理掉。 原始数据也可以以其他的方式,比如日志的方式,存储在其他介质;

4、为了节省空间,我们可能会设计一些代码/映射表,通过在一些大表中仅仅存储代码/数字的方式,我们可以大大减少存储的空间,对于oltp业务,我觉得没有必要这样做,程序/数据的可读性,自然会更重要,但对于OLAP数据库,这样真的可能节省大量磁盘空间;

5、索引的滥用可能会是一个问题,如果你拥有大量的数据,索引带来的大量随机读其实效率很低,也延缓了数据插入的速率。你需要仔细检查,确保仅仅创建需要的索引;

6、使用LOAD DATA 的方式加载数据很快,值的优先考虑,你也可以使用批量insert的方式,one by one的导入大量数据的方式太过低效,不可取。 当然使用insert批量插入数据也没有必要一次性插入太多记录,100~1000记录每个语句一般是可以接受的;

7、如何避免导入数据对于线上业务的影响需要考虑,你可能需要中间表,你可能需要额外的从库;

8、对于超大规模的海量数据,单个节点可能难以容纳和处理,使用分区表某种程度上可以加快一些分析/查找,但仍然受限制于单个节点,在单个节点已经无法处理海量数据的时候,你应该考虑sharding的策略。


推荐阅读
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • MySQL插入数据的四种方式及安全性分析
    本文介绍了MySQL插入数据的四种方式:插入完整的行、插入行的一部分、插入多行和插入查询结果,并对其安全性进行了分析。在插入行时,应注意字段的定义和赋值,以提高安全性。同时指出了使用insert语句的不安全性,应尽量避免使用。建议在表中定义相关字段,并根据定义的字段赋予相应的值,以增加插入操作的安全性。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
author-avatar
枫的Lilyxj
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有