Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Ситуация: Есть база данных, в которую сериализуются объекты различных типов из .NET-овского клиента. Между объектами могут существовать различные отношения - наследование, агрегирование и т.п. Наследование на уровне базы данных реализовано при помощи отношения один-к-одному. Уровней иерархии наследования в среднем 2-3. У всех объектов существует общий предок. Типов объектов достаточно много (несколько десятков, в перспективе до сотни-двух), соответственно столько и отношений один-к-одному к таблице, хранящей информацию о самых базовых объектах. Вопросы: Насколько будет замедляеться вставка в таблицу, при возрастании количества отношений один-к-одному к ней? Насколько быстро выполняется выборка из таблиц, связанных по ключу при отношении один-к-одному (скажем по отношению к один-ко-многим - также, быстрее, медленнее)? Насколько серьезно все это будет тормозить при возрастании количества данных? Интересует опыт людей, работавших с аналогичными структурами данных, субъективная оценка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2005, 20:28 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiChТипов объектов достаточно много (несколько десятков, в перспективе до сотни-двух), Ну и не дурили бы народу мозги и сказали бы КЛАСС, а не объкт, потом тип объектов.... VladiCh Вопросы: Насколько будет замедляеться вставка в таблицу, при возрастании количества отношений один-к-одному к ней? Насколько быстро выполняется выборка из таблиц, связанных по ключу при отношении один-к-одному (скажем по отношению к один-ко-многим - также, быстрее, медленнее)? Насколько серьезно все это будет тормозить при возрастании количества данных? 1. Смотря куда?? Если есть отношение Автомобиль-ЛегковойАвтомобиль-Волга, то при вставке в таблицу Автомобиль, вообще не зависит от кол-ва потомков. Если в ЛегковойАвтомобиль, то зависит от кол-ва записей в таблице Автомобиль, хотя не на много, т.к. проверка идет по индексу. Если в табл. Волга, то то зависит от кол-ва записей в таблице ЛегковойАвтомобиль, хотя не на много, т.к. проверка идет по индексу. 2. Теоретически быстрее чем один-ко-многим, хотя это скорее всего зависит от кол-ва связываемых таблиц. 3. Любая БД на тестовых небольших данных показывает наилучшую производительность, чем при больших данных. Все зависит от запросов, проверок, вставок, и индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 14:32 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
basНу и не дурили бы народу мозги и сказали бы КЛАСС, а не объкт, потом тип объектов.... Дело в том, что класс в этой системе тоже является объектом, поэтому устоялась терминология - объект и тип. Информация о всех типах объектов и их атрибутах (метаданные) описана в этой же базе данных рекурсивно, т.е. эти описания также являются объектами системы. Отношения примерно такие: Объект - Автомобиль - Легковой автомобиль - Волга То есь при добавлении любого объекта обязательна вставка в таблицу "Объект". Соответственно в этой таблице записей будет столько же, сколько в системе объектов (теоретически могут быть сотни тысяч - миллионы объектов). При добавлении новой "Волги" прийдется вставлять данные в 4 таблицы. Соответственно при выборке всех "Волг" придется связывать 4 таблицы. Запросы на выборку, вставку и т.п. генерируются автоматически на основании метаданных. То есть это что-то типа небольшой ORM-системы. basТеоретически быстрее чем один-ко-многим, хотя это скорее всего зависит от кол-ва связываемых таблиц. Насколько быстрее и за счет чего? basЛюбая БД на тестовых небольших данных показывает наилучшую производительность, чем при больших данных. Все зависит от запросов, проверок, вставок, и индексов Это понятно, поэтому и интересует опыт людей, делавших что-то подобное. Понятно, что это все зависит от запросов, но хотя бы в первом приближении, можно ли оценить так сказать скорость замедления работы при увеличении количества объектов и/или типов объектов в системе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 14:54 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Как предполагается работа с наборами объектов? 1 вариант: select * from Objects o join Automobiles a on a.ID = o.ID where a.WhealsCount = 4 2 вариант: while(true) { Automobile auto = Automobile() auto.Serialize() if auto.WhealsCount = 4 { ... } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 15:37 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiChСитуация: Есть база данных, в которую сериализуются объекты различных типов из .NET-овского клиента. Между объектами могут существовать различные отношения - наследование, агрегирование и т.п. Наследование на уровне базы данных реализовано при помощи отношения один-к-одному. Уровней иерархии наследования в среднем 2-3. У всех объектов существует общий предок. Типов объектов достаточно много (несколько десятков, в перспективе до сотни-двух), соответственно столько и отношений один-к-одному к таблице, хранящей информацию о самых базовых объектах. Вопросы: Насколько будет замедляеться вставка в таблицу, при возрастании количества отношений один-к-одному к ней? Насколько быстро выполняется выборка из таблиц, связанных по ключу при отношении один-к-одному (скажем по отношению к один-ко-многим - также, быстрее, медленнее)? Насколько серьезно все это будет тормозить при возрастании количества данных? Интересует опыт людей, работавших с аналогичными структурами данных, субъективная оценка. Эх, а ведь именно для таких случаев могут оказаться полезны объектные СУБД. И именно проблему быстродействия при вставке в таблицы, связанные gj ключу, мы исследовали при сравнении ООСУБД Versant FastObjects с Sybase и Oracle в этой ветке. Основываясь на полученных результатах, можно заметить, что в описанных в вопросе условиях торможение будет весьма существенным, особенно при больших (более 2-3 Гб или более 2-3 млн. записей) объемах данных. Единственный способ борьбы - отключение констрейнтов и индексов. Цена вопроса - порядки (т.е. быстродействие может изменяться на несколько порядков). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 16:31 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Есть прототип языка запросов, в котором можно задавать фильтры, т.е. что-то типа "Automobiles:WhealsCount = 4", это в результате разворачивается в вариант 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 16:31 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Но в таком случае заковыристых запросов не написать, только простые, остальные буду в апликейшн-сервере обрабатываться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 16:35 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiCh Отношения примерно такие: Объект - Автомобиль - Легковой автомобиль - Волга То есь при добавлении любого объекта обязательна вставка в таблицу "Объект". Соответственно в этой таблице записей будет столько же, сколько в системе объектов (теоретически могут быть сотни тысяч - миллионы объектов). При добавлении новой "Волги" прийдется вставлять данные в 4 таблицы. Соответственно при выборке всех "Волг" придется связывать 4 таблицы. Запросы на выборку, вставку и т.п. генерируются автоматически на основании метаданных. То есть это что-то типа небольшой ORM-системы. Вставка - это самая быстрая операция в БД, при отключении всех тригеров и ограничений, т.е. если Вы будите это все отслеживать логически, то лучше в последствии отключить все констрейны и тормозов не должно быть при любом кол-ве данных, и индексов должно быть только самые необходимые. Т.е. то что Вы получите на тестирование, от и должно быть и с большим кол-вом данных. VladiCh basТеоретически быстрее чем один-ко-многим, хотя это скорее всего зависит от кол-ва связываемых таблиц. Насколько быстрее и за счет чего? Ну хотя бы потому, что один ко многим предусматривет бОльшее кол-во данных в подчиненной таблце, поэтому меньше данных, меньше время исполнения запроса. Но это теоретически, на практике все зависит от конкретной ситуации. VladiCh Понятно, что это все зависит от запросов, но хотя бы в первом приближении, можно ли оценить так сказать скорость замедления работы при увеличении количества объектов и/или типов объектов в системе? А че Вы не можите предусмотреть какие понадобятся запросы к БД, вот все их проанализируйте и поймете во сколько раз будут тормоза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 16:36 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
В плане опыта могу сказать вот что: таблицу общего предка побейте для создания partitioned view(mssql) или partitioned table(oracle) так как там будет оооочень большое kоличество записей. Бить ее лучше прямо по ID, причем порциями сначала линейновозрастающими, потом как удобно. Например, пусть в первой порции мы хотим держать какие-либо метаданные которые часто используются (объекты типа класс, константы...) разумно эти данные поместить в первую партицию и под эту порцию выделить ID c 1 по 1000, другие партиции по усмотрению. Если в качестве первичного ключа вы используете GUID то для таблицы единого предка сделайте составной первичный ключ ID,GUID , в этом случае все потомки также будут содержать ID и GUID, но для внешних связей использовать только GUID (как альтернативный ключ). ID в данном случае нам нужен только чтоб побить общего предка (ID в данном случае может быть не уникальным), а возможно и потомков на партиции. Дальнейшие опасения в плане времени на CRUD операции решаются советами с DBA, так можно посоветовать например разнести таблицы, индексы по различным файловым группам/tablespace, использовать distributed partitions ... P/S/ Думаю вы выбрали правильную дорогу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 16:48 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Вообще-то в Db2 подобная проблема решена очень давно с использованием структурных типов и типизированных таблиц. Например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 16:58 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
У нас в таблице базовых объектов было полмиллиона записей с кластерным ключем по идентификатору. Проблем с производительностью не было никаких ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 16:58 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
2Old Nick Так язык запросов и не претендует на полную универсальность. Более 90% наших потребностей он покрывает, т.е. выборки с условиями, выборки связанных объектов и т.п. Более сложные выборки можно реализовать например работая не с физическими таблицами, а используя логические - view + триггера на вставку и удаление. А то, что нельзя реализовать и так, можно действительно реализовать в сервере приложений (ну или на худой конец, расширить язык запросов, в его реализации мы никак не связаны). По поводу отключения constraint'ов и триггеров - а самому это отслеживать не дороже ли получится в плане быстродействия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 17:00 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
2Old Nick: Полмиллиона записей - не так уж и много. А количество типов объектов и средний уровень вложенности наследования какой был? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 17:02 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
2gardenman: Ну так не во всех субд подобная функциональность имеется. Конечно идеальный вариант, чтобы наследование поддерживалось на уровне СУБД, но увы, в MSSQL подобной функциональности нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 17:06 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Средний уровень вложенности наверное 3-4. Количество типов около 120. Примерно половина из них не имеет физических таблиц. -------------------- Не учи отца и баста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 17:09 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiCh2gardenman: Ну так не во всех субд подобная функциональность имеется. Конечно идеальный вариант, чтобы наследование поддерживалось на уровне СУБД, но увы, в MSSQL подобной функциональности нет. Так берите Cache и дешевле будет и веживаться не надо, ну если надо конкретно ООБД, то и надо использовать ООСУБД или СУБД, поддерживающеая ОО. А то опять велосипед получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 18:08 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiCh По поводу отключения constraint'ов и триггеров - а самому это отслеживать не дороже ли получится в плане быстродействия? Я имел ввиду отключить только фориген кеи, да и то после того как логика приложения будет оттестирована и сдана в эксплуатация и нет никаких сообщений типа, связанных с ФК, вот тогда и можно отключить, и при внесении чего-то нового опять на некоторое время включить констрейны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 18:14 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
basТак берите Cache и дешевле будет и веживаться не надо, ну если надо конкретно ООБД, то и надо использовать ООСУБД или СУБД, поддерживающеая ОО. А то опять велосипед получается. У нас есть определенные требования, которые трудно реализовать существующими средствами. Например не под каждый класс заводится своя таблица, так же как похоже и у Old Nick. Данные разбиваются на 2 категории - т.н. "статические" - хранятся в текстовом виде в отдельной таблице и т.н. "динамические" - хранятся в своих таблицах. Также атрибуты объектов являются не списком, а иерархией, т.к. система предназначена в основном для хранения документов. Честно говоря не знаком с Cache, так что не знаю как там и что реализовано, но из тех ORM и OOСУБД, которые я смотрел, ничего, что можно использовать в качестве основы, серьезно не дорабатывая, не нашел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 18:20 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Каше именно так и хранит данные, как Вы у себя проектируете, причем к ним можно получить доступ и в виде таблиц. Так что может быть действительно стоит на нее посмотреть и код можно писать на С# и на Java и еще много на чем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 18:34 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
bas VladiCh2gardenman: Ну так не во всех субд подобная функциональность имеется. Конечно идеальный вариант, чтобы наследование поддерживалось на уровне СУБД, но увы, в MSSQL подобной функциональности нет. Так берите Cache и дешевле будет и веживаться не надо, ну если надо конкретно ООБД, то и надо использовать ООСУБД или СУБД, поддерживающеая ОО. А то опять велосипед получается. нуу ООСУБД эт конечно интересно и классно но не проще ли вместо изучения новой субд и попробовать нечто среднее например Hinername (Java), NHIbernate (.NET) или другой ORM ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 19:00 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
ORM не катит, т.к. тут обратное преобразование - скорее ROM, чем ORM :) и довольно специфическое. А насчет Cache - теперь переделывать уже поздно, ядро практически уже готово и свою функцию выполняет. Да и связываться с новой СУБД не хочется, думаю на изучение ее возможностей ушло бы приличное время, да и тут всякие нетехнические моменты есть, по которым предпочтительнее MSSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 19:11 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiChORM не катит, т.к. тут обратное преобразование - скорее ROM, чем ORM :) и довольно специфическое. А насчет Cache - теперь переделывать уже поздно, ядро практически уже готово и свою функцию выполняет. Да и связываться с новой СУБД не хочется, думаю на изучение ее возможностей ушло бы приличное время, да и тут всякие нетехнические моменты есть, по которым предпочтительнее MSSQL. Может я не совсем четко отследил Вашу мысль, но поясните пожалста почему ОРМ не проходит? Насколько я понял у вас есть некая таблица в которой хранятся Oid всех сущностей используемых в системе и эта таблица связана с иными как 1-N т.е. в остальных таблицах хранятся аттрибуты этих объектов (в одной таблице может хранится несколько однотипных аттрибутов разных объектов).... так же у вас базовый класс всех сущностей представлен в этой таблице как объект и все явно или косвенно наследуются от него. Вас беспокоит так же вопрос производительности системы при расширении базовой таблицы до нескольких миллионов экземпляров объектов, но этот вопрос имхо очень хорошо прокоментировал Роман Дынник. и мне трудно найти причины, кроме уже существующего оттестированного набора процедур с реализованной в них сложной бизнес логикой, для отказа от ORM (хотя некоторые орм могут использовать и хранимые процедуры для выбора сущностей). Если я все правильно понял из вышеизложенной ветки дискуссии то поясните ваш отказ от ОРМ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 19:29 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
ORM обычно используется как порождение структуры базы данных на основе классов, здесь ситуация противоположная - существующие сущности в базе данных маппятся на классы, которые можно или автоматически генерировать или писать вручную. То есть разработка системы начинается от базы данных, а не от ее клиента. С каждым классом может быть связана своя логическая таблица (которая реально может быть и view), а может и не быть связана. Часть атрибутов объекта хранится в таблице, связанной с его типом ("динамические атрибуты"), часть в отдельной таблице, которая одна на все типы ("статические атрибуты" - как правило это текстовая информация, не участвующая в бизнес-операциях). Текстовую информацию удобно хранить таким образом, т.к. по ней производится общий поиск и легко можно выполнять различный анализ этой информации без привязки к конкретному типы объекта. Если нужна скорость вставки, то все поля объекта могут быть "динамическими" - храниться в таблице, связанной с типом объекта. Таблица, в которой хранятся OID объектов - это таблица базового типа. Таблицы дочерних типов относятся к ней 1-1. Как навешать на это все обычный OR-маппинг? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 19:47 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Да, еще - атрибуты объекта организованы в дерево, а не простым списком, что тоже непонятно как реализовать в обычном ORM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 19:51 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
У меня есть уже готовая система с ROM (как Вы его назвали) Создание новых классов выполняется прямо из интерфейса приложения, оттуда же создание методов классов. А также автоформы для редактирования объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 19:53 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Да собственно у меня ядро системы тоже по большей части готово + готов инструмент для создания новых типов и объектов. Редактирование объектов точно также реализуется автоформами. Вообще у меня возникло впечатление, что наши системы довольно похожи по структуре. Просто решил поинтересоваться опытом в создании и эксплуатации подобных систем и как они работают с большими объемами данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 20:15 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
А что дальше? Что планируете делать с этой системой. Я вот доведу до минимального товарного вида и попытаюсь в инете продавать. Может инвестора для коробочного варианта найду ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 20:24 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
А у нас собственно есть инвестор, на чьи деньги она и пишется. Первая версия писалась для внутренних нужд, новую собираемся продавать. Продавать что-то коробочное на российском рынке очень тяжело, а системы такого рода вообще нереально. Можно продавать внедрения таких систем, чем мы и собираемся заниматься. Есть уже наработанная функциональность для CMS, зачатков документооборота и CRM. Они реализованы для старой версии системы, где маппинг производился вручную, теперь стоит задача перенести их на новую версию. Вы если не ошибаюсь, уже около года доводите свою систему до товарного вида? За это время так ничего и не получилось? Если система действительно стоящая, то думаю можно было бы на ее внедрениях и консалтинге попробовать что-то заработать, а саму систему сделать opensource'ной. Но для этого нужно еще и соответствующую функциональность реализовать и организационно это все оформить. Продавать коробку без серьезных вложений в ее продвижение не получится, а не имея опыта в таких делах почти 100% вероятность что эта затея провалится. У нас практически нет рынка для таких продуктов. Есть рынок внедрения CRM, CMS, ERP, документооборота и т.п. Если организуете сеть партнеров по принципу 1С, тогда можно будет говорить о продаже коробок :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2005, 20:45 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiChДа, еще - атрибуты объекта организованы в дерево, а не простым списком, что тоже непонятно как реализовать в обычном ORM. А с этого места по подробнее пожалста можно? Я немного не допонимаю что значит VladiChорганизованы в дерево Это когда атрибуты класса- потомка наследуют атрибуты класса-предка или Вы нечто иное подразумеваете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2005, 11:17 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
К сожалению, делаю я это в одиночку и по одному-два часа в неделю. Иногда даже по месяцу не подхожу. Времени нет. В интернете я выложу версию с автоформами как опенсорс, а плагин в виде разработки кастомных форм буду продавать за деньги. Надеюсь таким образом получить распространение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2005, 13:10 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Нет, это значит что например есть тип Документ, в его подтипах информация организована иерархично, т.е. есть заголовок, внутри него какие-то атрибуты, в теле документа несколько блоков, в которых также могут быть вложенные блоки и т.п. То есть набор атрибутов представляет собой некий древовидный шаблон документа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2005, 13:15 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiChORM обычно используется как порождение структуры базы данных на основе классов, здесь ситуация противоположная - существующие сущности в базе данных маппятся на классы, которые можно или автоматически генерировать или писать вручную. Нет, многие продукты позволяют производить как прямой (классы --> схема БД), так и обратный инжиниринг (схема БД --> классы). С разной степенью автоматизма: от полного до ручного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2005, 13:41 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
TemplarНет, многие продукты позволяют производить как прямой (классы --> схема БД), так и обратный инжиниринг (схема БД --> классы). С разной степенью автоматизма: от полного до ручного. Да я собственно в курсе, что позволяют, причитайте внимательно - обычно используется . В тех ORM, которые я смотрел, функциональность "обратного инжениринга" плохо подходит для нашей задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2005, 13:51 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiCh аблица, в которой хранятся OID объектов - это таблица базового типа. Таблицы дочерних типов относятся к ней 1-1. Как навешать на это все обычный OR-маппинг? Интересно и какие ORM вы изучили чтобы делать выводы о невозможности их использования в вашей задаче? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2005, 15:36 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiCh Насколько будет замедляеться вставка в таблицу, при возрастании количества отношений один-к-одному к ней? Насколько быстро выполняется выборка из таблиц, связанных по ключу при отношении один-к-одному (скажем по отношению к один-ко-многим - также, быстрее, медленнее)? Насколько серьезно все это будет тормозить при возрастании количества данных? При вставке в базовую таблицу вставка замедляться не будет (что очевидно), сколько бы на нее ссылок из других таблиц не было... Замедляться будут операции приводящие к изменению ее первичного ключа (в том числе удаление) PS Вообще интересные у вас вопросы... на сколько? на сколько чего? Спросили бы тогда насколько РСУБД быстры... или что-нибудь в этом духе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2005, 15:44 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
funikovyuri VladiCh аблица, в которой хранятся OID объектов - это таблица базового типа. Таблицы дочерних типов относятся к ней 1-1. Как навешать на это все обычный OR-маппинг? Интересно и какие ORM вы изучили чтобы делать выводы о невозможности их использования в вашей задаче? Пожалуйста не вырывайте мои слова из контекста и прочитайте внимательнее исходное сообщение. Там говорилось не только про отношения 1 к 1. Еще я говорил не про невозможность, а про то, что они плохо подходят для этой задачи. Смотрел я nHibernate, atoms framework, xpress persistent objects. критерием выбора была бесплатность или низкая стоимость соответствующих инструментов. По поводу вопросов - я не просил дать какую-то объективную оценку в секундах, порядках и т.п., просто спрашивал мнение людей, делавших что-то подобное. В чем это выразить - на ваше усмотрение. Можно это выразить например в сравнении с каким-нибудь другим вариантом реализации наследования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2005, 16:01 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiCh ну так почитайте про другие варианты реализации наследования... их всего 3 ну и насчет орм - я так и не понял какие ваши необычные архитектурные решения препятствуют их использованию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2005, 16:07 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Разумеется я читал про разные варианты реализации наследования. Просто читать - это одно дело, а реальный опыт использования - другое. Хотел я услышать именно про примеры использования. Препятствует использованию orm разделение атрибутов объектов на две группы. Атрибуты одной группы хранятся в связанной с типом таблице. Атрибуты другой группы (как правило это текстовые атрибуты) - в отдельной таблице. В этой таблице хранятся атрибуты этой группы для всех типов. Каким образом реализовать такую модель при помощи orm? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2005, 16:23 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
>>ну так почитайте про другие варианты реализации наследования... их всего 3 funikovyuri, а какой третий вариант реализации наследования? Я знаю всего два: 1) связь 1-к-1 - атрибуты не дублируются в производных сущностях 2) дублирование атрибутов в производных сущностях, union и т.п. ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 16:18 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
1. Таблица на каждый класс (Class table inheritance) - хранятся только свои атрибуты, родительские достаются через отношение 1 к 1. 2. Таблица на каждый конкретный класс (Concrete table inheritance). - копирование атрибутов родителя в подклассах. 3. Таблица на иерархию классов (Single table inheritance) - когда все атрибуты всех классов хранятся в одной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 16:50 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Ну и еще можно например 1 и 3 подходы смешивать в пределах разумного, т.е. делать одну таблицу на небольшую иерархию классов, а эту иерархии могут наследоваться от одного предка как class table inheritance ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 16:55 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
>>>3. Таблица на иерархию классов (Single table inheritance) - когда все атрибуты всех классов хранятся в одной таблице. Третий вариан как к таковому способу реализации наследования никакого отношения не имеет - это скорее структура/способ реализации ООП подхода, причем самый худший из всех, так как раскрутить и поддерживать это безобразие из 3-x таблиц объект-атрибут-значение очень и очень непросто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 16:56 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Ну так тогда и второй вариант не имеет отношения к способу реализации наследования (по вашей логике) - это тоже структура-способ реализации ООП подхода. На самом каждый из них в конкретной ситуации имеет свои преимущества и недостатки и имеет право на жизнь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:04 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiChПрепятствует использованию orm разделение атрибутов объектов на две группы. Атрибуты одной группы хранятся в связанной с типом таблице. Атрибуты другой группы (как правило это текстовые атрибуты) - в отдельной таблице. В этой таблице хранятся атрибуты этой группы для всех типов. Каким образом реализовать такую модель при помощи orm? Руками описать маппинг для каждого класса. Упомянутые вами nHibernate и XPO это позволяют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:05 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
>>>Руками описать маппинг для каждого класса. Упомянутые вами nHibernate и XPO это позволяют сомневаюсь, существующие средства маппинга работают по 1 или 2 варианту, а тут видимо смесь 1-го и 3-го. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:16 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Вот поэтому я и написал что плохо подходит. Классы у нас может создавать обычный (ну почти обычный) пользователь. Перекомпиляции приложения для этого не требуется. Атрибуты добавлять тоже. Как это сочетается с ручным маппингом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:17 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Существующие средства маппинга работают по всем трем вариантам + их вариации, но они нам все не очень подходят, т.к. в нашей системе помимо маппинга хранятся свои метаданные, которые могут изменяться из приложения + не для каждого типа требуется своя таблица (если все атрибуты типа - т.н. "статические"). То есть это комбинация стандартного маппинга с class table inheritance и хранением метаданных как объектов системы и хранением всех "статических" атрибутов всех объектов в отдельной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:23 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
В данном случае я бы поступил так: обычные атрибуты помапил на параметры, дополнительные (число и структура которых заранее не известна) - сериализовал бы в xml и помапил на один единственный text-параметр и раскрутил бы его на сервере бд для последующего сохранения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:25 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Поподробнее пожалуйста.... Ну раскрутили вы его на сервере в ту же отдельную таблицу, как сейчас и сделано, а выборки потом как делать? Оно кстати сейчас практически так и делается, только раскручивается из xml не на сервере БД, а в приложении. И сериализуются в XML все атрибуты, а не только дополнительные и гоняется он через веб-сервис. Но это уже другая история :). Кстати, число и структура их заранее известна. Они также описаны в метаданных. Там не все так просто получается :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:30 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
>> Ну раскрутили вы его на сервере в ту же отдельную таблицу, как сейчас и сделано, а выборки потом как делать? выборки for xml запросом, в приложении десериализуешь xml обратно на объект. и не обязательно в отдельную таблицу записи вставляешь, а как понравится. т.е. на mssql например используешь openxml для создания курсора/временной таблицы и вперед, кладешь данные как нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:46 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
А как насчет фильтров на дополнительные поля или сортировки по таким полям? Мы рассматривали такой вариант, как хранение всех атрибутов в текстовом виде в xml, но он кучу подобного рода ограничений накладывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:49 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiChСуществующие средства маппинга работают по всем трем вариантам + их вариации, но они нам все не очень подходят, т.к. в нашей системе помимо маппинга хранятся свои метаданные, которые могут изменяться из приложения + не для каждого типа требуется своя таблица (если все атрибуты типа - т.н. "статические"). То есть это комбинация стандартного маппинга с class table inheritance и хранением метаданных как объектов системы и хранением всех "статических" атрибутов всех объектов в отдельной таблице. Метаданные здесь стоят перпенидикулярно. Если вы сами в силах карандашом на бумажке для каждого атрибута класса написать однозначное соответствие атрибут --> (таблица, поле), то все то же самое можно сделать и в файле описания маппинга. Поскольку у вас обратный инжиниринг, то понадобятся всякие вспомогательные классы и неочевидные на уровне БД иерархии и ассоциации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:51 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
А если сериализовать каждый атрибут как отдельную строку в некой таблице - получается то же самое, что сейчас есть. Других вариантов сериализации я пока не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:51 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
2Templar. Совсем не перпендикулярно. Метаданные тут к тому, что они могут меняться в процессе работы приложения, при этом не меняется структура базы данных (т.к. меняться могут только текстовые атрибуты, которые хранятся по-другому, не так как остальные). И конечно это делается без перекомпиляции приложения и ручной настройки маппинга. Получается что обратный инжениринг в этом случае перпендикулярен. Прочитайте внимательнее то, что я об этом писал, если что непонятно - объясню подробнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:56 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Мы рассматривали такой вариант, как хранение всех атрибутов в текстовом виде в xml, но он кучу подобного рода ограничений накладывает да нет же, не в виде xml хранить, а в виде все той же структуры таблиц объек-атрибут-значение, запросов соответственно для получения данных будет несколько. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:57 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
В том то и дело, что для части атрибутов я могу написать на бумажке соответствие атрибут -> поле в таблице, а для части атрибутов соответствие будет атрибут -> строка в таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:57 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Роман Дынник Мы рассматривали такой вариант, как хранение всех атрибутов в текстовом виде в xml, но он кучу подобного рода ограничений накладывает да нет же, не в виде xml хранить, а в виде все той же структуры таблиц объек-атрибут-значение, запросов соответственно для получения данных будет несколько. И чем это тогда будет отличаться от того, что есть сейчас? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 17:59 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
а вы что вообще тогда хотите получить? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 18:00 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Да тут спор вообще-то начался из-за того, что мне посоветовали не заниматься ерундой и выбрать существующее ORM-средство. И я уже половину топика объясняю, почему это будет неудобно. Вот и вы мне тут объясняете что-то, а в результате пришли к тому, что уже сейчас реализовано :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 18:03 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
...в свое время причиной отказа от существующих orm-средств для меня послужило отсутствие нормального маппинга на хп. ... Описанную вами задачу может решить не средство orm, а скорее средство MDA, Bold например, но в данном случае вы отказываетесь от ручной поддержки структуры БД и возлагаете эту миссию на MDA средство которое по UML-диаграмме контролирует структуру данных . как следствие отпадает необходимость существования структуры объект-атрибут-значение. При этом конечный пользователь управляет моделью UML, а не создает атрибуты из какого-либо интерфейса приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 18:20 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Расслабьтесь, сама задача в том объеме, в котором была описана, уже решена :). Изначально топик создавался для того, чтобы прикинуть, что получится с этим решением при больших объемах данных (просто некоторые подозрения возникли, которые мне тут благополучно развеяли :)). MDA - это конечно хорошо, но UML-диаграммы - это слишком круто для обычного пользователя. Да и не для обычного тоже мне кажется проще реализовать изменение структуры данных в своем конфигураторе. В нем можно в принципе незначительно менять и структуру БД - для обычных атрибутов и редактировать описание связей. Это пока не реализовано, но я думаю будет следующим шагом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 18:27 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
У варианта с дополнительными атрибутами в отдельной таблице есть еще одно преимущество по сравнению с хранением атрибутов разных типов в разных таблицах - это возможность сквозного текстового поиска по всем типам данных без использования средств типа full-text search. Другими средствами организовать это довольно проблематично. Ну и еще одно преимущество - это собственно изменение структуры данных без изменения структуры БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 18:33 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
У меня это уже реализовано :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 19:45 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiCh Вопросы: Насколько будет замедляеться вставка в таблицу, при возрастании количества отношений один-к-одному к ней? Кол-во дочерних классов - это кол-во FK на родительскую таблицу. Чем больше их, тем больше серверу проверять. Но если в дочерних есть индекс на ссылающееся поле ( а он будет, ибо это - ПК дочерней таблицы), то практически замедления никакого не будет, ибо - индексный поиск, O(log(n)). Но самое главное - это все не для операций вставки , а для операций удаления. При вставках у вас эти FK проверяться не будут. Так что просто никакого влияния это не оказывает на создание экземпляров классов-братьев. А вот другое дело - вставка в родительскую таблицу всегда будет узким местом, его нужно грамотно уметь разводить, но это уже детали реализации, в основном, СУБД. VladiCh Насколько быстро выполняется выборка из таблиц, связанных по ключу при отношении один-к-одному (скажем по отношению к один-ко-многим - также, быстрее, медленнее)? Пофигу. Т.е. сам JOIN пофигу, а так естественно, чем больше записей генерирует запрос за счет "один-ко-многим" - тем медленнее выборка. Просто потому что записей больше. На практике join-ы у нас вообще никогда не тормозили, хоть в иерархии было по 10 уровней иногда. VladiCh Насколько серьезно все это будет тормозить при возрастании количества данных? Не более серьезно, чем в обычной БД с обычными таблицами (в смысле без применения наследования). Просто вообще никакой разницы. Но вообще log(n) - он рулит!! VladiCh Интересует опыт людей, работавших с аналогичными структурами данных, субъективная оценка. Опыт есть огромный в данном вопросе, он в общем согласуется с тем, что я написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 03:04 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiCh2Templar. Совсем не перпендикулярно. Метаданные тут к тому, что они могут меняться в процессе работы приложения, при этом не меняется структура базы данных (т.к. меняться могут только текстовые атрибуты, которые хранятся по-другому, не так как остальные). И конечно это делается без перекомпиляции приложения и ручной настройки маппинга. Получается что обратный инжениринг в этом случае перпендикулярен. Прочитайте внимательнее то, что я об этом писал, если что непонятно - объясню подробнее. У вас что, атрибуты хранятся вертикально? Тогда это нереляционная модель, а потому ORM не подходит по определению. Если сможете вначале свою доморощенную модель привести к реляционной, например, с помощью проекций, тогда все получится. P.S. Присоединяюсь к MasterZiv, особенных проблем нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 14:27 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Часть атрибутов горизонтально, часть вертикально. Насчет того что нереляционная модель - это вы конечно загнули... Вполне реляционная, просто часть атрибутов выбирается одной строкой, а часть списком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 15:11 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
>>>У вас что, атрибуты хранятся вертикально Templar, тут ядро для всех модулей - горизонтально, а расширенные атрибуты - вертикально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 17:34 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Роман Дынниктут ядро для всех модулей - горизонтально, а расширенные атрибуты - вертикально. Теперь ясно :) Тоже проецируется без особых проблем. Расширенные атрибуты идут как коллекция объектов класса "Атрибут" и иже с ним. VladiCh, это НЕреляционная структура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 18:11 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Да понятно, что в принципе проецируется, любую реляционную БД во что-нибудь объектное можно спроецировать, вопрос в том, насколько потом с этим удобно будет работать :). Если поставить своей задачей во чтобы то ни стало заставить работать с такой структурой например nHibernate, я думаю, что такую задачу можно решить, но толку от этого будет мало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 18:32 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
2Templar. 1. На уровне логики приложения нет разделения на обычные - нерасширенные атрибуты. Об этом знает только слой доступа к данным. В случае с ORM слой доступа к данным находится внутри (ORM), поэтому придется вводить еще один слой, делающий прозрачным обращения к атрибутам любого типа. 2. Если реализовывать это предлагаемым вами способом, даже банальная загрузка атрибутов для коллекции объектов будет менее эффективной, чем специализированное решение, а про загрузку с различными сортировками / фильтрами по "расширенным" атрибутам и говорить нечего. Стандартные ORM-средства для таких задач неприспособлены и если их все-таки прикрутить, то эффективность генерируемых ими запросов будет весьма низкая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 18:59 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiCh2. Если реализовывать это предлагаемым вами способом, даже банальная загрузка атрибутов для коллекции объектов будет менее эффективной, чем специализированное решение, а про загрузку с различными сортировками / фильтрами по "расширенным" атрибутам и говорить нечего. Стандартные ORM-средства для таких задач неприспособлены и если их все-таки прикрутить, то эффективность генерируемых ими запросов будет весьма низкая. Я об этом сказал в самом начале. У вас НЕреляционная структура с вертикальным хранением атрибутов. Поэтому не только ORM, где R - это relational, но и обычный SQL в качестве средства запросов будет неэффективным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2005, 13:22 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Уважаемый Templar. Не хотелось бы здесь много времени уделять доказательствам того, что более эффективно, что менее. Просто поверьте на слово, что если соответствующим образом построить структуру базы данных и спроектировоать приложение, то запросы на выборку таких атрибутов будут довольно эффективными, а в некототрых случаях даже эффективнее, чем запросы на выборку из таблиц с горизонтальным хранением атрибутов. Например, при выборке коллекции, в которых содержатся разнородные объекты, в случае с вертикальным хранением, мне вернется один рекордсет, с горизонтальным столько, сколько типов объектов находится в коллекции, т.е. теоретически неограниченное количество. Да, структура нереляционная, если ее рассматривать с вашей точки зрения, как набор обычных атрибутов объектов. Если же представить, что все вертикально хранимые атрибуты - это просто некие сериализованные XML-данные объекта, то структура вполне реляционная. Как они представляются в приложении - это другой вопрос. Все зависит от точки зрения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2005, 09:41 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Да, еще по поводу эффективности. В общем случае SQL в качестве языка запросов к таким данным будет менее эффективен. Но у нас на уровне бизнес-логики и не используется SQL, используется свой довольно простой язык запросов, который транслируется в довольно эффективный для данной структуры SQL. Да, он менее гибкий и гораздо более проостой, чем SQL, но нашим требованиям вполне удовлетворяет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2005, 09:44 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Уважаемый VladiCh, при вертикальном хранении SQL в принципе не может быть эффективнее, т.к. требует большего числа joins. Если у вас чистый OLTP, то это не помеха. Если хотя бы несложные поиски со связыванием 3-5 сущностей, то соедиений будет не 3-5, а 9-15. Вы пошли по пути содзания собственной надстройки, это один из вариантов. Другой вариант - максимальное использование стандартных средств. Наприиер Роман вам предлагал раскрутить данные в реляцонную форму (например, через view) и далее по известной методе. Никто не говорит, что первый вариант плох или наоброт. Какой вариант оптимальнее в ваших условиях - вам и решать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2005, 13:31 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Связывание сущностей у нас производится только по горизонтально хранимым атрибутам. Вертикально хранимые, как я уже говорил, вспомогательные, и 90% из них - текстовые. Поиск и сортировка производится по вертикально хранимым атрибутам точно также как и по горизонтально хранимым без дополнительных накладных расходов. К чему я это все говорю - к тому, что при правильном использовании нашей модели (вертикально + горизонтально хранимые атрибуты) - т.е. с определенными ограничениями + использование адаптированной под эту структуру надстройки, потерь производительности по сравнению с горизонтально хранимыми атрибутами почти не будет, зато появляются определенные преимущества, про которые я тоже писал выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2005, 08:51 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
VladiCh, вот что пришло в голову по поводу готовых ORM-средств, маппинга, расширенных атрибутов и прочего... Теоритически для своего объекта с расширенными атрибутами вы можете создать ReadOnly-свойство, которое возвращает расширенные атрибуты в виде xml. Код: plaintext Если средство ORM позволяет делать маппинг на хп. мапите на параметр хп. Не позволяет - создаем вью, мапим на поле вью, на вью навешиваем instead of - триггеры, в триггерах раскручиваем таблицы inserted и deleted и вызываем нужные хп. По поводу средств маппига, нормально поддерживающих хп - недавно натолкнулся: /topic/212450&hl=. Если будет время поэкспериментировать с вашей системой, ждем отзывов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2005, 09:37 |
|
||
|
Наследование атрибутов
|
|||
|---|---|---|---|
|
#18+
Роман, этот способ понятен. Непонятно как организовать средствами ORM запросы с условиями по расширенным полям или сортировку по ним. Даже если маппинг при помощи ХП, как заставить ORM разворачивать запросы с фильтром по расширенному полю в соответствующий SQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2005, 17:18 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1545694]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
102ms |
get tp. blocked users: |
1ms |
| others: | 261ms |
| total: | 468ms |

| 0 / 0 |
