php - 设计用于自动完成任务的调度程序的最灵活的方法是什么,并且实现起来也很实用?

标签 php mysql database-design

假设您有一定数量 (C) 的猫和一定数量 (M) 的老鼠以及一些数量 (H) 的洞,猫可能会在其中找到老鼠。这只是为了概括一个问题,如果以下内容在现实世界中没有任何意义,请记住这只是为了提供一个愚蠢的例子,所以我们有话要说。

假设检查猫 c 是否可以在洞 h 中找到老鼠 m 需要花费不可忽略的 CPU 时间,您将如何设计一个数据库来跟踪您已经检查过哪些组合?如果您需要优先检查某些组合怎么办?如果您希望能够安排处理老鼠 M1 到 M5、猫 C4 到 C9 和孔 H3 到 H7 怎么办?如果您想先按孔的顺序处理这个问题(例如,在 H4 孔之前检查 H3 孔是否有老鼠和猫的所有组合)或首先检查猫(在 C5 之前检查 C4 是否有其他所有组合),等等?

是否有一些非常聪明的方法可以将其概括为要组合的 N 个事物?例如,如果我们需要添加一些狗怎么办?是否有一些聪明的方法可以在不过于复杂的情况下允许复杂的调度优先级排序?我应该阅读什么来解决这个问题?

我现在考虑的设计是这样的:

表:scheduled_tasks 列:first_cat、last_cat、first_mouse、last_mouse、first_hole、last_hole、completed?、cat_order(即 1)、mouse_order(即 2)、hole_order(即 3)

本质上,_order 列将指示哪个循环是最外层的。

表:completed_tasks 列:猫、老鼠、洞、when_completed

或者可能...

表:completed_tasks 列:first_cat、last_cat、first_mouse、last_mouse、first_hole、last_hole 最初会有 first_cat = last_cat、first_mouse = last_mouse 等,然后自动将相邻行组合在一起,以更快地搜索哪些任务已经完成,以避免重复工作。

什么是概括这一点的好方法?如果我们向混合中添加更多维度(即狗),调度程序可能应该创建一个新表,或者表结构应该更灵活。例如,不是 first_cat、last_cat、...,而是一个相关表“entities_to_cycle”(或类似的表),其中包含列:entity、first、last。

无论如何,你对此有何看法?

我还标记了这个 PHP/MySQL,因为我将使用它们来实现它。如果这会影响您的回答,请记下您的回答受到影响的地方。

最后一点:如果有几十万个任务要完成,那么分解表(泛化和规范化)似乎会使搜索/插入耗时更多......

最佳答案

我认为这个问题的一部分是这样回答的:

cat
-----
cat_id
name

mouse
------
mouse_id
name

hole
------
hole_id
name

mouse_hole
-----------
moue_hole_id
mouse_id
hole_id

要么在内存中执行此部分,要么将值保存在如下结构中:

cat_task
---------
cat_id
mouse_hole_id
status(?)

关于php - 设计用于自动完成任务的调度程序的最灵活的方法是什么,并且实现起来也很实用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7218627/

相关文章:

javascript - 在提交之前实时显示所选的单选按钮和复选框

php - 在 Laravel 5.1 中找不到 "Class ' app\Http\Controllers\Controller'

mysql - 为给定索引选择最后插入的行

database - 多对多关系 - 大表的查询性能

mysql - 复合键中的 AUTO_INCRMENT

php - 使用 PHPExcel 加载包含图像的 Excel 文件

javascript - 使用 codeigniter 保存数据后显示通知

mysql - 在 Rails 中创建表和主键问题

java - 使用java更改系统时间时如何更新保存在数据库中的日期

sql - 数据库(最大)字段长度会影响性能吗?