我正在制定小時酒店預訂應用程序。有一個peak_seasons
表,其中存儲start_date
和end_date
。 Peak_Seasons是我應用程序中當前年份的預定義日期。每當客戶爲選定的時間進行預訂時,我都必須檢查這些時間是否屬於旺季,以便我可以爲這些時間應用不同的費率。什麼是查找給定小時是否屬於旺季的最佳方式
此操作非常頻繁,我想優化它。需要創意。我現在的僞代碼是這樣的:
def calculate_price(customer_start_time, customer_end_time)
price = 0
(customer_start_time.to_i...customer_end_time.to_i).step(1.hour) do |hour|
//now check if this hour belongs to peak season over here
if peak_seasons?(hour)
price += price + peak_season_price
else
price += price + standard_price
end
return price
end
//peak_seasons? somewhere
def peak_seasons?(hour)
PeakSeason.where("start_date <= ? and end_date >= ?", hour.to_date, hour.to_date).any?
end
我想這時候客戶的hundreads正在檢查所選小時的價格是不是有效率的代碼,那麼它會從數據庫提取數據用於選擇每隔一小時。如何優化它?
是'customer_start_time,customer_end_time' DateTime? – neydroid
您可以使用'BETWEEN'查詢,'?在start_date和end_date之間。而不是查詢每個小時,您可以查詢四個可能的區間交集,最多4個查詢。 – sschmeck
@neydroid是的,'customer_start_time,customer_end_time'是DateTime。 @sschmeck,謝謝,是的,我可以通過檢查間隔而不是小時來減少查詢。有什麼方法可以讓我們只需一次取得旺季並將其存儲在記憶中?它會更好嗎? –