powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как бы соединить скорость и стандартизацию?
25 сообщений из 35, страница 1 из 2
Как бы соединить скорость и стандартизацию?
    #38189112
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот придумываю новую стрктуру данных и хотел посоветоваться...
Хочу как-то стандартизировать хранение и обращение к данным...
Например ФИО граждан много где используется:
- поставленные на учет
- бухгалтер и директор предприятия
- учредители
- высвыбождаемые по сокращению
- сотрудники
Для этого делаю класс
ФИОФамилияИмяОтчествоКому принадлежит
Где "Кому принадлежит" это некий уникальный ключ...
Теперь применяю это к гражданам поставленым на учет. На учет гражданин может встать много раз и еще при этом менять это самое ФИО...
Делаю классы
ГражданинКодДата рождения
Смена ФИОКодДатаКод гражданина
Теперь сталкиваюсь с тем, что получить то самое ФИО гражданина на некую дату довольно долгий процесс.
Нужно выбрать все изменения ФИО этого гражданина по указаную дату... Отсортировать это в обратном порядке и взять первую запись.
Даже 500 граждан уже долго выводятся...
Дублировать данные так же не хочется... Но и такое время получения ФИО так же не устраивает.
----------
Cache for Windows (x86-64) 2010.2.3 (Build 702) Tue Feb 15 2011 14:20:27 EST
Cache for Windows (x86-64) 2012.1.1 (Build 602) Wed Mar 7 2012 22:36:34 EST
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189121
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот запрос, коим выбираю ФИО...

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
	s sql="Select * "
	s sql=sql_" From soi_arh_data_cls.name as a"
	s sql=sql_" Where a.parent in ("
	s sql=sql_"    Select b.urn"
	s sql=sql_"    From soi_arh_data.name as b"
	s sql=sql_"    Where b.citizen=?"
	s sql=sql_" )"
	s sql=sql_" And a.Dat<=?"
	s sql=sql_" Order by Dat desc"
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189129
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В soi_arh_data_cls.name хранятся все ФИО...
В soi_arh_data.name хранятся изменения ФИО граждан поставленых когда-либо на учет...
А b.citizen это код некоего гражданина...
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189131
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По всем ключевым, связующим таблицы, полям сделаны индексы...
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189136
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам принципиально получать это запросом? Не люблю я именно такие вещи делать запросами.
Лучше сделать метод. В метода, кстати, тоже можно пользоваться запросами, а можно искать ид нужной записи ордером по индексу.
Так как метод работы со структурой глобала находится в классе, я не считаю это преступлением. Работает в одно действие.

Ну а если принципиально делать это запросом, во-первых, пересчитайте селективности и после этого давайте план запроса.
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189141
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, у вас дублирование? отдельная таблица для неких актуальных ФИО и отдельно история?
Стоит ли так?
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189275
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

Приветствую!
может такой подход устроит:
в классе одно свойство ФИО
но оно в виде: %LB($LB(date,актуальное ФИО),$LB(date,предыдущее ФИО),....)

т.е. при сохранении записи мы всегда ее ставим в листе на первое место, со сдвигом остальных
+
дополнительный метод, вычисляемое поле, и т.д. в которая при передачи параметра возвращает необходимое
?
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189351
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Вам принципиально получать это запросом?
Нет.
Просто удивила такая задержка по времени...
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189356
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Кстати, у вас дублирование? отдельная таблица для неких актуальных ФИО и отдельно история?
Дублирования пока нет.
Есть таблички
- граждане
- история смены ФИО (только дата смены)
- все ФИО

Блок А.Н.Стоит ли так?
Так вроде вся информация сейчас нужна...
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189363
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007krvsa,

Приветствую!
может такой подход устроит:
в классе одно свойство ФИО
но оно в виде: %LB($LB(date,актуальное ФИО),$LB(date,предыдущее ФИО),....)
Неее. Это вообще не подойдет...
Т.к. гражданина нужно искать запросом (!) по любому его ФИО, а при таком подходе разве запрос будет работать?
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189434
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa ,

Почему бы вместо select * from soi_arh_data_cls.name не использовать select top 1 * from soi_arh_data_cls.name?
TOP
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189494
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitПочему бы вместо select * from soi_arh_data_cls.name не использовать select top 1 * from soi_arh_data_cls.name?
В моём случае нужна "последняя ближайшая дата"... Поможет ли это ускорить?
Т.к. поставить
Код: sql
1.
TOP 1


не проблема...
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189514
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако с
Код: sql
1.
TOP 1


есть ускорение.
Спасибо.
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189547
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaНужно выбрать все изменения ФИО этого гражданина по указаную дату... Отсортировать это в обратном порядке и взять первую запись .krvsaПоможет ли это ускорить?krvsaесть ускорениеВсегда лучше ограничивать число возвращаемых данных, если это возможно, особенно учитывая наличие оптимизации для TOP ... ORDER BY .
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189593
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitВсегда лучше ограничивать число возвращаемых данных, если это возможно, особенно учитывая наличие оптимизации для TOP ... ORDER BY .
Спасибо, учту на будущее.
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189601
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitособенно учитывая наличие оптимизации для TOP ... ORDER BY .
Только мало что с того понял... Читал Яндекс перевод
Яндекс_переводНачиная с Caché 5.2.2, оптимизация было сделано для ТОП ... ORDER BY, чтобы уменьшить интервал до первой строки был подготовлен. Как правило, эти изменения существенно улучшить производительность. Однако, в редких случаях, эти оптимизации эвристики сделать запрос хуже. В этих случаях,% NOTOPOPT намек теперь доступен в силу нормальную общая стоимость оптимизации обработки синтаксис таков:
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189607
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При таком варианте, с %NOTOPOPT

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
	s sql="Select Top 1 * "
	s sql=sql_" From %NOTOPOPT soi_arh_data_cls.name as a"
	s sql=sql_" Where a.parent in ("
	s sql=sql_"    Select b.urn"
	s sql=sql_"    From soi_arh_data.name as b"
	s sql=sql_"    Where b.citizen=?"
	s sql=sql_" )"
	s sql=sql_" And a.Dat<=?"
	s sql=sql_" Order by Dat desc"


не заметил ускорения...
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189617
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaПри таком варианте, с %NOTOPOPT не заметил ускорения...Зачем Вам использовать %NOTOPOPT?
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189638
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitЗачем Вам использовать %NOTOPOPT?
Я понятия не имею что это за "зверь"... Ты дал ссылку на него... Я по переводу вообще не понял зачем это нужно, но таки вставил для эксперимента.
Вот и все...

Для чего %NOTOPOPT нужен? Когда его использовать?
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189680
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaДля чего %NOTOPOPT нужен?В редких случаях, оптимизация TOP ORDER BY делает план запроса хуже. Именно для отключения этой оптимизации и служит %NOTOPOPT.
krvsaКогда его использовать?Когда план запроса без него хуже, а с ним лучше.
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189683
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitkrvsaКогда его использовать?Когда план запроса без него хуже, а с ним лучше.
Лаконично!
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189820
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил для ускорения хранить "самое последнее ФИО" со ссылкой сразу на код гражданина...
Т.о. оперативно смотреть ФИО будет достаточно быстро.
Вот только придется поддерживать "целостность" такого "ускорения"... Поскольку появляется дубляж одного их ФИО гражданина и не факт что это будет действительно "самое последнее ФИО".
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189879
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitkrvsaДля чего %NOTOPOPT нужен?В редких случаях, оптимизация TOP ORDER BY делает план запроса хуже. Именно для отключения этой оптимизации и служит %NOTOPOPT.Я бы не сказал, что в редких.
Иногда при наличии TOP оптимизатор строит план запроса, используя поля сортировки, а не поля условий, а это иногда плохо.
%NOTOPOPT отключает такую оптимизацию.

krvsa, а почему вы не хотите использовать две таблицы?
человек - ...
история смены фио - (ид человека, дата смены, фио).
По ид человека и дате смены делаете индекс.
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189881
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaРешил для ускорения хранить "самое последнее ФИО" со ссылкой сразу на код гражданина...
Т.о. оперативно смотреть ФИО будет достаточно быстро.
Вот только придется поддерживать "целостность" такого "ускорения"... Поскольку появляется дубляж одного их ФИО гражданина и не факт что это будет действительно "самое последнее ФИО".Я так сделал один раз и пожалел.
Если хотите так делать, то делаете ссылку-вычисляемое поле. Не так уж потеряете по скорости, зато не будет проблем с целостностью данных.
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189923
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.krvsa, а почему вы не хотите использовать две таблицы?
человек - ...
история смены фио - (ид человека, дата смены, фио).
По ид человека и дате смены делаете индекс.
я бы сделал
история фио - (ид человека, дата отмены, фио).
пустая дата отмены даёт текущие фио (последние)
по ид человека - история изменений.
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как бы соединить скорость и стандартизацию?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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