调度系统的模型

时间:2010-03-16 03:59:10

标签: data-modeling schedule

我们已经建立了一个调度系统来控制我们客户的约会。这个 系统类似于Prometric用于安排考试的系统。主要的 关注的是:保证没有超额上市,至少支持一个 每月十万次约会并允许增加/减少 测试中心的容量很容易。

我们基于容量向量设计了以下设计。我们认为 每次约会至少需要五分钟。矢量由288组成 插槽(每小时24小时* 12个插槽),每个插槽由一个字节表示。该 vector允许系统每五个代表最多255个约会 分钟。使用的信息由两个向量组成:一个用于存储 测试中心容量(NOMINAL CAPACITY),另一个用于存储已用容量 (使用容量)。要恢复当前容量(CURRENT CAPACITY),系统 进行测试名义能力并减去使用容量。

数据库具有以下结构:

NOMINAL CAPACITY

标称容量表示工作日的容量(周一至周五)。

| TEST_CENTER_ID | NOMINAL_CAPACITY
| 1          | 0000001212121212....0000
| 2          | 0000005555555555....0000
...
| N          | 0000000000010101....0000

使用容量

此表存储每天/测试中心的已用容量。

| TEST_CENTER_ID | DATE       | USED_CAPACITY
| 1          | 01/01/2010 | 0000001010101010...0000
| 1          | 01/02/2010 | 0000000202020202...0000
| 1          | 01/03/2010 | 0000001010101010...0000
...
| 2          | 01/01/2010 | 0000001010101010...0000
...
| N          | 01/01/2010 | 0000000000000000...0000

客户选择测试中心和日期后,系统会显示 可用的插槽执行以下计算。例如:

TEST_CENTER_ID   1
DATE             01/01/2010
NOMINAL_CAPACITY 0000001212121212...0000
USED_CAPACITY    0000001010101010...0000
AVAILABLE_CAPAC  0000000202020202...0000

如果客户决定安排约会,系统将锁定所选的 day(#USED CAPACITY表中的一行)并增加相应的字节。

系统现在运行良好,但我们预见到争用问题 约会人数增加太多。

是否有人对此问题或建议有更好/另一种模式 改善它?

我们已经考虑通过潜水表示来避免争用 矢量在小时,并改为乐观的锁定策略。例如:

| TEST_CENTER_ID | DATE       | USED_CAPACITY_0 | USED_CAPACITY_1 | ... | USED_CAPACITY_23
| 1             | 01/01/2010 | 000000101010    | 1010...         | ... | ...0000

这种方式不需要锁定行并减少碰撞事件。

1 个答案:

答案 0 :(得分:0)

以下是一个想法:

您可以对当前设计使用乐观锁定。不是使用单独的版本号或时间戳来检查整行是否已被修改,而是在读取行时保存used_capacity数组的纪念品。您只能锁定更新,此时只比较修改的插槽字节以查看它是否已更新。如果没有,您可以将新值嵌入到该元素中而不修改其他元素,从而保留自初始读取以来由其他进程执行的对其他插槽的修改。

对于长度超过5分钟的约会,这应该适用于一组相邻的字节。

如果您在最初阅读时知道有问题的插槽,那么您只需保存起始数组索引和显着值,而不是整个数组。