2011-11-17 56 views
0

创建一个非常简单的调度应用如何使用位掩码存储工作计划信息?

我要求用户告诉我什么日子(),他们的工作,以及是否对他们的工作早,午餐或晚上在某一天

因此,对于给用户她的数据可能是以下矩阵

 morning lunch evening 
mon 
tue 
wed 
thr 
fri 
sat 
sun 

我需要很快能够获取此信息,以便我可以提醒,它的时间去工作的用户的一个或所有的点。我会有很多用户。

我不在乎具体的日期或时间。只是离散的第1天到第7天以及每天的3个时段。当然,有很多可能的组合。

我在考虑如何存储这些信息。我想知道一个位掩码是否合适/可行/'用这种方式去'的方式?你会如何处理这个问题?

谢谢!

+1

你打算如何存储这些信息? RDBMS中的位操作导致表扫描,并且这种杀死“快速检索”的部分。 –

+0

老问题,但FWIW,我的(类似的)问题的最佳解决方案是使数据库的含义完全清晰而无需查看代码。 – Ricky

回答

3

虽然位掩码肯定会工作(使用7天X 3位移= 21位),但我对这些事情的经验是,他们总是需要修改。也就是说,增加了夜班,或者改变班次。

鉴于此,我建议在您的应用中增加一些灵活性。将位掩码的想法与定义这些位所代表的位置的表结合起来。这样,您可以根据自己的喜好重新定义和修改。如果您添加一个班次,只需在定义表中添加一条记录并更新每个员工的面具。

0

如果他们每天只能选择一个选项,则可以将数据打包到16位int的14位中。或者如果他们每天可以选择多个选项,则可以将其打包到32位整数的21位中。

+0

问题是Ruby,我认为这是C.翻译是相当明显的,但只是一个领导。 –

+0

噢,谢谢,我错过了。 –

1

要回答你的第二个问题:除非你有数百万行,否则掩码不会是一个巨大的性能优势(你的瓶颈仍然是网络I/O)并且可能是一个过早的优化。也就是说,您将能够将所有用户的选项存储在一个32位整数中。

1

不要打扰位掩码。现在做一些简单的事情(比如规范化的数据库模式!),如果你开始测量问题,以后再进行性能优化。