多个线程在跑,同时进行查询、添加、删除操作。查询的表数据量可能百万千万级别,查询的条件字段已加了索引(是主键之一)。查询后,插入数据到另外数据库的表中。然后删除原来查询的库表的数据。不要问我为什么要查了,后来又删除掉。这是业务需要。问题是多个线程在跑这些操作。所以只能用InnoDB引擎。目前只有一个数据库服务器,没有配master,slave数据库,也没有弄集群、负载均衡。因为对这些很陌生。短时间内研究不透。不知道到底该从哪些方面来做到数据库高可用性高并发。望DBA高手指教几番。最好给出方案的具体实施步骤与方法。比较急,这个问题。

解决方案 »

  1.   

    楼主想要高可用性的话,没有这些架构的话,可用性不高;
    要是我接这种需求的话,master,slave是必须的;可以通过replication架构来实现读写分离;这些就可以减轻单台服务器的压力;也增加了一些可用性;
    要是就单台数据库而言的话,服务器硬件方面的话,不用说,一定要很强! 也只能优化查询了,因为这些操作中只有查询是最费的,用innodb 也是必须的,因为放到事务里进行,可以保证数据的一致性;
    只能回答这么多我个人的想法,楼下的继续 
      

  2.   

    不使用 集群、负载均衡,主从,代理很难用一台MYSQL来实现高并发。
    除非你增加CPU,加大内存,使用调整储存。
    优化数据库结构,添加索引。
      

  3.   

    巧妇难为无米....
    一台mysql搞并发,确实有些困难。
      

  4.   


    我想一台物理机,在软件上做高并发,比如安装两个MYSQL。我们这是小项目。硬件什么的不会增加和改进了。我们的机器还行吧。
    主要是对架设高并发不知道从哪些方面做,主从是从物理的角度说的吗?我以为一台物理机上也可以做呢
    另外MYSQL的集群,一台物理机能做吧
      

  5.   

    安装2个mysql,也没用.他们使用同一个物理机器,cpu,内存也只是一台的而已.集群的话更做不了..除非你开虚拟机.
      

  6.   

    一台机那算什么集群?更谈不上什么高并发了,你的CPU和内存都是有限的。
    安装两个MYSQL  --装的越多越慢
      

  7.   

    一台机玩不出什么,虽然你可以在一台机上安装多个虚拟机。以实现主从,CLUSTER等。
    但首先要理解一下,是什么制约了高并发!网络吞吐,磁盘IO,CPU占用,内存限制,等等。  对计算机来说根本没有什么“并发”, 所谓的并发 只不过是在微小的时间片内利用多个资源的流水线完成多个作业,
      

  8.   

    如果不相加机器,可以看看下面的能不能用:innodb,容易死锁,特别是有事务的情况下;简单地,不要有连表查询;不能分表的情况下,可以分离内容,所有长字段应分离出去!将表简化为少结果集,少传输,不需重排序,不需分组,二进制字段,使用索引没有事务的情况下,可以不用inno表!如果可以缓存时,尽量用缓存;如果写入过频且不需读;可以单写别的库。
      

  9.   


    mysql的集群、主从等等的主要原理,是用多个廉价的pc机器,来分担海量数据。而不是多个mysql软件来分担。
    所以集群中,一台pc机器一个mysql软件,你明白了吗?就是要买很多台机器,来配置集群。
      

  10.   


    扫描全表的需求,解决方案有2个:
    软件上:改业务应用,扯分表,表越小越好。然后应用上要做动态sql,实现不同模块连接不同的表。硬件上:多买机器,搞集群,将不同模块的数据放在不同的机器上,这样实现了效率的提升。
      

  11.   

    http://topic.csdn.net/u/20100811/18/7666b182-3936-446d-a4e1-2d92bd374d61.html?38233
    学习下;
      

  12.   


    呵呵,建表语句,很简单啊,一份sql,create table t1(c1, c2, ...);
    然后可以copy很多次啊,create table t2(c1,c2,c3,.....);这个简单的表名替换,程序也是可以做的,很easy的。
      

  13.   

    RncFunction RAB.SuccEstabCSNoQueuing.sum =  sum(UtranCell_R1_07_01.UC1665_1) + sum(UtranCell_R1_07_01.UC1665_2) + sum(UtranCell_R1_07_01.UC1665_3)
    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
      

  14.   

    弱弱的问问:
    分布式文件系统一台物理机能做吧?听说hadoop做分布式文件系统很好,可以大大的改善性能