Mysql 如何在数据库中存储单击数/选择数

Mysql 如何在数据库中存储单击数/选择数,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,我正在尝试制作“你愿意”应用程序 这主要涉及用户选择的两个选项(例如巧克力或香草) 我希望能够存储人们选择每个选项的次数 我真的只能想到一种方法: 在数据库中将每个选项作为自己的行,并在用户每次选择它时递增 但是,这肯定需要用户每次回答问题时都发出请求,因此每分钟处理数千个请求(取决于用户数量)?如果两个人同时尝试更新值,会不会出现问题 我不确定如何做才是最好的方法。我不知道您正在使用的编程语言,所以我将给出一个概括的答案。 若要从数据库保存往返,一个解决方案是创建一个临时文件,其中包含对选项

我正在尝试制作“你愿意”应用程序

这主要涉及用户选择的两个选项(例如巧克力或香草)

我希望能够存储人们选择每个选项的次数

我真的只能想到一种方法:

在数据库中将每个选项作为自己的行,并在用户每次选择它时递增

但是,这肯定需要用户每次回答问题时都发出请求,因此每分钟处理数千个请求(取决于用户数量)?如果两个人同时尝试更新值,会不会出现问题


我不确定如何做才是最好的方法。

我不知道您正在使用的编程语言,所以我将给出一个概括的答案。
若要从数据库保存往返,一个解决方案是创建一个临时文件,其中包含对选项的投票。当用户选择一个选项时,可以更新此文件。要将这些值放入数据库中,您可以创建一个后台作业,该作业将收集数据并按计划存储在数据库中。这将有一个缺点,即数据库中没有当前数据,但我认为这将超过其好处。

我建议使用一个包含个人投票的表。它可以有三列,ID、IP地址/用户名(或另一个用于阻止重复投票的识别信息位)和投票对象

每当你想计算当前的投票数时,你可以在过滤掉重复的IP地址/用户名的同时进行计数查询


如果您担心数据库的可伸缩性,那么研究将插入缓存到数据库中可能是值得的。例如,每隔20秒左右存储一次投票,然后进行批量插入。

它是否能够每秒处理几十个请求?让用户执行如此数量的请求(可能是每5秒一次)是一种不好的做法吗?你现在真正想问的是可伸缩性,这与设计不同。我会单独存储每个用户的投票,只有在查询时才进行聚合,或者——如果必要的话——在投票时使用触发器聚合值。我会在@GordonLinoff后面——存储单个投票以及其他跟踪元数据(ip等)因此,您可以根据需要进行聚合,并允许您在需要时执行更详细的投票分析。您的意思是将每个投票存储为单独的一行,并作为单个请求?啊,是的,我确实考虑过这个想法。我想我最担心的是数据库处理请求的能力,以及每次发出请求时应用程序的性能是否会下降。我想这是一个很好的折衷办法来缓冲投票,我只是不知道这是否是这些应用程序的正常做法。我认为在设计此类场景中的数据库时,需要问的问题是您是否需要当前数据,或者稍微旧一点的数据是否有效或没有影响。如果是,则缓冲数据或使用后台作业处理数据,然后将其放入数据库是一个不错的选择。我认为您是对的,数据100%是最新的并不重要