Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Поддержка нескольких СУБД  [new]
ALEXBOR
Member

Откуда:
Сообщений: 80
Всем доброго времени суток!
Хотелось бы обсудить тему по поддержке в разрабатываемом приложении нескольких СУБД (например, Oracle, SQL Server, DB2 и MySQL). Очень хотелось бы узнать мнение сообщества по этому поводу. Какой подход лучше (использование ORM, разработка серверного кода для каждой СУБД, использование только SQL 92...)? Достоинства и недостатки каждого подхода? Ссылки на документацию и литературу по этому поводу...
К сожалению в поиске по форуму ничего подходящего не нашел. Может плохо искал..:)
Заранее всем спасибо.
30 янв 07, 10:55    [3711479]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
tru55
Member

Откуда: СПб
Сообщений: 19788
Боюсь, что использование стандарта SQL ничего не даст, поскольку разный уровень поддержки + реализация своих вещей в каждой СУБД + разные системные представления (возможно, что-то еще забыл). На мой взгляд - разработка серверного кода для каждой СУБД, хотя при этом теряется удобства реализации некоторых функций на клиенте (сравнение серверной реализации против клиентской реализации уже было)
30 янв 07, 11:15    [3711658]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
ALEXBOR
Member

Откуда:
Сообщений: 80
В принципе, выбор иде между ORM и разработкой серверного кода для каждой СУБД. Забыл добавить, что речь идет о web-приложении на ASP.NET 2.0.
В частности, очень хотелось попробовать ORM под .NET...
30 янв 07, 11:22    [3711700]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
Gold
Member

Откуда: Харьков
Сообщений: 2947
Мы, к примеру, свою ORM пишем... Если что-то не получается, то винить некого :-)
30 янв 07, 11:49    [3711910]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
ALEXBOR
Member

Откуда:
Сообщений: 80
автор
Мы, к примеру, свою ORM пишем... Если что-то не получается, то винить некого :-)

Если не секрет, чем не устраивают решения предлагаемые на рынке?
30 янв 07, 11:57    [3711979]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
Dmitriy Ivanov
Member

Откуда: Moscow
Сообщений: 68

A> Автор: ALEXBOR
A> Всем доброго времени суток!
A> Хотелось бы обсудить тему по поддержке в разрабатываемом приложении
A> нескольких СУБД (например, Oracle, SQL Server, DB2 и MySQL). Очень
A> хотелось бы узнать мнение сообщества по этому поводу. Какой подход
A> лучше (использование ORM, разработка серверного кода для каждой
A> СУБД, использование только SQL 92...)? Достоинства и недостатки
A> каждого подхода? Ссылки на документацию и литературу по этому
A> поводу... К сожалению в поиске по форуму ничего подходящего не
A> нашел. Может плохо искал..:) Заранее всем спасибо.

Наиболее универсальный подход - использование ODBC. Драйверы имеются,
практически, для всех СУБД, и не только на платформе Windows. Если язык
С/С++ для Вас тяжеловат, для конкретных языков программирования можно
использовать свои прослойки и интерфейсы, типа

- JDBC для Java,
- Common SQL (http://www.lispworks.com/documentation/sql-tutorial/)
для Коммон Лиспа

и т.п. Библиотеки разных языков позволяют более или менее абстрагироваться
от конкретной СУБД.

Безусловно, в погоне за универсализмом больше кода придется перетянуть на
клиента, что может быть тяжелей или легче (или даже правильней) в
зависимости от приложения.




Posted via ActualForum NNTP Server 1.3

30 янв 07, 15:49    [3714239]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
ALEXBOR
Member

Откуда:
Сообщений: 80
Реализовывать объемное web-приложение таким способом не очень рационально... ИМХО, тем более для этого нет соответствующих ресурсов и есть довольно жесткие сроки.
Скажем, если сузить спектр и рассматривать реализацию только в парадигне .NET (естественно для реализации некоторых задач C/C++ никто не отменял...)
30 янв 07, 16:13    [3714431]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
Gold
Member

Откуда: Харьков
Сообщений: 2947
2 ALEXBOR

Потому как у нас круче :-)

На самом деле может и не круче, но существующие системы довольно старые, а наша изначально использовала такие вкусности как нуловые типы, женерики, анонимные делегаты и т.п.

К тому же в случае проблем я всегда могу пофиксить свои ошибки или дописать новую функциональность. Разбираться же в чужих кодах мне очень сложно.
30 янв 07, 17:35    [3715249]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
ALEXBOR
Member

Откуда:
Сообщений: 80
2 Gold

Что ж, это тоже вариант, особенно, если система унаследованная...
Просто при большом объеме функциональности, которую необходимо реализовать написание своего ORM может быть делом не подъемным...
Ну, все равно спасибо за ответ. Будем и его держать в голове...:)
30 янв 07, 17:57    [3715409]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
Gold
Member

Откуда: Харьков
Сообщений: 2947
Ну да, список того что надо сделать у меня огого. С другой стороны это вторая версия где были учтены недочёты первой и всё намного грамотрее сделано.
Вон мои коллеги щас разбираются с DLinq. Будем посмотреть что у них получится. Я по этому поводу скептически настроен, поскольку знаю как майкрософт любит неявно затачивать свои продукты под MS SQL. Потом окажется что например этот DLinq не сможет мапить объекты на процедуры, функции, блоки SQL всевозможные или подымать их их подзапросов, процедур, функций или ещё чего-то что у МС не так реализовано. Автоинкременты свои дебильные везде пихают. Я уже с ними запарился...
Поэтому однозначно лучше самому всё делать.
30 янв 07, 20:00    [3715915]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
Dmitriy Ivanov
Member

Откуда: Moscow
Сообщений: 68

A> Автор: ALEXBOR
A> Реализовывать объемное web-приложение таким способом не очень
A> рационально... ИМХО, тем более для этого нет соответствующих
A> ресурсов и есть довольно жесткие сроки. Скажем, если сузить спектр и
A> рассматривать реализацию только в парадигне .NET (естественно для
A> реализации некоторых задач C/C++ никто не отменял...)

Все зависит от знания языка и инструментария. Кому ближе .NET, кому еще
что-нибудь. Разумеется, чем ниже уровень языка, тем меньше шансов.



Posted via ActualForum NNTP Server 1.3

30 янв 07, 20:13    [3715948]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
ALEXBOR
Member

Откуда:
Сообщений: 80
Просто у нас есть возможность опробовать два варианта реализации...
На форуме уже обсуждалась тема ORM https://www.sql.ru/forum/actualthread.aspx?bid=36&tid=85698&pg=-1, но только в контексте общего применения, а не решения задачи поддержки нескольких СУБД. Может кто-то пробовал использовать ORM под .NET? Поделитесь впечатлениями...
Второй вариант - это разработка серверного кода под каждую СУБД (возможно, по общим правилам описанных Джо Селко). Здесь, ИМХО только вопрос наличия ресурсов...
Что касается заточенности MS под SQL Server, так это не новость...:) Это ни чему особо не мешает. Мы, например, с успехом использовали оракловый провайдер ADO для написания приложения ASP.NET 2.0 + Oracle 10g.
31 янв 07, 10:53    [3717718]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
Gold
Member

Откуда: Харьков
Сообщений: 2947
2 ALEXBOR

Ну у меня есть опыт использования своей ORM. Как минимум я пишу её с учётом того что я всегда смогу сменить MS SQL на FireBird. Как писать лучше - это вобще вопрос крайне обширный и сложный. Я так полагаю что для этого нужно знать паттерны и не плохо бы прочитать книгу "Архитектура корпоративных приложений" Фаулера кажется. Я честно признаться ни того ни другого толком не читал. У меня щас на всё своё видение есть. Но прочитать собираюсь обязательно.

По поводу написания кода под разные СУБД. Я на другое закладываюсь. Есть некие минимальные возможности СУБД и провайдеров, на которые я закладываюсь. Например:
1) СУБД должна понимать SEWLECT FROM SELECT
2) СУБД должна уметь делать SELECT * FROM SP/UDF ()
3) Желательно чтобы СУБД поддерживала представления
4) Должен быть способ получения сгенерированного ID в одной команде или пакете команд
31 янв 07, 16:34    [3720771]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
ALEXBOR
Member

Откуда:
Сообщений: 80
Gold

1) СУБД должна понимать SEWLECT FROM SELECT
2) СУБД должна уметь делать SELECT * FROM SP/UDF ()
3) Желательно чтобы СУБД поддерживала представления
4) Должен быть способ получения сгенерированного ID в одной команде или пакете команд

Это очень короткий список... (возможно Вы привели далеко не весь...). Многие ORM имеют гораздо больше возможностей..., единственный их недостаток - это то, как они это делают.
К тому же есть масса вопросов даже при написании SQL-запросов, например, обработка Null значений в Oracle и SQL Server, хотя обе СУБД соответствую стандарту ANSI, но делают это по-разному...
31 янв 07, 17:56    [3721458]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
Gold
Member

Откуда: Харьков
Сообщений: 2947
Список - это то, на что надо обратить внимание. Ясное дело что если например СУБД не имеет провайдера, то её поддержка также невозможно. Но это вроде и так понятно :-)

По поводу возможностей. Я стараюсь всё делать расширяемым через наследование коассов и фабрик.
Например для генерации SQL у меня есть StandardCommandXxxGenerator, от которого есть наследники если надо. Доступ к генераторам команд осуществляется через фабрики генераторов команд, которые для каждой СУБД разные и естественно занают правильные генераторы. Выбор фабрики осуществляется в конфигурационном файле.

Что до обработки нуллов - по моему это вопросы провайдера.

А вобще у меня слишком мало знаний в плане других баз (например я очень давно и мало работал с ораклом, а с другими вобще можно сказать ен работал). Так что вполне возможно что на каком-то даже современном сервере мои концепции не прокатят. Этого я не знаю и знать не могу. Но опять же, поскольку код мой, то я всегда смогу сделать рефакторинг... Для меня это перевешивает все остальные недостатки.
31 янв 07, 19:31    [3721995]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67469
Блог
ALEXBOR
Хотелось бы обсудить тему по поддержке в разрабатываемом приложении нескольких СУБД

Тема большая, я бы даже сказал, неподъемная. Практически слишком много различных вариантов по задачам, архитектурам и требованиям.

Все нижеследующее - на правах личного мнения без подробного обоснования, пардон, просто нет времени. Я бы выделил несколько моментов.

Во-первых, попытка остаться в рамках стандарта либо иным путем писать одинаковый или почти одинаковый код обречена на провал, многократно подробно обсуждалось, подходит только для Hello world.

Во-вторых, организация взамодействия "чего-нибудь" с сервером БД. "Что-нибудь" - это клиент или сервер приложений. Очевидно, что нужна та или иная абстрагирующая прослойка, отделяющая "детали взаимодействия с конкретным сервером" от всего остального. Я уверен, что с ростом требований стандартные решения, такие как JDBC, ADO или стандартные ORM-ы, перестанут удовлетворять в таком качестве. Практически сразу стоит закладываться на то, что эту прослойку либо писать самим, либо брать более-менее подходящую и вдумчиво дорабатывать.

В-третьих, если пишется большая система, мы имеем противоречие между скоростью и стоимостью разработки (и желанием писать универсальный код) и эффективностью. Отсюда следует, что вышеназванная прослойка должна как обладать некими метавозможностями, возможностью задать код в универсальном виде с генерацией SQL под конкретную СУБД, так и возможностью явно задать код именно для этой операции в этой СУБД. Это позволяет идти стандартным путем "сначала напишем, потом оптимизируем узкие места".

В-четвертых, проблемным местом в такой системе является серверная логика. В связи с этим часто рассматривают вариант трехзвенки, если он принимается, достаточно вышесказанного, поэтому далее будем говорить о двузвенной системе.

В принципе возможен отказ от серверных процедур. Это не обязательно приведет к ужасам "все на клиенте", поскольку клиент вполне может отправлять на сервер скрипты, по сути те же процедуры, но не хранимые, а выполняемые на ходу. Однако, это все же заметно хуже хранимых процедур - дополнительные разборы, компиляции, проблемы с версионностью итп. Так что давайте о процедурах.

Единого языка создания ХП сейчас нет и в обозримом будущем не будет. На эту роль могут претендовать ява-сишарп, выполняемые на сервере, но это вряд ли выход в силу эффективности; им придется либо долго и мучительно делать то, что можно было бы сделать одной sql-командой, либо работать "вызывалкой SQL-ей", и тогда снова встанут вопросы универсального кода итп. Особого цимеса в этом пути я не вижу.

Таким образом, нам остается либо писать хранимки индивидуально под каждый сервер, либо снова воспользоваться прослойкой - научить ее генерировать ХП под нужный сервер. Именно это мне кажется наиболее перспективным направлением; мы описываем ХП точно так же, в метатерминах, на своем языке, генерим код под сервер и имеем возможность оптимизировать его, задавая тело ХП на нужном языке.

Что мы получим в итоге. В итоге мы получим довольно гибкий механизм, в котором можем балансировать стоимость-качество так, как оптимально в конкретном случае. Работы, конечно, много, но в случае достаточно большой системы она оправдается, и полагаю, будет оптимальной по итоговому эффекту.
31 янв 07, 20:09    [3722111]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
1024
Member

Откуда: Нижний Новгород
Сообщений: 14267
1ц работает с дбф и мсскл, сейчас и с постгресом. Ничего сложного.
1 фев 07, 00:08    [3722718]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
Yo.!
Guest
1024
1ц работает с дбф и мсскл, сейчас и с постгресом. Ничего сложного.

великолепный пример, хотите увидеть пример как делать нельзя посмотрите 1С :)
1 фев 07, 00:33    [3722750]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
1024
1ц работает с дбф и мсскл, сейчас и с постгресом. Ничего сложного.


Ага, но КАК она с ними работает !!!
1 фев 07, 08:47    [3723122]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
evostr
Member

Откуда: Екатеринбург
Сообщений: 1285
1024
1ц работает с дбф и мсскл, сейчас и с постгресом. Ничего сложного.

Говорят теперь даже с DB2 будет
1 фев 07, 08:52    [3723134]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
ALEXBOR
Member

Откуда:
Сообщений: 80
softwarer спасибо за подробный ответ...

softwarer
Таким образом, нам остается либо писать хранимки индивидуально под каждый сервер, либо снова воспользоваться прослойкой - научить ее генерировать ХП под нужный сервер. Именно это мне кажется наиболее перспективным направлением; мы описываем ХП точно так же, в метатерминах, на своем языке, генерим код под сервер и имеем возможность оптимизировать его, задавая тело ХП на нужном языке.

А можно привести здесь небольшой, но конкретный пример. Не совсем понятно как это делается, особенно вот это "мы описываем ХП точно так же, в метатерминах, на своем языке, генерим код под сервер и имеем возможность оптимизировать его, задавая тело ХП на нужном языке".
То же самое, скорее всего, делают и ORM-ы, но повторяю, мы не знаем как...
Не проще ли воспользоваться готовым решением. Понятно, что .NET довольно молодая технология и качественных ORM, удовлетворяющих хотя бы минимальным критериям найти трудно. С другой стороны есть пример Hibernate под Java, на котором довольно успешно реализовано большое количество проектов...
1 фев 07, 10:18    [3723589]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67469
Блог
ALEXBOR
А можно привести здесь небольшой, но конкретный пример. Не совсем понятно как это делается, особенно вот это "мы описываем ХП точно так же, в метатерминах, на своем языке, генерим код под сервер и имеем возможность оптимизировать его, задавая тело ХП на нужном языке".

Хм, боюсь небольшого примера не выйдет, все будет достаточно громоздко. Собственно, все примерно так же, как с генерацией SQL. Прежде всего, "остальные уровни" должны знать, что существует процедура, например, ДвижениеТовара с параметрами (что,откуда,куда,сколько). Это дело абстрактной прослойки. Дальше, мы описываем эту процедуру в "наших" терминах. Для этого как правило придумывают собственный язык, получится что-нибудь типа такого:

[insertfunction] [СоздатьДвижениеТовара] [параметр=что,ccылка:Товары] [параметры=откуда,ссылка:МестоХранения]......
[check] [ДопустимоЛиДвижение] [что=что] [откуда=откуда] [куда=куда]
[check] [ЗарезервироватьДляОперации] [товар=что] [склад=откуда]
[insert] [ДвижениеТовара] [поле=значение] [поле=значение] [результат=id]

Теперь, если запустим генерацию, для Oracle получим что-нибудь типа

create or replace function СоздатьДвижениеТовара ( что in Товары.id%type,
откуда in МестоХранения.id%type ... ) return ДвижениеТовара.id%type is
result ДвижениеТовара.id%type ;
begin
savepoint СоздатьДвижениеТовара_1 ;
ДопустимоЛиДвижение ( что => что, откуда => откуда ) ;
ЗарезервироватьДляОперации ( товар => что, склад => откуда ) ;
insert into ДвижениеТовара .... returning id into result ;
return result ;
exception
when others then
SaveErrorStack ;
rollback to savepoint СоздатьДвижениеТовара_1 ;
raise ;
end ;

Наконец, если сгенерированное тело нас по каким-то причинам не устраивает, мы должны иметь возможность указать: для этой процедуры должен быть вот такой оракловый код. И тогда инсталлятор просто применит готовое тело.

ALEXBOR
То же самое, скорее всего, делают и ORM-ы, но повторяю, мы не знаем как...
Не проще ли воспользоваться готовым решением. Понятно, что .NET довольно молодая технология и качественных ORM, удовлетворяющих хотя бы минимальным критериям найти трудно. С другой стороны есть пример Hibernate под Java, на котором довольно успешно реализовано большое количество проектов...

"Проще" не всегда значит "лучше". Повторю изначальное утверждение: я совершенно уверен в том, что чем больше проект, тем меньше будут подходить стандартные решения; потребуется либо серьезно дорабатывать существующие и открытые, либо делать свое с нуля.

Что касается Hibernate - есть парень, который пишет на яве и регулярно советуется у меня по поводу взаимодействия с ораклом. Так вот, он довольно часто жалуется на то, что Hibernate либо не поддерживает, либо неудачно поддерживает то, что я советую ему использовать. При том что проект у него довольно скромный, онлайновая игрушка. Сейчас, разумеется, появятся толпы желающих рассказать про умение готовить. Не знаю. Транслировать его претензии я не готов, гибернейтом не интересуюсь и не запоминал. Парень толковый и вдумчивый, дурацких ошибок он не делает.
1 фев 07, 12:31    [3724808]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
Gold
Member

Откуда: Харьков
Сообщений: 2947
2 ALEXBOR:

Между прочим Hibernate и под .NET есть, называется NHibernate.
1 фев 07, 12:36    [3724861]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
ALEXBOR
Member

Откуда:
Сообщений: 80
Gold
Между прочим Hibernate и под .NET есть, называется NHibernate

Да, я в курсе..., но он гораздо слабее своего Java-собрата. .NET, все таки, боле молодая технология...

softwarer спасибо. Я Вашу идею понял. Будем думать насколько она реально реализуема с нашими ресурсами...
Жаль, что никто не работал с каким-нибудь ORM под .NET...):
Что ж, мы, наверное, будем первыми в рамках данного сообщества. Обещаю поделиться впечатлениями...:)
1 фев 07, 13:05    [3725125]     Ответить | Цитировать Сообщить модератору
 Re: Поддержка нескольких СУБД  [new]
1024
Member

Откуда: Нижний Новгород
Сообщений: 14267
автор
Ага, но КАК она с ними работает !!!


да примерно так же как и другие. Виндовс же гавном называет не потому что оно плохое а потому что оно у всех. Хорошо там где нас нет.
1 фев 07, 13:14    [3725196]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить