千万级别的数据库优化
前言 平时在写一些小web系统时,我们总会对mysql不以为然。然而真正的系统易用应该讲数据量展望拓展到千万级别来考虑。因此,今天下午实在是无聊的慌,自己随手搭建一个千万级的数据库,然后对数据库进行一些简单的CRUD来看看大数据情况下的CRUD效率。 结果发现,曾经简单的操作,在数据量大的时候还是会造成操作效率低下的。因此先写下这篇文章,日后不断更新纪录一下自己工作学习到的Mysql优化技巧。 搭建千万级数据库 首先,需要一个测试环境。一开始想到的是写一个SImple JDBC程序然进行简单的数据INSERT。结果发现单线程情况下,每次INSERT了一百多万条的时候效率就变得非常的低下。但是程序也没报OUT MEMORY之类的异常。初步判断应该是单一线程不断的疯狂创建PrepareStatement对象CG没来得及清理造成内存逐渐被吃紧的原因。 后来改进了一下,用多线程的机制。创建十个进程,每个负责一万条数据的插入。这效率一下子提升了好几倍。然而好景不长,很快的Java程序报错:OUT MEMORY。内存溢出了,CG没来得及清理。 这可把我给急的了。插入的太快内存CPU吃紧,插入的太慢又失去了创建测试环境“快”的初衷。后来想了下,既然是要批量插入数据,那么不是可以简单的写一段数据库存储过程吗? 于是,先建立一张测试表,就叫goods表吧。先写sql语句创建表: CREATE