Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 对以下系统使用数据库轮询或事件是否更好?_Mysql - Fatal编程技术网

Mysql 对以下系统使用数据库轮询或事件是否更好?

Mysql 对以下系统使用数据库轮询或事件是否更好?,mysql,Mysql,我正在开发一个订购系统,它的工作方式与Netflix的服务完全相同。如果您不熟悉Netflix,请参阅本问题的结尾。我有两种方法,我不确定哪种方法是正确的;一个依赖于数据库轮询,另一个是事件驱动的 以下两种方法采用这种简化模式: member(id, planId) plan(id, moviesPerMonthLimit, moviesAtHomeLimit) wishlist(memberId, movieId, rank, shippedOn, returnedOn) 轮询:我将在wis

我正在开发一个订购系统,它的工作方式与Netflix的服务完全相同。如果您不熟悉Netflix,请参阅本问题的结尾。我有两种方法,我不确定哪种方法是正确的;一个依赖于数据库轮询,另一个是事件驱动的

以下两种方法采用这种简化模式:

member(id, planId)
plan(id, moviesPerMonthLimit, moviesAtHomeLimit)
wishlist(memberId, movieId, rank, shippedOn, returnedOn)
轮询:我将在wishlist中运行以下计数查询

在shippedOn不为NULL的情况下,统计本月已发货的电影数@memberId 在shippedOn不为NULL且returnedOn为NULL@memberId的位置对moviesAtHome进行计数 Count moviesInList@memberId 以下功能将确定要运送的电影数量:

moviesToShip = Min(moviesPerMonthLimit - shippedThisMonth, moviesAtHomeLimit - moviesAtHome, moviesInList)
我将循环遍历每个成员,运行计数,循环遍历他们的列表,次数与moviesToShip相同。这看起来像是脖子上的痛,但它起作用了

事件驱动:这种方法涉及添加额外的列queuedForShipping,并在每次事件发生时将其标记为0,1。我将进行以下计算:

在shippedOn不为NULL的情况下,统计本月已发货的电影数@memberId 在shippedOn不为NULL且returnedOn为NULL@memberId的位置对moviesAtHome进行计数 计数电影queuedForShipping,其中queuedForShipping=1,@memberId 我必须使用以下if语句,而不是使用min

If moviesPerMonthLimit > (shippedThisMonth + moviesQueuedForShipping)
AND IF moviesAtHomeLimit > (moviesAtHome + moviesQueuedForShipping))
如果这两个条件都为true,我将从wishlist中选择一行,其中queuedForShippinh=0,并将其queuedForShipping设置为1。每次有人添加、删除、重新排序他们的列表时,我都会运行这个函数。到发货时间时,我会选择@memberId,其中queuedForShipping=1。在更新shippedAt和returnedAt时,我也会运行这个程序

方法一很简单。它还允许会员在有人决定进行投票之前,随意摆弄自己的排名。那样的话,装运什么总是由等级决定的。但ppl一直说民意调查不好

事件驱动的方法是自我维持的,但每次有人更改列表时,用所有这些计数ping数据库似乎是浪费时间。我还必须写信给queuedForShipment专栏。这还意味着,当一个成员对其列表进行重新排序,并且他们的待处理装运shippedAt为空时,queuedForShipping=1,我必须更新这些行,并根据新的排序将queuedForShipping设置回1。如果有人加了5部电影,然后突然改变了顺序怎么办?嗯,在他或她添加的前两部电影中,queuedForShipment已经设置为1

有人能告诉我他们对这里的最佳方法的看法,以及投票与事件驱动的优缺点吗


Netflix是一种每月订阅服务,您可以在其中创建电影列表,并根据您的服务计划限制将电影发送给您。

根据您的描述,如果您可以在需要时轻松创建数据,则没有理由保留数据以备使用

缓存它的原因:

如果需要向用户显示下一项。 如果由于某些保留策略而删除了详细数据。 如果轮询查询太慢。