欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

处理大数据高并发问题

程序员文章站 2024-01-31 11:53:40
...
在数据库里面
database
A
表有1张
a
里面数据为
firstname lastname
A a
这样表里面有百万级的数据。
于是问题就来了
/*前面的$name已经是我已经定义了的*/
$result= "SELECT lastname FROM a WHERE firstname='".$name."'";
$sql_name=mysql_query($result);
$name=mysql_fetch_array($sql_title);
$subject =$name[0];
?>
于是问题就来了
服务器一处理同时500个并发数据库就挂了。
有啥好办法解决吗?




回复讨论(解决方案)

很遗憾,这是你的硬件和操作系统不支持你那么高的并发。
仅从 php 角度是不能改变现状的
对于你的代码:
在 php 层面没有任何优化的余地
在 mysql 层面,也只是对 firstname 列做索引而已

很遗憾,这是你的硬件和操作系统不支持你那么高的并发。
仅从 php 角度是不能改变现状的
对于你的代码:
在 php 层面没有任何优化的余地
在 mysql 层面,也只是对 firstname 列做索引而已


其实还是可以的,从代码层次我发现了一个问题
$subject =$name[0];
这里只取了1行。
因此来说。$result= "SELECT lastname FROM a WHERE firstname='".$name."'";
可以修改为$result= "SELECT lastname FROM a WHERE firstname='".$name."' limit 0,1";
查询速度优化了不少。继续想办法,我相信肯定可以处理

$result= "SELECT lastname FROM a WHERE firstname='".$name."'";

$result= "SELECT lastname FROM a WHERE firstname='".$name."' limit 0,1";
意义是不同的!

前者表示可能取出多行
后者表示无论多少行都只取遇到的第一行

如果为了所谓的速度,连本意都扭曲了。那“优化”有什么意义?

通过横向或纵向分表,或者通过多数据库分压的方式。

我表示分库分表吧。。。
md5(firstname+lastname),散列到不同的数据库表中。

上面说的有问题,针对你的where语句猜测,分库分表的依赖应该是md5(firstname),不好意思

$result= "SELECT lastname FROM a WHERE firstname='".$name."'";

$result= "SELECT lastname FROM a WHERE firstname='".$name."' limit 0,1";
意义是不同的!

前者表示可能取出多行
后者表示无论多少行都只取遇到的第一行

如果为了所谓的速度,连本意都扭曲了。那“优化”有什么意义?

不好意思,因为数据库里面有部分重复的东西。我只要取出其中一个

上面说的有问题,针对你的where语句猜测,分库分表的依赖应该是md5(firstname),不好意思


恩可能你还没明白。建立索引吧。然后分库分表

有个类似股票期货的高并发撮合系统,有人能做吗?

请联系我 13816210664