Хранение и поиск времени открытия / закрытия магазинов - PullRequest
2 голосов
/ 01 февраля 2010

Я пишу приложение, которое индексирует данные для наших магазинов, некоторые из которых открыты поздно (с 8:00 до 2:00). Нам нужно иметь возможность быстро выполнять поиск в этой базе данных - в основном, чтобы выполнить запрос, чтобы определить, какие магазины открыты в данный момент времени (сейчас, в воскресенье в 1 час ночи и т. Д.).

Кроме того, время открытия / закрытия может меняться день ото дня - например, некоторые магазины закрыты по воскресеньям.

Очевидным решением для меня было бы создать таблицу, в которой у меня есть строка с идентификатором магазина, днем, временем открытия и временем закрытия. Для чего-то вроде понедельника, с 8:00 до 2:00, на самом деле это будет две строки: одна для понедельника с 08:00 до 24:00 и одна для вторника с 00:00 до 02:00.

У нас много магазинов, поэтому поиск должен работать хорошо (в основном, данные должны быть индексированными), но мне также придется отображать эти данные обратно в удобочитаемом формате. С моим текущим решением это будет выглядеть примерно так:

Понедельник: 8:00 - полночь Вторник: полночь - 2 часа ночи; 8:00 - полночь

Мне просто интересно, есть ли у кого-нибудь еще альтернативные решения, прежде чем перейти к реализации. Спасибо!

1 Ответ

3 голосов
/ 01 февраля 2010

Когда PBS (Система общественного вещания США) столкнулась с этой же проблемой пару лет назад, они изобрели идею «30-часового дня» - где 00:00 - полночь в начале дня, 24: 00 - полночь в конце дня, 25:00 - 1:00 следующего дня, 30:00 - 6:00 следующего дня. Таким образом, понедельник закрывается в 26:00 утра по вторникам.

Вместо двух записей, представляющих время одного магазина за день, он может быть более объектно-ориентированным, чтобы воспринимать «день магазина» как объект. Таким образом, 1 запись = 1 магазин за день. Если вы хотите сохранить два набора времени открытия / закрытия, просто используйте четыре поля в записи вместо двух - и скорректируйте свои запросы соответствующим образом.

Помните, что ваши запросы должны использовать библиотеку / API, которую вы пишете и публикуете. Затем библиотека будет иметь дело с хранилищем данных и его макетом данных. Никто, кроме вашей библиотеки, не должен смотреть на БД напрямую.

Часовые пояса также очень важны для такого рода приложений. (Надеюсь) в какой-то момент сеть магазинов расширится и охватит более одного часового пояса. Затем вам нужно будет определить местное время запроса. - Может не совпадать с часовым поясом вашего сервера, который обрабатывает запросы.

Дальнейшие мысли -

Теперь я вижу, что вы стандартизируете время по Гринвичу. Хорошо. Вы также можете использовать значения даты и времени (против значений времени) и стандартизировать для данной недели во времени. Например, в нерабочее время 1 января 1995 г. 10:00 - понедельник 2 января 1995 г. 2:00 (используя базу 1 января 1995 г., так как это было воскресенье).

Затем рационализируйте свои "текущее время и дату", чтобы они совпадали с той же точкой на неделе 1 января 1995 года. Затем выполните запрос, чтобы найти дни открытых магазинов.

НТН,

Larry

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...