|
|
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
Приветствую Вас, уважаемые форумчане! У нас есть такие таблицы: DISCOUNTS - reservation_from_date - reservation_to_date - from_date - to_date - coef - hotel_id PERIODS - reservation_from_date - reservation_to_date - from_date - to_date - hotel_id PRICES - period_id - sum Получается так что если ищем цены за определенный интервал, то к каждому результату нужно применить скидки (помимо таблицы скидок существуют много других, как надбавки, доп условия и тд). Результатов могут быть до 100 000, соответственно если применить скидки к каждому результату это сильно отразится на скорость выдачи. Считать заранее цены сложно потому что скидки могут быть активны сегодня но неактивны завтра, значит нужно каждый день пересчитать а это миллионы записей. Проблема в том что нам очень важна сортировка, мы можем сделать пагинацию но проблема со скидками, пока они не будут применены мы не знаем какая эта будет цена. Пожалуйста, подайте идею, в какую сторону двигаться, может у кого-то был подобный опыт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2015, 22:32 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
gnuorgРезультатов могут быть до 100 000 Столько отелей ни в одном городе нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2015, 22:46 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
В отелях есть разные типы комнат, питание, виды из номеров и тд, на один отель могут быть много результатов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2015, 22:59 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
gnuorgПолучается так что если ищем цены за определенный интервал, то к каждому результату нужно применить скидки (помимо таблицы скидок существуют много других, как надбавки, доп условия и тд). Результатов могут быть до 100 000, соответственно если применить скидки к каждому результату это сильно отразится на скорость выдачи. 100000 -- это не так уж и много, при правильной организации БД вполне можно всё сделать быстро. gnuorgСчитать заранее цены сложно потому что скидки могут быть активны сегодня но неактивны завтра, значит нужно каждый день пересчитать а это миллионы записей. Не верю, что миллионы. gnuorgПроблема в том что нам очень важна сортировка, мы можем сделать пагинацию но проблема со скидками, пока они не будут применены мы не знаем какая эта будет цена. "нам важна сортировка" -- ну так и в чём проблема ? Сортируй. gnuorgПожалуйста, подайте идею, в какую сторону двигаться, может у кого-то был подобный опыт? Прежде всего, объяснить задачу. Прежде всего -- себе. Я не понял, в чём проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2015, 23:05 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
gnuorgУ нас есть такие таблицы: DISCOUNTS - reservation_from_date - reservation_to_date - from_date - to_date - coef - hotel_id PERIODS - reservation_from_date - reservation_to_date - from_date - to_date - hotel_id PRICES - period_id - sum Ну и БД какая-то невменяемая, кто на ком стоял -- не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2015, 23:08 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Я не хотел напрягать вас разными тонкостями программы, но результатов реально много, даже если выдается 1000 результатов, все равно долго обрабатываються. Цена формируется примерно следующим образом: Интервал поиска 01.05.2015 - 10.05.2015 01.05 - 10$ - discount_1 - discount_2 + markup 02.05 - 10$ - discount_1 + markup 03.05 - 10$ - discount_1 + markup 04.05 - 15$ - discount_1 + markup ... + Доп услуги + трансфер + билеты за транспорт = цена за тур Собственно вопрос в том - Реально сложные расчеты производить в реально времени и отсортировать их или нужно все-таки рассчитать цены заранее и выдать готовую цену? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 00:01 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
gnuorgMasterZiv, Я не хотел напрягать вас разными тонкостями программы, но результатов реально много, даже если выдается 1000 результатов, все равно долго обрабатываються. Цена формируется примерно следующим образом: Интервал поиска 01.05.2015 - 10.05.2015 01.05 - 10$ - discount_1 - discount_2 + markup 02.05 - 10$ - discount_1 + markup 03.05 - 10$ - discount_1 + markup 04.05 - 15$ - discount_1 + markup ... + Доп услуги + трансфер + билеты за транспорт = цена за тур Собственно вопрос в том - Реально сложные расчеты производить в реально времени и отсортировать их или нужно все-таки рассчитать цены заранее и выдать готовую цену? пока ничего нереального не вижу, попробуй напиши, не получиться - сделаешь то же самое в виде предрасчета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 00:42 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
gnuorg Реально сложные расчеты производить в реально времени и отсортировать их или нужно все-таки рассчитать цены заранее и выдать готовую цену? В первую очередь, определитесь могут ли у вас меняться цены на отель в течение дня? Или они фиксируются в некоторый час Х на день и в течение дня не меняются? Если второй вариант - очевидно, достаточно рассчитать единожды и не напрягать лишними пустыми расчетами при каждом запросе. Если первый вариант - очевидно, что вы не можете однократно рассчитать скидку, т.к. в противном случае у вас будут неактуальные данные для пользователей. Так же определитесь как будет работать приложение по времени: 8(12)х5(7) или 24х7? gnuorg...к каждому результату нужно применить скидки (помимо таблицы скидок существуют много других, как надбавки , доп условия и тд). Чем принципиально скидка отличается от надбавки, кроме как знаком перед суммой? ИМХО, разделять их не хороший вариант. gnuorgСчитать заранее цены сложно потому что скидки могут быть активны сегодня но неактивны завтра, значит нужно каждый день пересчитать а это миллионы записей. Пересчитывать надо только те скидки , статус которых изменился на момент расчета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 09:50 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
gnuorg, Для начала схему покажите - так лучше воспринимается. Потом объясните цели и задачи. А то непонятно за что боретесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 11:39 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
А какая СУБД ? зы: Наверно какое-то убожество типа sqlite или Mysql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 12:15 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
gnuorgЯ не хотел напрягать вас разными тонкостями программы, но результатов реально много, даже если выдается 1000 результатов, все равно долго обрабатываються. Даже на евробукинг если задать число людей, время и город ты не получишь больше сотни-двух вариантов. Потому что их физически больше нет. Если у тебя 1000, да ещё и работает медленно, это значит, что во-первых, критерии слишком нечёткие, а во-вторых, обработка построена из рук вон криво. Поэтому, как уже сказали, показывай реальные структуры данных и примеры обработки. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 12:40 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
Указал ниже ссылка на картинку со схемой, простите что связи не указал, не разобрался еще в navicat-e. ссылка на изображение Я знаю что там проблемы есть, в структуре и стыдно такое показывать. авторА какая СУБД ? СУБД - PostgreSQL Пробовал, писал даже скрипты расчетов на питоне, компилил и использовал в запросах, надеясь на какой-то прирост производительности, но проблема в том, что можно отсортировать цены за тур только после того как рассчитал все существующие цены и делать пагинацию в таком случае бессмысленно. автор критерии слишком нечёткие Согласен с Вами, но клиент хочет чтобы отображались все что есть в базе на указанный интервал, ему удобнее смотреть самые дешевые цены. Расчет примерно таков: Интервал поиска 01.05.2015 - 07.05.2015 Extrass discount сидит 7 дней - платит за 6 01.05 - 10$ - discount - discount 2 - discount 3 03.05 - 10$ - discount - discount 2 - discount 3 04.05 - 10$ - discount - discount 2 05.05 - 15$ - discount 2 06.05 - 15$ - discount 3 07.05 - 15$ - discount 3 + доп условия + трансфер + билеты за транспорт = цена за тур Соглашусь с автором: Mikle83Пересчитывать надо только те скидки, статус которых изменился на момент расчета. Как вы посоветуете, тратить по больше времени и сделать расчеты за ранее или производить их каждый раз при поиске? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 18:16 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
gnuorgУказал ниже ссылка на картинку со схемой, простите что связи не указал Забей на картинки, пость SQL скрипт с CREATE TABLE и FOREIGN KEY. Он намного нагляднее и даёт больше информации. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 18:38 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
gnuorg, Лично у меня ссылка не открылась. Да и если там нет связей, то толку от нее никакого. Храните уже готовый расчет, так будет проще. Хотя и на лету считать тоже можно. Эх, студенты ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 18:56 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
Совершенно отстойная схема. Неудивительно, что она не работает. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 19:55 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
авторСовершенно отстойная схема. Неудивительно, что она не работает. Спасибо за ответ, буду очень признателен если перечислите пару серьезных ошибок в структуре базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 20:02 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
Ошибка первая и главная: информация слишком размазана по разным таблицам. Собери цены в одну таблицу, а поправки к ним в другую. Всё не относящееся к расчёту - вынеси вон. Тогда считать будет легко даже для мускуля. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 20:10 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
gnuorg, Увидев поля varchar(0) могу посоветовать автору бежать оттуда. Хотя нет, пусть потребует больше денег и все завалит. Хотя всеравно завалит. Ну а потом уже и убежать можно попытаться. Если не умеете что-то делать - не беритесь. Ну не всем же быть космонавтами ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 22:15 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
gnuorgMikle83Пересчитывать надо только те скидки, статус которых изменился на момент расчета. Как вы посоветуете, тратить по больше времени и сделать расчеты за ранее или производить их каждый раз при поиске? Так там еще вопросы были, исходя из которых выбор варианта будет очевидным: а) Можете ли вы (согласно бизнес требованиям) зафиксировать скидки на день и не менять их в течение дня? Будут ли данные актуальными? б) как предполагается пользоваться приложением? Будет ли таймаут, когда никто не пользуется БД (к примеру, в 20-00 все ушли домой и закрыли офисы). Если оба ответа "да" - то имхо считать однократно ночью, когда все спят. Если хотя бы один ответ "нет" - то вариантов слишком много, а вводных данных от вас слишком мало. Но в таком случае 100% надо вводить понятие "актуальные" данные и пересчитывать только то, что изменилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 22:15 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
Mikle83Так там еще вопросы были, исходя из которых выбор варианта будет очевидным Судя по обрывкам информации, у него БД какого-то бюро путешествий, где туры планируются задолго вперёд. Поэтому никаких изменений скидок быть не может. Как и предпросчёта всех вариантов на годы вперёд. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 22:19 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
gnuorgПолучается так что если ищем цены за определенный интервал, то к каждому результату нужно применить скидки (помимо таблицы скидок существуют много других, как надбавки, доп условия и тд). Результатов могут быть до 100 000, соответственно если применить скидки к каждому результату это сильно отразится на скорость выдачи. Считать заранее цены сложно потому что скидки могут быть активны сегодня но неактивны завтра, значит нужно каждый день пересчитать а это миллионы записей. Проблема в том что нам очень важна сортировка, мы можем сделать пагинацию но проблема со скидками, пока они не будут применены мы не знаем какая эта будет цена. Пожалуйста, подайте идею, в какую сторону двигаться, может у кого-то был подобный опыт? Не понятно - в чем проблема то? Я так понял, что задача заключается в том, чтобы при расчете тура надо сказать клиенту сколько он заплатит за нужный ему период , при этом предложив разные варианты. Ну так в чем проблема- выбирайте стоимость для каждого отеля на каждый день нужного периода, выбирайте скидки на этот же период для этих же отелей и задача то в общем несложная. Ну и потом сортируйте уже результаты выборки. Что вас затрудняет? Написание запроса, ессено, будет зависеть от СУБД. Если под ораклом- то там есть интеллекутальные запросы- там вообще можно чудеса творить. Хотя для вашей задачи это в общем то не нужно. Ограничивайте поиск нужным периодом- и тогда записей будет не миллионы. Если вы это делаете по всем записям - сомнительная задача. И еще замечание по схеме - на мой взгляд в ценах должен быть не update (судя по полю updated_at), а insert (вы же собираетесь хранить всю историю изменения цен? Ну и такая же история по скидкам). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 04:53 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovПоэтому никаких изменений скидок быть не может. Как и предпросчёта всех вариантов на годы вперёд. Ошибаетесь - вполне могут быть изменения и цен и скидок- единственное нельзя делать перерасчет по уже заключенным договорам. В них останется старая цена и старая скидка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 04:55 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
авторСудя по обрывкам информации, у него БД какого-то бюро путешествий, где туры планируются задолго вперёд. Поэтому никаких изменений скидок быть не может. Как и предпросчёта всех вариантов на годы вперёд. Скидки могут меняться каждый день. Проблема с предпросчетом в том что мы не знаем на сколько дней клиент может заказать тур. интервал от 3 до 30 дней. Если хранить готовые цены за каждый день из интервал то получится примерно столько записей: 300 отелей * 10 типов комнат * 365 дней в году * 27 дней (интервал проживания) = 29 565 000 цен (на самом деле их гораздо больше) Вот столько нам нужно рассчитать каждый день (если не перерасчитать только те цены и скидки которые были редактированы). Второй вариант перерасчета это за каждый день а не за кол. дней проживания в отель - 300 отелей * 10 типов комнат * 365 дней в году = 1 095 000 цен. Этот вариант мне больше нравится но тут тоже есть проблема, я не могу применить скидки к каждому дню потому что в скидках есть минимальное кол. дней к которым применяется скидка. Тоесть пока я не знаю кол. дней которое выбрал клиент я не могу применить к нему скидку. авторОшибаетесь - вполне могут быть изменения и цен и скидок- единственное нельзя делать перерасчет по уже заключенным договорам. В них останется старая цена и старая скидка. Вы правы, даже удаление отеля никак не затрагивает уже существующие договора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 09:32 |
|
||
|
Расчет цены и сортировка
|
|||
|---|---|---|---|
|
#18+
gnuorgПроблема с предпросчетом в том что мы не знаем на сколько дней клиент может заказать тур. интервал от 3 до 30 дней. Помоему вы еще сами не представляете даже какую задачу собираетесь решать. Можете описать юзкейс- как вы собираетесь использовать цены и скидки? Каким образом на даты вы собираетесь выходить? Если вы с этим разберетесь- все встанет на свои места. Мне кажется клиент когда обращается- он хотя бы какие то параметры говорит: либо даты начал-конца, либо без уточнения даты- чтобы стоимость была минимальная. И в том и в другом случае есть выход на более краткосрочный период. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 09:44 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=17&tid=1540409]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 152ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...