2011-11-17 33 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

不要打擾位掩碼。現在做一些簡單的事情(比如規範化的數據庫模式!),如果你開始測量問題,以後再進行性能優化。