mysql大数据相关优化记录

首先介绍下我的业务场景:将一个大约2G包含五千万条数据的数据库账单文件插入mysql数据库,采用单账户单表模式,优化完之后大约需要十几分钟。java程序中的优化就不在赘述

数据库方面的优化主要有以下几点:

        首要也是相当重要的一点是使用MyISAM作为数据引擎。MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具。MYISAM强调了快速读取操作,这可能就是为什么MySQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。InnoDB数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MYSQL++ API。在使用MYSQL的时候,你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理(transaction process)也不支持外来键。尽管要比MyISAM引擎慢很多,但是InnoDB包括了对事务处理和外来键的支持,这两点都是MyISAM所没有的。

        其次使用批量插入的技术,我使用每次从账单文件往数据库中导入10万条,

         LOAD DATA LOCAL INFILE 'F:/test.csv'
         PLACE INTO TABLE `test_table`
         ELDS TERMINATED BY ','
         CLOSED BY '"'
         CAPED BY '\\'
         NES TERMINATED BY '\r\n'
         ield1, field2, field3, field4, field5);

         三、修改MySQL配置文件my.cnfkey_buffer_size,key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads /key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)。key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。对于1G内存的机器,如果不使用MyISAM表,推荐值是16M(8-64M)

         





你可能感兴趣的:(mysql,数据库,优化,数据,大数据)