数据库分区-最好由PHP或MySQL完成?

数据库分区-最好由PHP或MySQL完成?,php,mysql,database,partitioning,database-partitioning,Php,Mysql,Database,Partitioning,Database Partitioning,首先让我解释一下上下文:我正在使用PHP和MySQL构建一个访问跟踪器。因此,当用户访问某个URL时,他的信息将被注册,然后他将被重定向到某个页面。然后,当他点击链接时,我会注册信息,然后将用户重定向到他的目的地 因此,我需要在访问时在数据库中写入信息。我需要在点击时读写信息 我的问题是,我将有许多行要保存在数据库中。由于我需要非常快地读写(以便用户能够尽可能快地重定向,这是主要考虑的问题),所以我正在考虑对我的表进行分区 但是最快的方法是什么呢?我在考虑两种解决方案: 使用MySQL对表进行分

首先让我解释一下上下文:我正在使用PHP和MySQL构建一个访问跟踪器。因此,当用户访问某个URL时,他的信息将被注册,然后他将被重定向到某个页面。然后,当他点击链接时,我会注册信息,然后将用户重定向到他的目的地

因此,我需要在访问时在数据库中写入信息。我需要在点击时读写信息

我的问题是,我将有许多行要保存在数据库中。由于我需要非常快地读写(以便用户能够尽可能快地重定向,这是主要考虑的问题),所以我正在考虑对我的表进行分区

但是最快的方法是什么呢?我在考虑两种解决方案:

使用MySQL对表进行分区 基本上只是根据注册的ID的范围对表进行分区。当我查询数据时,MySQL将直接处理数据,并且从PHP方面来说是透明的

但由于我不知道需要注册多少行,如何有效地定义范围?当我达到分区的极限时呢

在需要时创建新表 如果我有缓存在内存中的实际行数,我可以知道每100.000行,我需要创建一个新表。所以在我达到极限之前,我只需要创建一个新表。根据给定的ID,我只需要除以100.000就可以知道我需要查询的表

这样,我就不会有关于分区最大数量的任何问题


但在我的情况下,什么是最有效的?基于PHP的分区系统(这基本上就是我在解决方案2中打算做的)能比来自MySQL的分区系统更高效吗?或者我应该依赖MySQL,如果我达到了极限,就创建另一个分区表?

你的规模是多少?您可能过度设计了这个问题,或者甚至没有看到合适的工具。具有良好硬件和适当索引的MySQL在大多数情况下都会表现得非常好。你可能想考虑写和读异步,这样你就不必等待重定向用户之前发生的一切。您还可以缓存尽可能多的信息,以便在读取部分甚至不会命中数据库。回答您的问题:我无法异步写入或读取,因为重定向的结果取决于用户数据(国家/地区、ip…)。我在这里说的是数亿个值(每月访问一次或数百万次,我需要将数据保存多年!)每秒有多少个请求?通过简单的单表、单服务器设计,每秒50次简单的同步操作应该很容易实现。如果您需要1000/秒,请提供更多详细信息,以便我们能够解决您的问题。即使您的手动缓存也是“过度架构”;MySQL有自己的缓存。经验法则:“不要将缓存放在缓存前面。”