要使 PHP/mySQL 明显变慢,数据库需要多大?

How big does DB need to become for PHP/mySQL to be noticably slow?

我想知道是否有开发人员有这方面的经验:

在查询变慢之前,您可以拥有多少行(在 table 中有 1 列,主键)?这是我不需要担心的事情吗?我可能永远不会超过 5000 个左右。我没有足够的经验知道。

如果它被编入索引(它应该是;作为 table 中的唯一字段,它应该是主键),就数据库容量而言,您有大量的喘息空间。从技术上讲,它基于您的服务器和软件配置,但即使 MySQL 也不会在每行一个 UUID 和 5,000 行的单个 table 上大费周章。

在 PHP 端,它还取决于您的服务器资源和您的连接容量与您的请求占用的带宽相比......但是如果您正在处理 table 不太可能存储超过 5,000 条记录,关联的 PHP 似乎不太可能出现容量问题(前提是您的客户发出的请求数量合理)。

但有几点要注意:

您似乎在暗示客户端(Web 客户端?移动客户端?加油站客户端?)将生成 UUID,然后在服务器上对其进行验证...这不是真正的身份验证,也不是任何保证真实性。目前尚不清楚你的用例是什么,但你可能想退后一步,为这个代币定义你的目标,并四处寻找已经解决了同样问题的人。如果您要生成 API 密钥或身份验证令牌之类的东西,那么简单的共享 UUID 可能不是解决此问题的最佳方法。在任何情况下,这都应该通过 SSL 进行,否则您就是在轻而易举地将您的凭据分发给正在收听您的请求的任何人。

不太重要的是,根据您的令牌是否需要跨会话持久化,这也是我从您的描述中不清楚的事情,您可能不需要数据库持久化。像 Redis 这样的内存存储可能值得研究,不过,根据您的估计,我再次认为性能不会成为瓶颈。

根据你所说的,估计容量是不可能的,但我觉得你不太可能 运行 进入技术堆栈的任何瓶颈。

此答案更多地基于您的标题 "how big does DB need to become for PHP/mySQL to be noticably slow"。

PHP...

如果您正在获取一行,那么所有时间都在 MySQL 中。如果您要获取整个 table,那么很多成本都在 PHP 中。 5000行还不错。一百万行会很慢,并且可能 运行 内存不足。

MySQL...

SELECT * FROM tbl WHERE primary_key = 'constant';

将是 'instantaneous',即使 table.

中有 亿
SELECT * FROM tbl WHERE non_indexed_column = 'constant';

在 5000 行时开始变慢,在 100 万行时 "too long",如果有 10 亿行则需要数小时或数天。

SELECT * FROM tbl WHERE indexed_uuid = 'constant';

尽管这是 'instantaneous',但随着 table 的增长,它会变成 I/O 约束。 UUID 非常随机,因此缓存是一个问题。当索引足够小以适合 RAM 时,这表现良好。随着索引变大,语句变慢。 More on the evils of UUIDs.

换句话说,您删除了重要信息——即涉及到UUID。

为什么要用 1 列 table 来检查 UUID?为什么不在其他 table 中有一个索引,并用它来检查。性能几乎相同(很好,可缓存,I/O-bound,如果不是)。