powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как бы соединить скорость и стандартизацию?
35 сообщений из 35, показаны все 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
Как бы соединить скорость и стандартизацию?
    #38189926
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Иногда при наличии TOP оптимизатор строит план запроса, используя поля сортировки, а не поля условий, а это иногда плохо.Статистика по таблице собрана ( Оптимизация производительности )?
Если собрана, а план всё равно плохой, то это верный признак написать в WRC с классификатором проблемы "SQL Performance".
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189935
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.а почему вы не хотите использовать две таблицы?
человек - ...
история смены фио - (ид человека, дата смены, фио).

Я сразу рассказал для чего мне нужна отдельная таблица именно под ФИО... Для некой стандартизации данных.
По такой же аналогии хочу сделать:
- адреса
- договора
- приказы
и т.п...
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189949
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Я так сделал один раз и пожалел.
Вот и я с сомнением на то смотрю... Просто уш дюже долго вычисляется то ФИО... Даже не ожидал такого на "фаст-фастес" СУБД!

Блок А.Н.Если хотите так делать, то делаете ссылку-вычисляемое поле. Не так уж потеряете по скорости, зато не будет проблем с целостностью данных.
Вот тут бы примерчик не помешал...
Как делать вычисляемые поля по свойствам этого же класса можно найти и в доке... А тут изменения в 3-тьей таблице... Как инициировать пересчет тех ФИО-полей?
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38189961
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может вообще вести ту "стандартизацию" только используя абстрактные классы... И кинуть ту структурку, что придумал ранее?
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38190012
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitЕсли собрана, а план всё равно плохой, то это верный признак написать в WRC с классификатором проблемы "SQL Performance".Собрана, план плохой.
WRC тут не поможет, максимум скажут: "используйте %NOTOPOPT".
У нас запросы генерирует некий модуль, и там всегда присутствует строчка типа TOP 1000000.
А для каше, что TOP 1, что TOP 1000000 - план одинаковый. Может, если бы было TOP 1, он и был бы оптимальным.
Также, как каше не учитывает разную селективность по значениям полей, и тут просто нужно отключать индексы.
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38190023
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.У нас запросы генерирует некий модульМодуль можно улучшать?
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38190030
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaБлок А.Н.Я так сделал один раз и пожалел.
Вот и я с сомнением на то смотрю... Просто уш дюже долго вычисляется то ФИО... Даже не ожидал такого на "фаст-фастес" СУБД!
План запроса кривой. В данном случае не каше работает медленно, а каше делает кучу лишней работы.

krvsaБлок А.Н.Если хотите так делать, то делаете ссылку-вычисляемое поле. Не так уж потеряете по скорости, зато не будет проблем с целостностью данных.
Вот тут бы примерчик не помешал...
Как делать вычисляемые поля по свойствам этого же класса можно найти и в доке... А тут изменения в 3-тьей таблице... Как инициировать пересчет тех ФИО-полей?Ну и что, что изменения. Это вычисляемое поле хранить не надо. Сделайте метод в другом классе и используете его для вычисления.
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38190037
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitБлок А.Н.У нас запросы генерирует некий модульМодуль можно улучшать?
Не очень понятен вопрос.
1. Имеются ли у меня полномочия? - да.
2. Вижу ли я в этом смысл? - пока нет.
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38192168
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ser_shuя бы сделал
история фио - (ид человека, дата отмены, фио).
пустая дата отмены даёт текущие фио (последние)
по ид человека - история изменений.

Я бы тоже:)
Подробнее по ссылке
Проектирование баз данных: хронологические данные:
http://www.arbinada.com/main/node/26
...
Рейтинг: 0 / 0
Как бы соединить скорость и стандартизацию?
    #38192515
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С датой начала проблема в этом случае,
с отображением истории по принципу (дата начала-дата конца),
с редактированием истории тоже могут быть нелогичности.

У нас подобное есть, не нравится. Правда, у не совсем так сделано - в таблицы истории записи с датой отмены, а в основной таблице текущие значения. В плане прикрутить историю там, где ее не было - удобно, а работать с ней - не очень.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как бы соединить скорость и стандартизацию?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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