|
|
|
Прошу совета по организации данных и их обработке
|
|||
|---|---|---|---|
|
#18+
Вопрос непростой и в большей части - теоретический. Передо мной стоит прикладная задача, хотелось бы стратегически правильно ее решить, как данные разместить и как обрабатывать. Обращаюсь за советом :) Кода мне не нужно, сам напишу. Итак, дано: Есть набор объектов, имеющих несколько критериев. По критериям регистрируются некие события, каждое событие имеет оценку. Задача - в любой момент иметь возможность получить сводную оценку как по каждому критерию, так и по объекту в целом. И по всем объектам сразу. И за произвольный промежуток времени. И сразу за несколько перекрывающихся промежутков, типа "Объект, ЗаГод, ЗаКвартал, ЗаМесяц, ЗаНеделю", "ЗаПрошлуюНеделю". Казалось бы, классическая задача, ничего особенного. Но есть изюминка. Дело в том, что оценка в целом по критерию, выставляется не по каким-то арифметическим законам, а по некоему логическому алгоритму, типа: "если есть задачи с оценками Х, значит общая оценка не может быть больше K, далее смотрим долю оценок Y, если она меньше Z, то далее считаем среднее арифметическое, если больше - общая оценка F. Если же задач с оценками X не было..." Сам по себе алгоритм не столь важен. Если есть шанс его нормализовать (привести к решению простым SQL), обсудим это подробнее :) Оценки между критериями Можно хранить любую вторичную информацию. Хочется, разумеется всего и сразу. Цели - получать оценки наиболее простым и эффективным способом, желательно меньшим числом объектов сервера. Ну и с минимальным участием клиента, разумеется. Насколько я предполагаю, реализовать алгоритм расчета оценки по критерию проще функцией. Но это вроде и все мои продвижки :) Если передавать в функцию параметром период, придется вызывать функцию для обработки почти одних и тех же данных столько раз, сколько периодов я рассматриваю в один момент. Умножив на количество критериев и объектов. А функция должна будет делать Select по задачам за период по критерию, в результате почти на пустом месте - шквал запросов. Готов пойти на всегда фиксированный набор рассматриваемых периодов в возвращаемом наборе данных. Но что-то это не улучшает ситуацию. Вижу вариант, с хранением готового набора оценок по критериям, привязанным к периодам. Каждая оценка будет пересчитываться по регистрации нового события. Кажется, количество событий будет сопоставимо с количеством запросов :) Вопросов два: 1. Нет ли у кого инфы, поддаются ли, подобные описанному, алгоритмы оценки раскладыванию в объекты реляционной модели? Почему-то хочется упростить жизнь :) 2. На мой взгляд, вариант с хранением готового набора оценок, который уже можно складывать как хочешь, наиболее эффективен. Может быть я неправ или что-то пропустил? Есть другие варианты? Среда - MSSQL2000. Прошу прощения за объем. Надеюсь кому-нибудь будет интересно погрызть такую косточку, со мной на пару :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2007, 03:29 |
|
||
|
Прошу совета по организации данных и их обработке
|
|||
|---|---|---|---|
|
#18+
Кусочек фразы потерялся: Оценки между критериями складываются арифметически. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2007, 03:31 |
|
||
|
Прошу совета по организации данных и их обработке
|
|||
|---|---|---|---|
|
#18+
FagrantВижу вариант, с хранением готового набора оценок по критериям, привязанным к периодам. Каждая оценка будет пересчитываться по регистрации нового события.Если правильно понял задачу, то звучит вполне здраво. При таком подходе надо только продумать, как соптимизировать подобное обновление. Чтобы можно было с минимумо усилий зарегистрировать как новое событие, так и критерий. Вообще, о критериях нужно еще тщательно подумать, в частности, чтобы их добавление описывалось определенным стандартным способом. Нет ощущения, что с ними Вам уже все просто, понятно и однозначно, IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2007, 10:56 |
|
||
|
|

start [/forum/topic.php?fid=32&gotonew=1&tid=1544495]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
182ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 508ms |

| 0 / 0 |
