|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
kdv, Проще использовать первый вариант, т.к. во втором необходимо конфигурировать систему, описывая схему доступа до каждого из получателей. Если волнуют блокировки, возможно, стоит использовать кеш, вместо обращения к базе данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 12:07 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
fankhm, у нас есть така фигня для тренеров/инструкторов дергаем генератор с инкрементом 0. если значение с последнего раза поменялось - перечитываем все. поскольку рисуется шахматка, строится очередь по приоритетам для инструкторов, то время от времени перересовываем и перечитываем все. никакого гемора с трехзвенками, событиями и пр. производительности - на 10 рабочих мест 100+ инструкторов 300+ занятий вполне достаточно читается по фильтрам (окно ~ 100 позиций) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 12:16 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
fankhmпочитал про "технология Push". не понял как её реализовать в моём случае ? Как-нибудь с помощью третьего звена :) И оно не обязательно должно быть между клиентом и СУБД. Это может быть сервис/служба/демон/консольное приложение/что угодно. Оно где-то висит, и слушает например сокет. В этот сокет пишут все твои "клиентские места" при создании заказа. Когда оно получает заказ, оно рассылает всем "операторским местам" информацию о новом заказе (через такой же сокет напримре). Это может быть только его ID (и тогда "операторские места" сами ломануться в базу и вычитать заказ) или полная информация по заказу (тогда операторским местам остается только отобразить его в интерфейсе). Основная идея, это именно то что ты процитировал - сервер инициирует передачу данных клиенту, а не клиент по таймеру дергает сервер. fankhmпро "будет увлекательный танец по граблям" тоже не очень понятно. если работает чётко по транзакциям, в чём может быть проблема ? я вижу только проблему в сборе "мусора" и обновлении статистики индексов, но это обычное, знакомое и предсказуемое.Ивенты в FB не умеют быть параметризируемыми. То есть при добавлении нового заказа ты не сможешь его ID запихнуть в ивент и разослать всем операторам ивент "Читайте заказ с ID=:pID". В результате, для реализации оповещения операторов о новом заказе нужно или писать третье звено (как я описал выше) или городить страшный огород из таблиц логирования и тригеров на комит транзакции. Обычно второй вариант не рекомендуют т.к. он и есть тот самый "увлекательный танец по граблям". И кстати, а как у тебя операторы будут между собой решать, кому достанется заказ? Если несколько свободных одновременно. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 12:24 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
pastorесли значение с последнего раза поменялось - перечитываем все. все перечитывать не обязательно. Иногда добавляют в таблицу столбец, в который при insert и update пишется значение генератора +1. И тогда можно выбрать все, что вставлялось или менялось с момента последнего получения генератора. Облом разве что с удалениями. Но в приличных системах данные не удаляют :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 12:49 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
kdv, Уважаемый Дима! В этой предметной области перечитывать надо все. Ибо. 1. Заказы добавляются/удаляются/изменяется фаза обслуживания/статус 2. Меняются приоритеты (очередь) 3. Несколько точек обслуживания. Коллизий нет, т.к. обслуживается клиент, стоящий перед мордой, а ресурс (инструктор) берется с первой успешно блокирующей попытки 3. Объем всего тащимого на клиента несоизмеримо меньше геморроя согласования частей. У меня есть в голове готовая модель фастфуда, и я ее обязательно сделаю. С бесплатным вариантом на 2 точки. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 13:41 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
pastorkdv, Уважаемый Дима! В этой предметной области перечитывать надо все. Ибо. 1. Заказы добавляются/удаляются/изменяется фаза обслуживания/статус 2. Меняются приоритеты (очередь) 3. Несколько точек обслуживания. Коллизий нет, т.к. обслуживается клиент, стоящий перед мордой, а ресурс (инструктор) берется с первой успешно блокирующей попытки 3. Объем всего тащимого на клиента несоизмеримо меньше геморроя согласования частей. У меня есть в голове готовая модель фастфуда, и я ее обязательно сделаю. С бесплатным вариантом на 2 точки. ну где-то так я это и думаю. "Третье звено" (оповещатель) - согласен, будет очень красиво и логично. Но настройка и возможный проброс портов (если файрвол корпоративный, порт нестандартный, надо писать в главконтору что-зачем-почему), согласование и отлавливание рассогласования, причём это только для того, чтобы не перечитывать лишний раз таблицу, где будет максимум 100 записей. Про генератор ещё не думал, спасибо за направление. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 14:09 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
kdvpastorесли значение с последнего раза поменялось - перечитываем все. все перечитывать не обязательно. Иногда добавляют в таблицу столбец, в который при insert и update пишется значение генератора +1. И тогда можно выбрать все, что вставлялось или менялось с момента последнего получения генератора. Облом разве что с удалениями. Но в приличных системах данные не удаляют :-)Еще облом, если пишущие транзакции разной длинны. Может сложится так, что транзакция обновившая поле флага еще не закомитилась. В результате, читающая транзакция эти обновления пропустит, а значение генератора последнего апдейта запомнит, и уже никогда не прочитает, что там обновила та длинная пишущая транзакция. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 14:26 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
Andrey_... или городить страшный огород из таблиц логирования и тригеров на комит транзакции. Обычно второй вариант не рекомендуют т.к. он и есть тот самый "увлекательный танец по граблям". не могу понять про "страшный огород". таблица Заказы с полем Текущий статус (меняется триггером). Код: sql 1. 2. 3. 4.
таблица Статусы Заказов (полная история Статусов Заказа) Код: sql 1. 2. 3. 4. 5.
таблица Очереди (формируется триггером или процедурой при внесении в Статусы Заказов. Статус "принято", "в работе", "готово" - запись в Очереди, статус "выдано" - удаление из Очереди. т.е в Очереди только активные статусы) Код: sql 1. 2. 3. 4. 5.
в чём, кроме сбора "мусора", здесь может быть проблема ? Andrey_И кстати, а как у тебя операторы будут между собой решать, кому достанется заказ? Если несколько свободных одновременно. [/quot] так же как в случае с "оповещателем" - кто первый нажал "Принять", тому и разворачивает на экран состав заказа для выполнения и фиксирует этого оператора в Исполнители. Или здесь возможны какие-то варианты ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 14:28 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
Andrey_Может сложится так, что транзакция обновившая поле флага еще не закомитилась. Именно поэтому ивенты - надёжнее. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 14:43 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovAndrey_Может сложится так, что транзакция обновившая поле флага еще не закомитилась. Именно поэтому ивенты - надёжнее. без эвентов - еще надежнее :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 14:49 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
fankhmне могу понять про "страшный огород".Пока у тебя заказов мало - ни в чем. Каждый раз вычитываешь все не закрытые, и всё ок. Но когда у тебя появятся предварительные заказы, сама таблица заказов разрастется с 10-15 полей до 100+, или произойдет другое "внеплановое" увеличение размера вычитываемого пакета данных, тогда ты захочешь читать только то что изменилось. А это уже приведет к логу изменений и тригеру на комит генерирующему ивент для операторов. Вот это те самые грабли, а если заказов мало - как реализовывать, это скорее эстетический вопрос. fankhmAndrey_И кстати, а как у тебя операторы будут между собой решать, кому достанется заказ? Если несколько свободных одновременно.так же как в случае с "оповещателем" - кто первый нажал "Принять", тому и разворачивает на экран состав заказа для выполнения и фиксирует этого оператора в Исполнители. Или здесь возможны какие-то варианты ?Если с сериализацией (холостой апдейт/select with lock/etc) делать, все будет ок. А вот если так как я думал в этом топике - могут быть нюансы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 15:02 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
fankhmтак же как в случае с "оповещателем" - кто первый нажал "Принять", тому и разворачивает на экран состав заказа для выполнения и фиксирует этого оператора в Исполнители. Или здесь возможны какие-то варианты ? А зачем, вообще, кнопка "Принять"? Если человек, закончил заказ, автоматично скидывайте ему новый. Если хочет пойти в туалет, к примеру, пусть отпускает заказ или, если его нет, переводит своё рабочее место в статус "неактивный". Это нормально масштабируется на любое количество заказов. Плюс, простенький отчёт со среднем временем оформления заказа покажет, кому в этом месяце премия, а кому - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 18:47 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
Для введения игрового элемента при переводе в режим "неактивный" пользователь пусть видит статистику по количеству своих оформленных заказов и топ-дня по заказам других операторов. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 18:56 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
Хныкfankhmтак же как в случае с "оповещателем" - кто первый нажал "Принять", тому и разворачивает на экран состав заказа для выполнения и фиксирует этого оператора в Исполнители. Или здесь возможны какие-то варианты ? А зачем, вообще, кнопка "Принять"? Если человек, закончил заказ, автоматично скидывайте ему новый. Если хочет пойти в туалет, к примеру, пусть отпускает заказ или, если его нет, переводит своё рабочее место в статус "неактивный". Это нормально масштабируется на любое количество заказов. Плюс, простенький отчёт со среднем временем оформления заказа покажет, кому в этом месяце премия, а кому - нет. для отображения на табло информации о статусах заказов в очереди клиент набрал заказ, подтвердил - статус "создано" с фиксацией времени создания - отображается у операторов и (ещё думают надо ли) на табло. оператор принимает на себя заказ - статус "принято" с фиксацией начала времени приготовления и именем оператора - отображается на табло оператор передал заказ на следующие стадии - статус "в работе" (можно совместить конечно с принято, посмотрим по логике) - отображается на табло оператор запаковал заказ - статус "выполнено" - отображается на табло клиент забрал заказ - статус "выдано" - нигде не отображается (удаляет из таблицы Очередь свою запись) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 19:06 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
Хныкпереводит своё рабочее место в статус "неактивный". не успеет, система ему новый заказ уже всунет, как тоьлко он закроет предыдущий :-P ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 19:06 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
статус "в работе" скорее всего будет детализирован по процессам ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 19:08 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
fankhm, Я понимаю. Проще сделать это автоматично и бить операторов, которые отбегают от компьютера, без нажатия спец-кнопки "Последний заказ". ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 19:08 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
AriochХныкпереводит своё рабочее место в статус "неактивный". не успеет, система ему новый заказ уже всунет, как тоьлко он закроет предыдущий :-P Оператор должен изъявлять своё желание перевести в режим "неактивный" до окончания заказа. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 19:09 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
AriochХныкпереводит своё рабочее место в статус "неактивный". не успеет, система ему новый заказ уже всунет, как тоьлко он закроет предыдущий :-P в принципе - да - человеческий фактор. обычный режим - просто список с номерами и временем заказа. оператор не может "взять" любую позицию, только крайнюю. "взял" позицию - ему развернулось её детализация ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 19:10 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
Хныкfankhm, Я понимаю. Проще сделать это автоматично и бить операторов, которые отбегают от компьютера, без нажатия спец-кнопки "Последний заказ". для это как раз "принято". Взял заказ - делает. Не взял - висит в очереди ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 19:11 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
fankhmХныкfankhm, Я понимаю. Проще сделать это автоматично и бить операторов, которые отбегают от компьютера, без нажатия спец-кнопки "Последний заказ". для это как раз "принято". Взял заказ - делает. Не взял - висит в очереди Это ломает поток. Оператор должен бить заказы, пока не поймёт, что нужно сделать вынужденный перерыв. Подобная схема будет подталкивать операторов максимизировать периоды ввода заказов, что отлично себя покажет в пиковые часы нагрузки и будет держать в тонусе, после её спада. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 19:15 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
Хныкfankhmпропущено... для это как раз "принято". Взял заказ - делает. Не взял - висит в очереди Это ломает поток. Оператор должен бить заказы, пока не поймёт, что нужно сделать вынужденный перерыв. Подобная схема будет подталкивать операторов максимизировать периоды ввода заказов, что отлично себя покажет в пиковые часы нагрузки и будет держать в тонусе, после её спада. гм... надо подумать... спасибо за мысль ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2016, 19:17 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
kdvpastorесли значение с последнего раза поменялось - перечитываем все. все перечитывать не обязательно. Иногда добавляют в таблицу столбец, в который при insert и update пишется значение генератора +1. И тогда можно выбрать все, что вставлялось или менялось с момента последнего получения генератора. Облом разве что с удалениями. Но в приличных системах данные не удаляют :-) Этот метод потенциально опасен пропуском новинок. Если пишушая транзакция затянет коммит то клиент может посчитать что раз он уже получал записи с бОльшим значением этого автоинкремента - то более ранние запрашивать больше не нужно. Вариант с просто проверкой изменился ли генератор - более достоверен и не надо тратиться на лишнее поле. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2016, 06:22 |
|
Нужен совет. Частота запросов к базе. Производительность
|
|||
---|---|---|---|
#18+
Если отталкиваться от постановки в стартовом топике, то можно обойтись вовсе без FB. Вполне хватит RabbitQM или какого другого менеджера очередей. В этом случае FB можно использовать разве что как систему архивирования. :) Ну а если рассматривать постановку от pastor 19520053 , то действительно FB - основной. А Rabbit-а можно как оповещатель прикрутить. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2016, 07:16 |
|
|
start [/forum/topic.php?fid=40&msg=39289262&tid=1562022]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 262ms |
total: | 419ms |
0 / 0 |