如何使用位掩码存储工作计划信息?

时间:2011-11-17 22:36:00

标签: ruby-on-rails ruby bitmask

创建一个非常简单的计划应用程序

我要求用户告诉我他们工作的日期,以及他们是否在某一天上午,午餐或晚上工作

因此,对于给定用户,她的数据可以是以下矩阵中的一个或所有点

        morning    lunch    evening
mon
tue
wed
thr
fri
sat
sun 

我需要能够快速检索此信息,以便我可以提醒用户是时候去上班了。我会有很多用户。

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

我正在考虑如何存储这些信息。我想知道一个位掩码是否合适/可行/“采用类似的方式”?你会怎么做到这一点?

谢谢!

4 个答案:

答案 0 :(得分:3)

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

鉴于此,我建议您在应用中建立一些灵活性。将位掩码的想法与定义位代表什么的表结合起来。这样您就可以根据需要重新定义和修改。如果添加班次,只需将记录添加到定义表并更新每个员工的掩码。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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