|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
Необходимо поставить вопрос - а стоит ли овчинка... У нас есть такое дело - и ms sql и oracle клиент - 1 штука вызывает сервер приложений сервер приложений определяет тип используемой бд и дергает нужную бд (фактически в каждом методе - if mssql then elseif oracle then end if; 80% логики на БД - соответственно, за исключением клиентской части - это 2 разных приложения По нашим оценкам (применимо только для нашего приложения) портирование на новую субд - 70% от выпуска новой версии ORM-ы не катят - слишком нагрузка большая ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2007, 14:22 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
а стоит ли..сервер приложений определяет тип используемой бд и дергает нужную бд (фактически в каждом методе - if mssql then elseif oracle then end if; Это, конечно, не дело. А в остальном - так и надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2007, 14:24 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
можно сделать класс SQLSyntax, который будет отвечать на вопросы о том, как правильно делать те или иные конструкции с некоторой умолчательной реализацией (напр SQL92). Его наследники (SQL) будут перекрывать некоторые методы, синтаксис которых отличается в разныз базах. Еще можно поюзать паттерн ExpressionBuilder для формулирования запросов ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2007, 15:21 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
beluginЕго наследники (SQL) будут перекрывать некоторые методы, синтаксис которых отличается в разныз базах. Не стоит выпячивать тривиальное решение наиболее мелкой из стоящих задач. Создается впечатление, что Вы не понимаете реальной сложности проблемы и полагаете, что такого движения достаточно для полного счастья. beluginЕще можно поюзать паттерн ExpressionBuilder для формулирования запросов А это усиливает предыдущее впечатление. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2007, 15:29 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
softwarer[quot belugin]Его наследники (SQL) будут перекрывать некоторые методы, синтаксис которых отличается в разныз базах. Не стоит выпячивать тривиальное решение наиболее мелкой из стоящих задач. Создается впечатление, что Вы не понимаете реальной сложности проблемы и полагаете, что такого движения достаточно для полного счастья. [/softwarer] Не понимаю, объясните. Сам реализовывал (принимал участие) только один раз на акцессе2 на переходный период. Работал с такими приложениями несколько раз. Проблемы появлялись только там где была нужна максимальная производительность на больших объемах данных. Требуется ли это в данном случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2007, 16:12 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
beluginНе понимаю, объясните. Сам реализовывал (принимал участие) только один раз на акцессе2 на переходный период. Наибольшие проблемы вызывает не синтаксис, и даже не отличие в возможностях, и даже не производительность (хотя и с ней уже очень непросто, если пишем не записную книжку). Основная проблема - в различном функционировании разных СУБД. Cкажем, возьмем запрос Код: plaintext
Если создать одинаковую таблицу SomeTable, заполнить ее одинаковыми данными и выполнить этот оператор, например, на MSSQL и на Interbase - его результаты будут разными (если я не ошибся, конструируя пример - проверить не на чем). "Разными" - в смысле "будут удалены разные множества строк". Почему - потому что в Interbase специфически интерпретируются вложенные запросы. Скажем, возьмем запрос Код: plaintext 1.
Опять же, на Oracle и на MSSQL он вернет разные результаты. А ведь мы пользуемся, казалось бы, самыми основами языка! Если же речь зайдет например о согласованности данных в отчетах, или например о синхронизации доступа и изменения товарных остатков на складе..... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2007, 16:55 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
softwarer Код: plaintext 1.
Опять же, на Oracle и на MSSQL он вернет разные результаты. Интересно, как народ работает на ERP, если такая разница существенна? На аксфоруме, например, народ работает в основном под MS SQL, но есть и товарищи, которые работают на Оракл - как получается, что такое вообще возможно? Не является ли данная проблема частным случаем разного синтаксиса? Существует ли запрос для Оракл, которые ведет себя также как данный запрос под MS SQL? При переводе проекта на BAAN с BaanBase на Oracle почему-то не столкнулся с подобными проблемами (правда где-то месяц тюнили производительность). Может она на самом деле не такая и важная? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2007, 17:13 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
Существует ли запрос для Оракл, которые ведет себя также как данный запрос под MS SQL? конечно существует, только выглядит по другому Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2007, 17:17 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
beluginНа аксфоруме, например, народ работает в основном под MS SQL, но есть и товарищи, которые работают на Оракл - как получается, что такое вообще возможно? Не готов судить, что такое аксфорум. Большинство "универсальных" решений использует СУБД в наименьшей степени, обходясь только простейшими запросами. Скажем, в случае выше - они сделают select * from table и отфильтруют результат на сервере приложений. beluginНе является ли данная проблема частным случаем разного синтаксиса? Не совсем. В случае, если пустая строка задается константой, с этой проблемой в принципе можно справиться синтаксическими инструментами. Однако, если значение задается bind-переменной, или например берется из подзапроса - уже никак. beluginСуществует ли запрос для Оракл, которые ведет себя также как данный запрос под MS SQL? Опять же не совсем. В случае, если в MSSQL для поля задан NOT NULL, можно считать аналогом оракловый запрос с IS NULL. Однако, если поле в MSSQL допускает как NULL, так и пустую строку, этот вариант уже не пройдет. beluginПри переводе проекта на BAAN с BaanBase на Oracle почему-то не столкнулся с подобными проблемами (правда где-то месяц тюнили производительность). Может она на самом деле не такая и важная? Я никогда не видел BAAN и ровным счетом никак не могу прокомментировать такой переход. А насчет неважной.... ну если Вам наплевать, что приложение работает непредсказуемым образом и выдает неверные результаты, то да, не такая и важная. У людей, плотно работающих с БД, как правило формируется довольно.. трепетное отношение к данным. Это отношение чуждо людям, рассматривающим БД просто как файл, объект информации типа "прочитал-записал". Доходит до смешного: один раз, на этом же форуме, я объяснял создателю самопального универсального решения, что его технология не обеспечивает согласованности данных. То есть, его программа, работая с корректной, целостной БД, могла напечатать следующий отчет: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Так вот: я так и не смог объяснить, чем это плохо. Видимо, не умею объяснять :( ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2007, 17:39 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
softwarer а стоит ли..сервер приложений определяет тип используемой бд и дергает нужную бд (фактически в каждом методе - if mssql then elseif oracle then end if; Это, конечно, не дело. А в остальном - так и надо. Это условно-упрощенно :-))) А причина одна - производительность. Я работал и с Hibernate'ом и с iBatis'ом (на других проектах) и могу сказать, что в конкретном случае ORM'ы не катят (либо потом искать Hibernate-экспертов от $5000). А варианты с ANSI - синтаксисом, имхо , ни в какие ворота ... :-))) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2007, 13:01 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
softwarer Не готов судить, что такое аксфорум. Большинство "универсальных" решений использует СУБД в наименьшей степени, обходясь только простейшими запросами. Скажем, в случае выше - они сделают select * from table и отфильтруют результат на сервере приложений. BAAN (щас называется Infor ERP LN) и Dynamics Ax (Axapta) фильтрует на сервере приложения только если ему явно про это указали. Конечно, там язык запросов гораздо беднее, чем у нормальных СУБД, но до подзапросов, например, доходит. Еще вариант: генерировать Expression Tree а потом транслировать его в SQL (насколько я знаю, так действует LINQ и TopLink) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2007, 09:56 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
belugin BAAN (щас называется Infor ERP LN) и Dynamics Ax (Axapta) фильтрует на сервере приложения только если ему явно про это указали. На сервере приложений имеется ввиду ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2007, 10:19 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
beluginКонечно, там язык запросов гораздо беднее, чем у нормальных СУБД, но до подзапросов, например, доходит. Еще вариант: генерировать Expression Tree а потом транслировать его в SQL (насколько я знаю, так действует LINQ и TopLink) И? Подчеркну: я в принципе верю в возможность создать "хорошее приложение, работающее с разными СУБД". Я просто подчеркиваю, что это сложно, трудоемко и дорого - затраты получаются того же порядка, что и при независимой реализации под несколько СУБД. Разумеется, в том числе можно создать свой язык со своими строгими правилами и генерить по нему программы в той или иной целевой форме. Тут будет отдельная куча проблем, но в целом я полагаю, что для проектов определенного размаха это будет частью оптимального решения. Оптимальным я полагаю сделать следующее: большую часть проекта описывать на таком вот универсальном языке, разработав к нему адекватные инструментальные средства, и сделать возможность подключения "оптимизированных реализаций" конкретных функций для конкретных СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2007, 11:07 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
Добавлю от себя ещё к связке MSSQL и Oracle. Например функции работы с датами разные, да что там говорить про это, контактация строковых полей в запросе разная. И типы полей разные. В Oracle нет Identity, зато есть секвенции. А языки Transact SQL и PL/SQL настолько отличаются между собой, что перевести процедуру из одной СУБД в другую, бывает просто не возможно. Лично я не представляю себе приложение, в котором реализована работа учитывающее все отличия. А если взять ещё и третью СУБД? Как пример могу указать на 1С, под DBF заточена хорошо, а вот под MSSQL я бы этого не сказал. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2007, 13:33 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
>risp >Где можно почитать про разработку поддержки нескольких субд? Как Вы себе это представляете? На уровне только клиентского приложения или можете использовать сервер приложения? Если второе, то попытайтесь вычленить необходимую функциональность клиента - на первых порах как-то зафиксировать функции интерфейса и их параметры. На уровне серверов данных реализовать по максимуму эту функциональность в хранимых процедурах. Сервер приложения переведет инвариантную (по отношению к базам данных) функцию запроса клиента в запрос к базе данных. Результат в DataSet (если SELECT) С уважением, Владимир. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2007, 13:57 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
А что вы скажите про ORM (Hybernate, NHybernate) Entity Framework и DLinQ для этих целей? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2007, 13:59 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
beluginА что вы скажите про ORM (Hybernate, NHybernate) Entity Framework и DLinQ для этих целей? Linq+DSL. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2007, 14:09 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
ВМоисеевНа уровне только клиентского приложения или можете использовать сервер приложения? Теперь посмотрите на написанное Вами и попробуйте ответить на вопрос: нафига для реализации нарисованной Вами схемы сервер приложений. Что он в данной схеме сделает такого, что будет затруднительно сделать без него? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2007, 14:17 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
Вряд ли стоит задача поддерживать все существующие субд. А для 2-3 субд, можно реализовать разный синтаксис и перевести часть сложной логики на субд: с клиента вызывать хранимые процедуры. имхо это позволяет избежать ошибок с разными результатами. И сохранить ясный код программы. Только придется изучить несколько субд. Может вам подойдет такой подход. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2007, 10:57 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
В свое время приходилось писать приложение как раз "под различные СУБД". В итоге вылилось, что писали под Oracle, но используя только простейшие запросы (ANSI SQL), тщательно избегая малейших фичей. Предполагалось, что вот когда оно все заработает, и ежели (и когда) возникнет потребность - будут "слегка" дорабатывать под другую СУБД. Не стоит наверно и говорить - сколько было ненужного гемора при этом и какова, тем ни менее, вероятность того что доработки оказались бы больше чем "слегка". Кстати. насколько знаю, потребность потом так и не возникла... softwarerПодчеркну: я в принципе верю в возможность создать "хорошее приложение, работающее с разными СУБД". Я просто подчеркиваю, что это сложно, трудоемко и дорого - затраты получаются того же порядка, что и при независимой реализации под несколько СУБД. Согласен. Nobody faults but mine... (LZ) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2007, 14:58 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
Может кому-то будет интересно От Informix к SQL Server В статье рассказывается об особенностях переноса системы класса ERP с платформы Informix On-Line Dynamic Server на Microsoft SQL Server 2000.Ну и чтобы не было недопонимания - многие технические решения, которые мы тогда приняли, мне сейчас, по прошествии лет кажутся неверными. Тем не менее портирование удалось осуществить за 3-4 месяца силами 2-х человек. Подчеркну, что по моему мнению закладываться при проектировании архитектуры на поддержку разных СУБД нужно, только если есть очень веские причины делать именно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2007, 10:52 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
Alexey KudinovТем не менее портирование удалось осуществить за 3-4 месяца силами 2-х человек. Я бы поставил акцент несколько по-другому. Идеальную для портирования систему, отвечающую большей части изложенных здесь универсальных рецептов, потребовалось дорабатывать 3-4 месяца, причем судя по изложенному материалу, большей частью отлавливая именно "тонкие несовместимости при корректном синтаксисе". ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2007, 19:45 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
softwarer Alexey KudinovТем не менее портирование удалось осуществить за 3-4 месяца силами 2-х человек.Я бы поставил акцент несколько по-другому. Идеальную для портирования систему, отвечающую большей части изложенных здесь универсальных рецептов, потребовалось дорабатывать 3-4 месяца, причем судя по изложенному материалу, большей частью отлавливая именно "тонкие несовместимости при корректном синтаксисе". Я вообще акцент не ставил, никакой. Пусть каждый для себя решает много это 3-4 месяца или мало и в сравнении с чем. Но в целом я считаю удачное портирование (пускай даже и специально заточенной под него системы) достижением, особенно если учесть, что я часто слышу что такое вообще невозможно. Ну и напоследок - проект в итоге оказался неудачным, хотя формально был (частями) внедрен. Но это уже отдельная история. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2007, 12:21 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
Alexey KudinovНо в целом я считаю удачное портирование (пускай даже и специально заточенной под него системы) достижением, Согласен. Я в данном случае стремлюсь подчеркнуть тот факт, что даже в очень удачных условиях потребовалась работа, трудоемкость которой идет в бюджете отдельной и вполне солидной строкой. Конечно, интересно, каков масштаб этих цифр относительно общей трудоемкости создания системы, но пока получается так: если 3-4 месяца и 2 человека, то по московским ценам это где-то $15-30'000 зарплаты. То есть если московской организации заказать такой проект (портирование) за $50'000 - ей надо будет крепко думать, браться за него или нет. Alexey Kudinovособенно если учесть, что я часто слышу что такое вообще невозможно. Хм. Действительно прямо в такой формулировке и слышите? От кого? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2007, 12:39 |
|
Разработка приложения, поддерживающего различные СУБД
|
|||
---|---|---|---|
#18+
softwarerЯ в данном случае стремлюсь подчеркнуть тот факт, что даже в очень удачных условиях потребовалась работа, трудоемкость которой идет в бюджете отдельной и вполне солидной строкой. Безусловно. Кстати ЕМНИП именно сроки ~4 месяцев заказчику и назывались, так что мы уложились. softwarerКонечно, интересно, каков масштаб этих цифр относительно общей трудоемкости создания системы Эх... Ну как пример в той системе один АРМ после "внедрения" (т.е. подписания акта) дорабатывался чуть больше года... Что о многом говорит, но это здесь оффтоп. softwarerТо есть если московской организации заказать такой проект (портирование) за $50'000 - ей надо будет крепко думать, браться за него или нет. Само собой. softwarer Alexey Kudinovособенно если учесть, что я часто слышу что такое вообще невозможно. Хм. Действительно прямо в такой формулировке и слышите? От кого? Вот уж не вспомню прямо так, сходу. Флеймы где упоминаются системы под разные СУБД возникают часто (вырастают из саг он многозвенках), читаю я их по диагонали . Давайте так - когда наткнусь в очередной раз, я подниму этот топик и вставлю ссылку, если не забуду конечно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2007, 12:53 |
|
|
start [/forum/topic.php?fid=33&msg=34788207&tid=1548995]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 286ms |
total: | 529ms |
0 / 0 |