日期:2014-05-20  浏览次数:20707 次

MYSQL插入问题及单表查询问题
系统遇到瓶颈了:
1.  100个线程一起 从activeMQ上接收数据并转存到mysql中,每秒大约2000条数据, 现在的问题是 插入效率慢,导致activeMQ上的数据堆积, 最终使得activeMQ占用内存过大而崩溃。求解决办法!
2.  单表数据过上亿,如何做数据统计,现在每次查询统计的时间实在是没法说啊,语句中包含count()之类的,求解决办法啊!

求各位大牛给指条明路!

100分给参与者,每个问题被采纳者各100分,共300 分!
------解决方案--------------------
1、 插入数据慢,插入的是什么类型的数据,允许数据丢失么?
数据库分表,加节点
打开日志缓冲(可能要丢数据)
所有数据多线程丢进文件里,半夜一起load

2、 mysql要对付单表过E,数据文件得有20G往上了吧?
说实在不好搞,要不就换数据库,要不就上hadoop吧
------解决方案--------------------
我觉得你的首要问题是解决pendding太多,导致内存溢出和数据库容量问题。建议还是架设个集群服务器处理吧。
------解决方案--------------------
引用:
Quote: 引用:

我觉得你的首要问题是解决pendding太多,导致内存溢出和数据库容量问题。建议还是架设个集群服务器处理吧。


他单表过E的数据,这种底层架构方式想拆成集群都难,瓶颈在数据库卡死了


这个是他其中一个问题,他还有个问题是activeMQ上的数据堆积, 最终使得activeMQ占用内存过大而崩溃。

------解决方案--------------------
数据库啊!
------解决方案--------------------
多方面下手,
1、看表的特性,建议将表分区,可行的话,将分成多张表操作,插入到多表后通过数据库任务再执行写入到单表中,即将数据库缓冲处理,后期可以将表数据转存。
2、再可以做数据分析后,将数据分析结果保存进数据库,避免你大数据量计算成问题。
3、做服务器集群操作,oracle的处理需要这样去处理的,大型企业和银行都是这样处理的。

------解决方案--------------------
引用:
Quote: 引用:

这个是他其中一个问题,他还有个问题是activeMQ上的数据堆积, 最终使得activeMQ占用内存过大而崩溃。

activeMQ数据堆积的主要原因就是 消费者的消费效率慢,耗时就是在插入数据库的时候,我觉得只要是提高了插入数据的效率(前提是数据库能扛住),其他的就不算是问题了!  就是不知道该用什么数据库  


所以你需要分布式去插入数据,比如搞个10个数据库,10个instance,每个instance10个线程去activeMQ取数据,插入不同的数据库