多个线程在跑,同时进行查询、添加、删除操作。查询的表数据量可能百万千万级别,查询的条件字段已加了索引(是主键之一)。查询后,插入数据到另外数据库的表中。然后删除原来查询的库表的数据。不要问我为什么要查了,后来又删除掉。这是业务需要。问题是多个线程在跑这些操作。所以只能用InnoDB引擎。目前只有一个数据库服务器,没有配master,slave数据库,也没有弄集群、负载均衡。因为对这些很陌生。短时间内研究不透。不知道到底该从哪些方面来做到数据库高可用性高并发。望DBA高手指教几番。最好给出方案的具体实施步骤与方法。比较急,这个问题。
要是我接这种需求的话,master,slave是必须的;可以通过replication架构来实现读写分离;这些就可以减轻单台服务器的压力;也增加了一些可用性;
要是就单台数据库而言的话,服务器硬件方面的话,不用说,一定要很强! 也只能优化查询了,因为这些操作中只有查询是最费的,用innodb 也是必须的,因为放到事务里进行,可以保证数据的一致性;
只能回答这么多我个人的想法,楼下的继续
除非你增加CPU,加大内存,使用调整储存。
优化数据库结构,添加索引。
一台mysql搞并发,确实有些困难。
我想一台物理机,在软件上做高并发,比如安装两个MYSQL。我们这是小项目。硬件什么的不会增加和改进了。我们的机器还行吧。
主要是对架设高并发不知道从哪些方面做,主从是从物理的角度说的吗?我以为一台物理机上也可以做呢
另外MYSQL的集群,一台物理机能做吧
安装两个MYSQL --装的越多越慢
但首先要理解一下,是什么制约了高并发!网络吞吐,磁盘IO,CPU占用,内存限制,等等。 对计算机来说根本没有什么“并发”, 所谓的并发 只不过是在微小的时间片内利用多个资源的流水线完成多个作业,
mysql的集群、主从等等的主要原理,是用多个廉价的pc机器,来分担海量数据。而不是多个mysql软件来分担。
所以集群中,一台pc机器一个mysql软件,你明白了吗?就是要买很多台机器,来配置集群。
扫描全表的需求,解决方案有2个:
软件上:改业务应用,扯分表,表越小越好。然后应用上要做动态sql,实现不同模块连接不同的表。硬件上:多买机器,搞集群,将不同模块的数据放在不同的机器上,这样实现了效率的提升。
学习下;
呵呵,建表语句,很简单啊,一份sql,create table t1(c1, c2, ...);
然后可以copy很多次啊,create table t2(c1,c2,c3,.....);这个简单的表名替换,程序也是可以做的,很easy的。
UtranCell HHO.FailHhoInterFreq.sum = UtranCell_R1_07_01.UC182_0 + UtranCell_R1_07_01.UC182_1 + UtranCell_R1_07_01.UC183_0 + UtranCell_R1_07_01.UC183_1
UtranCell HHO.AttHhoInterFreq = UtranCell_R1_07_01.UC180_0 + UtranCell_R1_07_01.UC180_1 + UtranCell_R1_07_01.UC178_0 + UtranCell_R1_07_01.UC178_1
RncFunction IRATHO.FailOutCS.sum = sum(UtranCell_R1_07_01.UC160_0) + sum(UtranCell_R1_07_01.UC160_1) + sum(UtranCell_R1_07_01.UC160_2)
RncFunction RLC.CSTraffic.sum = (sum(UtranCell_R1_07_01.UC2667_Avg) + sum(NeighbouringRnc_R1_07_01.UC2668_Avg)) * (1+(sum(UtranCell_R1_07_01.UC1566_3) + sum(UtranCell_R1_07_01.UC1567_3)) / (sum(UtranCell_R1_07_01.UC1566_2) + sum(UtranCell_R1_07_01.UC1567_2)))
RncFunction PAGING.AttPagingType1 = RncFunction_R1_07_01.UC801_0 + RncFunction_R1_07_01.UC801_1 + RncFunction_R1_07_01.UC801_2 + RncFunction_R1_07_01.UC801_3
上面是公式文件的一小撮。=左边,RncFunction就代表RncFunction表,UtranCell就代表UtranCell表。
表名后面是它的字段。=右边是此字段的值等于多少。
看=右边,UtranCell_R1_07_01.UC1665_1,点前面是表名,后面是字段名。
看公式可以看出,RncFunction既有聚合函数的,又有非聚合函数的。
聚合函数的,需要对应表的moi字段等于另一张表RncFunction_R1_07_01的moi的值。聚合函数的公式值比较好处理。用SQL语句可以搞定,虽然处理这个算术运算式子有点费劲。
非聚合函数的,表moi值和聚合函数的moi值对应。
也就是说,聚合和非聚合,都是遍历RncFunction_R1_07_01表。其中,非聚合时,是此表字段作的相关运算。而聚合,需要对比公式中表的moi值是不是对应于RncFunction_R1_07_01中moi的值。
这说起来太绕了。大家应该能懂的。至于=左边是UtranCell时,就比较简单了。她全是对一张表的字段作相关计算。
原来的做法是用游标作的,在循环时对字段作相关计算,设置给预先定义的对应于=左边字段的变量值。
在值都设置后,insert数据到UtranCell表。
说实话,我真没看出来哪里easy了。。⊙﹏⊙汗正在着手把原来使用游标的地方,换成拼SQL
分布式文件系统一台物理机能做吧?听说hadoop做分布式文件系统很好,可以大大的改善性能