Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Архитектура поиска даты в диапазоне 
:(
    Опции темы
BuShaRt
Дата 12.12.2011, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



Есть следующая задача. Есть объект "Мероприятие" у которого есть:
1. Дата начала
2. Дата конца
3. Дни недели в которые он активен (с этим как раз и сложность).

Задача определить будет ли это мероприятие проходить в произвольный день. Если бы мы имели объект с параметрами 1 и 2, то задача была бы достаточно травильной, но вот как реализовать поиск с учетом еще и третьего параметра?

З.ы. студенческий вариант решения задачи "в лоб" я могу придумать, но нужно решение, которое будет работать и при высокой нагрузке на сервер. 
PM MAIL   Вверх
newbee
Дата 12.12.2011, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 1
Всего: 19



DAYOFWEEK(date) ?


--------------------
You're face to face
With man who sold the world
PM   Вверх
Akina
Дата 12.12.2011, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(BuShaRt @  12.12.2011,  15:09 Найти цитируемый пост)
нужно решение, которое будет работать и при высокой нагрузке на сервер. 

Убираем все три вышеописанных свойства у сущности "Мероприятие", и вместо них создаём таблицу "Мероприятие - День, когда оно активно", которая организует связь много-ко-много между сущностями "Мероприятие" и "Дата в календаре". Всё...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
BuShaRt
Дата 12.12.2011, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



Это лишь преобразование входных данных. По сути мы получаем, что на входе у нас есть цифра от 1 до 7, а в каждой сущности есть массив чисел от 1 до 7 и следовательно нужно получить все сущности в массивах которые присутствует входное значение. Т.е. преобразование входных данных - это мишура, основной вопрос остаеться актуальным.

Добавлено через 1 минуту и 31 секунду
Akina
Да, именно о таком подходе я подумал с самого начала. Но в таком случае таблица станет достаточно сложной для восприятия. Вы все равно считаете, что оно того стоит?

Добавлено через 5 минут и 22 секунды
Akina
И вот еще ньсюан Вашего подхода... Допустим у меня есть всего 10 мероприятий длительностью 1 год, происходяших только по будням. На выходе я получу примерно 2500 (10 * 366 * 5/7) записей всего из 10 объектов?
PM MAIL   Вверх
Akina
Дата 12.12.2011, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(BuShaRt @  12.12.2011,  15:37 Найти цитируемый пост)
 таблица станет достаточно сложной для восприятия

Для восприятия кем? серверу - сиренево...

Цитата(BuShaRt @  12.12.2011,  15:37 Найти цитируемый пост)
 Вы все равно считаете, что оно того стоит?

Скорее да, чем нет. Окончательное решение всё равно принимать не мне.

Цитата(BuShaRt @  12.12.2011,  15:37 Найти цитируемый пост)
Допустим у меня есть всего 10 мероприятий длительностью 1 год, происходяших только по будням. На выходе я получу примерно 2500 (10 * 366 * 5/7) записей всего из 10 объектов? 

И что?




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 12.12.2011, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(BuShaRt @  12.12.2011,  14:09 Найти цитируемый пост)
3. Дни недели в которые он активен

А как задан этот атрибут?



Akina, мне кажется для решения этой задачи :
Цитата(BuShaRt @  12.12.2011,  14:09 Найти цитируемый пост)
Задача определить будет ли это мероприятие проходить в произвольный день.

Предлагаемый подход 
Цитата(Akina @  12.12.2011,  14:37 Найти цитируемый пост)
них создаём таблицу "Мероприятие - День, когда оно активно"

Не оправдан, как бы не представлялся этот атрибут.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 12.12.2011, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(Zloxa @  12.12.2011,  18:21 Найти цитируемый пост)
мне кажется для решения этой задачи Предлагаемый подход Не оправдан, как бы не представлялся этот атрибут. 

Эммм... не совсем понял фразу... 

Мне разворачивание указания дней недели в список конкретных дат кажется более логичным, чем другие подходы. Да, такой подход способен давать странные результаты, если срок окончания не задан или отнесён на конец вселенной - но зато только он позволит вносить исключения типа "если день не попадает на Пасху или Новый год"...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 12.12.2011, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Akina, там же указываются лишь дни недели, как я понял. Т.е. некий график с периодом в семь дней. Определив вхождение даты внутрь диапазона, проверить на вхождение элемента в множество от силы из 7 элементов (хотябы по битовой маске) и все... и не надо огород городить.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 12.12.2011, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Zloxa, да, СЕЙЧАС исходные данные именно таковы. Но появление как исключений (типа как я указал выше), так и "свободного графика" - на самом деле лишь вопрос времени. Почему бы сразу не делать структуру, способную переварить и эти новшества? тем более что, по заверениям ТС, речь пойдёт о тысячах (ну может десятках тысяч) азписей - мелочь по меркам СУБД...
Да и запросы будут проще и понятнее.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
BuShaRt
Дата 13.12.2011, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



Zloxa
Можите свое предложение подробние описать? Конкретно, про то как лучше определять вхождение значения в список значений?


Цитата(Akina @  12.12.2011,  20:11 Найти цитируемый пост)
да, СЕЙЧАС исходные данные именно таковы. Но появление как исключений (типа как я указал выше), так и "свободного графика" - на самом деле лишь вопрос времени.

Нет, такого изменения исходных данных не предвидится.


Цитата(Akina @  12.12.2011,  16:48 Найти цитируемый пост)
Цитата(BuShaRt @  12.12.2011,  15:37 )
Допустим у меня есть всего 10 мероприятий длительностью 1 год, происходяших только по будням. На выходе я получу примерно 2500 (10 * 366 * 5/7) записей всего из 10 объектов? 

И что?


То, что 2500 записей - это не много, тут все ясно. Но это кол-во из расчета 10 объектов, а в базе их могут быть тысячи в результате таблица индекса будет содержать миллионы записей. СуБД спокойно работают с таблицами в миллион записей при высокой нагрузке? 

Это сообщение отредактировал(а) BuShaRt - 13.12.2011, 10:47
PM MAIL   Вверх
Zloxa
Дата 13.12.2011, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(BuShaRt @  13.12.2011,  10:44 Найти цитируемый пост)
Можите свое предложение подробние описать? Конкретно, про то как лучше определять вхождение значения в список значений?

Мои советы в этой теме, увы, могут быть не самыми лучшими. Я совершенно не знаком с MySQL и его спецификой и мои рекомендации могут оказаться сродни рекомендации чесать левое ухо правой рукой. Я многократно уже упрекал себя за то, что пощусь в этой ветке, но порой таки не могу удержаться.

Однако в данном, конкретном, случае я не вижу сколь нибудь серьезной угрозы производительности тупой конструкции в лоб, чтобы ее стоило оптимизировать:
Код

where start_date >= :target_date
    and finish_date <= :target_date 
    and (day_of_week(:target_date) = 1 and su = 'Y'
         or day_of_week(:target_date) = 2 and mo = 'Y'
         ...
         or day_of_week(:target_date) = 7 and sa = 'Y'
        )


С другой стороны, Акина, действительно, отчасти прав. Действительно редких случаях  можно пренебречь календарем, и, в большинстве своем, это  оптимизации и допущения. На практике же, за частую производятся прееносы дней недели, когда мы, скажем в субботу работаем за понедельник, если на вторник приходится красный день календаря.

Добавлено через 6 минут
Цитата(BuShaRt @  13.12.2011,  10:44 Найти цитируемый пост)
 СуБД спокойно работают с таблицами в миллион записей при высокой нагрузке? 

Да. Миллионы и даже их десятки, это далеко не пугающие объемы.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
BuShaRt
Дата 14.12.2011, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: нет
Всего: 6



Цитата(Zloxa @  13.12.2011,  11:53 Найти цитируемый пост)
 тупой конструкции в лоб

Эта конструкция предполагает общий набор доступности по дням для всех объектов, а по условию задачи у каждого объекта должен быть свой набор доступности.

В целом же, я наверно воспользуюсь вариантом предложенным Akina.

Всем спасибо.
PM MAIL   Вверх
Zloxa
Дата 14.12.2011, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(BuShaRt @  14.12.2011,  09:47 Найти цитируемый пост)
Эта конструкция предполагает общий набор доступности по дням для всех объектов, а по условию задачи у каждого объекта должен быть свой набор доступности.

Либо я не понял тебя, либо ты меня. Ну да то не суть.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1152 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.