powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нужен совет. Частота запросов к базе. Производительность
24 сообщений из 49, страница 2 из 2
Нужен совет. Частота запросов к базе. Производительность
    #39288808
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

Проще использовать первый вариант, т.к. во втором необходимо конфигурировать систему, описывая схему доступа до каждого из получателей.
Если волнуют блокировки, возможно, стоит использовать кеш, вместо обращения к базе данных.
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39288819
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fankhm,

у нас есть така фигня для тренеров/инструкторов

дергаем генератор с инкрементом 0. если значение с последнего раза поменялось - перечитываем все.
поскольку рисуется шахматка, строится очередь по приоритетам для инструкторов, то время от времени перересовываем и перечитываем все.

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

производительности - на 10 рабочих мест 100+ инструкторов 300+ занятий вполне достаточно

читается по фильтрам (окно ~ 100 позиций)
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39288827
Andrey_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fankhmпочитал про "технология Push".

не понял как её реализовать в моём случае ?
Как-нибудь с помощью третьего звена :) И оно не обязательно должно быть между клиентом и СУБД. Это может быть сервис/служба/демон/консольное приложение/что угодно. Оно где-то висит, и слушает например сокет. В этот сокет пишут все твои "клиентские места" при создании заказа. Когда оно получает заказ, оно рассылает всем "операторским местам" информацию о новом заказе (через такой же сокет напримре). Это может быть только его ID (и тогда "операторские места" сами ломануться в базу и вычитать заказ) или полная информация по заказу (тогда операторским местам остается только отобразить его в интерфейсе).

Основная идея, это именно то что ты процитировал - сервер инициирует передачу данных клиенту, а не клиент по таймеру дергает сервер.

fankhmпро "будет увлекательный танец по граблям" тоже не очень понятно. если работает чётко по транзакциям, в чём может быть проблема ?

я вижу только проблему в сборе "мусора" и обновлении статистики индексов, но это обычное, знакомое и предсказуемое.Ивенты в FB не умеют быть параметризируемыми. То есть при добавлении нового заказа ты не сможешь его ID запихнуть в ивент и разослать всем операторам ивент "Читайте заказ с ID=:pID". В результате, для реализации оповещения операторов о новом заказе нужно или писать третье звено (как я описал выше) или городить страшный огород из таблиц логирования и тригеров на комит транзакции. Обычно второй вариант не рекомендуют т.к. он и есть тот самый "увлекательный танец по граблям".

И кстати, а как у тебя операторы будут между собой решать, кому достанется заказ? Если несколько свободных одновременно.
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39288852
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastorесли значение с последнего раза поменялось - перечитываем все.
все перечитывать не обязательно. Иногда добавляют в таблицу столбец, в который при insert и update пишется значение генератора +1. И тогда можно выбрать все, что вставлялось или менялось с момента последнего получения генератора. Облом разве что с удалениями. Но в приличных системах данные не удаляют :-)
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39288900
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

Уважаемый Дима!

В этой предметной области перечитывать надо все.
Ибо.

1. Заказы добавляются/удаляются/изменяется фаза обслуживания/статус
2. Меняются приоритеты (очередь)
3. Несколько точек обслуживания. Коллизий нет, т.к. обслуживается клиент, стоящий перед мордой, а ресурс (инструктор) берется с первой успешно блокирующей попытки
3. Объем всего тащимого на клиента несоизмеримо меньше геморроя согласования частей.

У меня есть в голове готовая модель фастфуда, и я ее обязательно сделаю. С бесплатным вариантом на 2 точки.
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39288931
fankhm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pastorkdv,

Уважаемый Дима!

В этой предметной области перечитывать надо все.
Ибо.

1. Заказы добавляются/удаляются/изменяется фаза обслуживания/статус
2. Меняются приоритеты (очередь)
3. Несколько точек обслуживания. Коллизий нет, т.к. обслуживается клиент, стоящий перед мордой, а ресурс (инструктор) берется с первой успешно блокирующей попытки
3. Объем всего тащимого на клиента несоизмеримо меньше геморроя согласования частей.

У меня есть в голове готовая модель фастфуда, и я ее обязательно сделаю. С бесплатным вариантом на 2 точки.

ну где-то так я это и думаю.
"Третье звено" (оповещатель) - согласен, будет очень красиво и логично.
Но настройка и возможный проброс портов (если файрвол корпоративный, порт нестандартный, надо писать в главконтору что-зачем-почему), согласование и отлавливание рассогласования, причём это только для того, чтобы не перечитывать лишний раз таблицу, где будет максимум 100 записей.

Про генератор ещё не думал, спасибо за направление.
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39288951
Andrey_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvpastorесли значение с последнего раза поменялось - перечитываем все.
все перечитывать не обязательно. Иногда добавляют в таблицу столбец, в который при insert и update пишется значение генератора +1. И тогда можно выбрать все, что вставлялось или менялось с момента последнего получения генератора. Облом разве что с удалениями. Но в приличных системах данные не удаляют :-)Еще облом, если пишущие транзакции разной длинны. Может сложится так, что транзакция обновившая поле флага еще не закомитилась. В результате, читающая транзакция эти обновления пропустит, а значение генератора последнего апдейта запомнит, и уже никогда не прочитает, что там обновила та длинная пишущая транзакция.
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39288953
fankhm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrey_... или городить страшный огород из таблиц логирования и тригеров на комит транзакции. Обычно второй вариант не рекомендуют т.к. он и есть тот самый "увлекательный танец по граблям".


не могу понять про "страшный огород".
таблица Заказы с полем Текущий статус (меняется триггером).
Код: sql
1.
2.
3.
4.
Orders
OrdID integer PK
...
CurState integer FK



таблица Статусы Заказов (полная история Статусов Заказа)
Код: sql
1.
2.
3.
4.
5.
OrderStates
OSID integer PK
OrdID integer FK
StateID integer FK
OnDate timestamp



таблица Очереди (формируется триггером или процедурой при внесении в Статусы Заказов. Статус "принято", "в работе", "готово" - запись в Очереди, статус "выдано" - удаление из Очереди. т.е в Очереди только активные статусы)

Код: sql
1.
2.
3.
4.
5.
Queue
QID integer PK
OrdID integer FK
StateID integer FK
OnDate timestamp



в чём, кроме сбора "мусора", здесь может быть проблема ?

Andrey_И кстати, а как у тебя операторы будут между собой решать, кому достанется заказ? Если несколько свободных одновременно.
[/quot]

так же как в случае с "оповещателем" - кто первый нажал "Принять", тому и разворачивает на экран состав заказа для выполнения и фиксирует этого оператора в Исполнители.
Или здесь возможны какие-то варианты ?
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39288968
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey_Может сложится так, что транзакция обновившая поле флага еще не закомитилась.

Именно поэтому ивенты - надёжнее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39288974
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAndrey_Может сложится так, что транзакция обновившая поле флага еще не закомитилась.

Именно поэтому ивенты - надёжнее.


без эвентов - еще надежнее :)
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39288988
Andrey_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fankhmне могу понять про "страшный огород".Пока у тебя заказов мало - ни в чем. Каждый раз вычитываешь все не закрытые, и всё ок. Но когда у тебя появятся предварительные заказы, сама таблица заказов разрастется с 10-15 полей до 100+, или произойдет другое "внеплановое" увеличение размера вычитываемого пакета данных, тогда ты захочешь читать только то что изменилось. А это уже приведет к логу изменений и тригеру на комит генерирующему ивент для операторов. Вот это те самые грабли, а если заказов мало - как реализовывать, это скорее эстетический вопрос.

fankhmAndrey_И кстати, а как у тебя операторы будут между собой решать, кому достанется заказ? Если несколько свободных одновременно.так же как в случае с "оповещателем" - кто первый нажал "Принять", тому и разворачивает на экран состав заказа для выполнения и фиксирует этого оператора в Исполнители.
Или здесь возможны какие-то варианты ?Если с сериализацией (холостой апдейт/select with lock/etc) делать, все будет ок. А вот если так как я думал в этом топике - могут быть нюансы.
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39289236
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fankhmтак же как в случае с "оповещателем" - кто первый нажал "Принять", тому и разворачивает на экран состав заказа для выполнения и фиксирует этого оператора в Исполнители.
Или здесь возможны какие-то варианты ?
А зачем, вообще, кнопка "Принять"? Если человек, закончил заказ, автоматично скидывайте ему новый. Если хочет пойти в туалет, к примеру, пусть отпускает заказ или, если его нет, переводит своё рабочее место в статус "неактивный". Это нормально масштабируется на любое количество заказов. Плюс, простенький отчёт со среднем временем оформления заказа покажет, кому в этом месяце премия, а кому - нет.
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39289243
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для введения игрового элемента при переводе в режим "неактивный" пользователь пусть видит статистику по количеству своих оформленных заказов и топ-дня по заказам других операторов.
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39289247
fankhm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хныкfankhmтак же как в случае с "оповещателем" - кто первый нажал "Принять", тому и разворачивает на экран состав заказа для выполнения и фиксирует этого оператора в Исполнители.
Или здесь возможны какие-то варианты ?
А зачем, вообще, кнопка "Принять"? Если человек, закончил заказ, автоматично скидывайте ему новый. Если хочет пойти в туалет, к примеру, пусть отпускает заказ или, если его нет, переводит своё рабочее место в статус "неактивный". Это нормально масштабируется на любое количество заказов. Плюс, простенький отчёт со среднем временем оформления заказа покажет, кому в этом месяце премия, а кому - нет.

для отображения на табло информации о статусах заказов в очереди

клиент набрал заказ, подтвердил - статус "создано" с фиксацией времени создания - отображается у операторов и (ещё думают надо ли) на табло.

оператор принимает на себя заказ - статус "принято" с фиксацией начала времени приготовления и именем оператора - отображается на табло

оператор передал заказ на следующие стадии - статус "в работе" (можно совместить конечно с принято, посмотрим по логике) - отображается на табло

оператор запаковал заказ - статус "выполнено" - отображается на табло

клиент забрал заказ - статус "выдано" - нигде не отображается (удаляет из таблицы Очередь свою запись)
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39289248
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хныкпереводит своё рабочее место в статус "неактивный".

не успеет, система ему новый заказ уже всунет, как тоьлко он закроет предыдущий :-P
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39289252
fankhm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
статус "в работе" скорее всего будет детализирован по процессам
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39289253
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fankhm,
Я понимаю. Проще сделать это автоматично и бить операторов, которые отбегают от компьютера, без нажатия спец-кнопки "Последний заказ".
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39289254
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochХныкпереводит своё рабочее место в статус "неактивный".

не успеет, система ему новый заказ уже всунет, как тоьлко он закроет предыдущий :-P
Оператор должен изъявлять своё желание перевести в режим "неактивный" до окончания заказа.
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39289255
fankhm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AriochХныкпереводит своё рабочее место в статус "неактивный".

не успеет, система ему новый заказ уже всунет, как тоьлко он закроет предыдущий :-P

в принципе - да - человеческий фактор.

обычный режим - просто список с номерами и временем заказа. оператор не может "взять" любую позицию, только крайнюю.

"взял" позицию - ему развернулось её детализация
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39289257
fankhm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хныкfankhm,
Я понимаю. Проще сделать это автоматично и бить операторов, которые отбегают от компьютера, без нажатия спец-кнопки "Последний заказ".

для это как раз "принято".
Взял заказ - делает.
Не взял - висит в очереди
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39289260
Фотография Хнык
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fankhmХныкfankhm,
Я понимаю. Проще сделать это автоматично и бить операторов, которые отбегают от компьютера, без нажатия спец-кнопки "Последний заказ".

для это как раз "принято".
Взял заказ - делает.
Не взял - висит в очереди
Это ломает поток. Оператор должен бить заказы, пока не поймёт, что нужно сделать вынужденный перерыв. Подобная схема будет подталкивать операторов максимизировать периоды ввода заказов, что отлично себя покажет в пиковые часы нагрузки и будет держать в тонусе, после её спада.
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39289262
fankhm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хныкfankhmпропущено...


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

гм... надо подумать... спасибо за мысль
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39289362
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvpastorесли значение с последнего раза поменялось - перечитываем все.
все перечитывать не обязательно. Иногда добавляют в таблицу столбец, в который при insert и update пишется значение генератора +1. И тогда можно выбрать все, что вставлялось или менялось с момента последнего получения генератора. Облом разве что с удалениями. Но в приличных системах данные не удаляют :-)

Этот метод потенциально опасен пропуском новинок.
Если пишушая транзакция затянет коммит то клиент может посчитать что раз он уже получал записи с бОльшим значением этого автоинкремента - то более ранние запрашивать больше не нужно.

Вариант с просто проверкой изменился ли генератор - более достоверен и не надо тратиться на лишнее поле.
...
Рейтинг: 0 / 0
Нужен совет. Частота запросов к базе. Производительность
    #39289372
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если отталкиваться от постановки в стартовом топике, то можно обойтись вовсе без FB.
Вполне хватит RabbitQM или какого другого менеджера очередей.
В этом случае FB можно использовать разве что как систему архивирования. :)

Ну а если рассматривать постановку от pastor 19520053 , то действительно FB - основной. А Rabbit-а можно как оповещатель прикрутить. :)
...
Рейтинг: 0 / 0
24 сообщений из 49, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нужен совет. Частота запросов к базе. Производительность
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]