Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Поддержка нескольких СУБД / 25 сообщений из 30, страница 1 из 2
30.01.2007, 10:55
    #34291891
ALEXBOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
Всем доброго времени суток!
Хотелось бы обсудить тему по поддержке в разрабатываемом приложении нескольких СУБД (например, Oracle, SQL Server, DB2 и MySQL). Очень хотелось бы узнать мнение сообщества по этому поводу. Какой подход лучше (использование ORM, разработка серверного кода для каждой СУБД, использование только SQL 92...)? Достоинства и недостатки каждого подхода? Ссылки на документацию и литературу по этому поводу...
К сожалению в поиске по форуму ничего подходящего не нашел. Может плохо искал..:)
Заранее всем спасибо.
...
Рейтинг: 0 / 0
30.01.2007, 11:15
    #34291978
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
Боюсь, что использование стандарта SQL ничего не даст, поскольку разный уровень поддержки + реализация своих вещей в каждой СУБД + разные системные представления (возможно, что-то еще забыл). На мой взгляд - разработка серверного кода для каждой СУБД, хотя при этом теряется удобства реализации некоторых функций на клиенте (сравнение серверной реализации против клиентской реализации уже было)
...
Рейтинг: 0 / 0
30.01.2007, 11:22
    #34292000
ALEXBOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
В принципе, выбор иде между ORM и разработкой серверного кода для каждой СУБД. Забыл добавить, что речь идет о web-приложении на ASP.NET 2.0.
В частности, очень хотелось попробовать ORM под .NET...
...
Рейтинг: 0 / 0
30.01.2007, 11:49
    #34292104
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
Мы, к примеру, свою ORM пишем... Если что-то не получается, то винить некого :-)
...
Рейтинг: 0 / 0
30.01.2007, 11:57
    #34292142
ALEXBOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
авторМы, к примеру, свою ORM пишем... Если что-то не получается, то винить некого :-)
Если не секрет, чем не устраивают решения предлагаемые на рынке?
...
Рейтинг: 0 / 0
30.01.2007, 15:49
    #34293366
Dmitriy Ivanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
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
...
Рейтинг: 0 / 0
30.01.2007, 16:13
    #34293464
ALEXBOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
Реализовывать объемное web-приложение таким способом не очень рационально... ИМХО, тем более для этого нет соответствующих ресурсов и есть довольно жесткие сроки.
Скажем, если сузить спектр и рассматривать реализацию только в парадигне .NET (естественно для реализации некоторых задач C/C++ никто не отменял...)
...
Рейтинг: 0 / 0
30.01.2007, 17:35
    #34293868
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
2 ALEXBOR

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

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

К тому же в случае проблем я всегда могу пофиксить свои ошибки или дописать новую функциональность. Разбираться же в чужих кодах мне очень сложно.
...
Рейтинг: 0 / 0
30.01.2007, 17:57
    #34293933
ALEXBOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
2 Gold

Что ж, это тоже вариант, особенно, если система унаследованная...
Просто при большом объеме функциональности, которую необходимо реализовать написание своего ORM может быть делом не подъемным...
Ну, все равно спасибо за ответ. Будем и его держать в голове...:)
...
Рейтинг: 0 / 0
30.01.2007, 20:00
    #34294209
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
Ну да, список того что надо сделать у меня огого. С другой стороны это вторая версия где были учтены недочёты первой и всё намного грамотрее сделано.
Вон мои коллеги щас разбираются с DLinq. Будем посмотреть что у них получится. Я по этому поводу скептически настроен, поскольку знаю как майкрософт любит неявно затачивать свои продукты под MS SQL. Потом окажется что например этот DLinq не сможет мапить объекты на процедуры, функции, блоки SQL всевозможные или подымать их их подзапросов, процедур, функций или ещё чего-то что у МС не так реализовано. Автоинкременты свои дебильные везде пихают. Я уже с ними запарился...
Поэтому однозначно лучше самому всё делать.
...
Рейтинг: 0 / 0
30.01.2007, 20:13
    #34294235
Dmitriy Ivanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
A> Автор: ALEXBOR
A> Реализовывать объемное web-приложение таким способом не очень
A> рационально... ИМХО, тем более для этого нет соответствующих
A> ресурсов и есть довольно жесткие сроки. Скажем, если сузить спектр и
A> рассматривать реализацию только в парадигне .NET (естественно для
A> реализации некоторых задач C/C++ никто не отменял...)

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



Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
31.01.2007, 10:53
    #34295198
ALEXBOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
Просто у нас есть возможность опробовать два варианта реализации...
На форуме уже обсуждалась тема ORM /topic/85698&pg=-1, но только в контексте общего применения, а не решения задачи поддержки нескольких СУБД. Может кто-то пробовал использовать ORM под .NET? Поделитесь впечатлениями...
Второй вариант - это разработка серверного кода под каждую СУБД (возможно, по общим правилам описанных Джо Селко). Здесь, ИМХО только вопрос наличия ресурсов...
Что касается заточенности MS под SQL Server, так это не новость...:) Это ни чему особо не мешает. Мы, например, с успехом использовали оракловый провайдер ADO для написания приложения ASP.NET 2.0 + Oracle 10g.
...
Рейтинг: 0 / 0
31.01.2007, 16:34
    #34296868
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
2 ALEXBOR

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

По поводу написания кода под разные СУБД. Я на другое закладываюсь. Есть некие минимальные возможности СУБД и провайдеров, на которые я закладываюсь. Например:
1) СУБД должна понимать SEWLECT FROM SELECT
2) СУБД должна уметь делать SELECT * FROM SP/UDF ()
3) Желательно чтобы СУБД поддерживала представления
4) Должен быть способ получения сгенерированного ID в одной команде или пакете команд
...
Рейтинг: 0 / 0
31.01.2007, 17:56
    #34297231
ALEXBOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
Gold
1) СУБД должна понимать SEWLECT FROM SELECT
2) СУБД должна уметь делать SELECT * FROM SP/UDF ()
3) Желательно чтобы СУБД поддерживала представления
4) Должен быть способ получения сгенерированного ID в одной команде или пакете команд
Это очень короткий список... (возможно Вы привели далеко не весь...). Многие ORM имеют гораздо больше возможностей..., единственный их недостаток - это то, как они это делают.
К тому же есть масса вопросов даже при написании SQL-запросов, например, обработка Null значений в Oracle и SQL Server, хотя обе СУБД соответствую стандарту ANSI, но делают это по-разному...
...
Рейтинг: 0 / 0
31.01.2007, 19:31
    #34297463
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
Список - это то, на что надо обратить внимание. Ясное дело что если например СУБД не имеет провайдера, то её поддержка также невозможно. Но это вроде и так понятно :-)

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

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

А вобще у меня слишком мало знаний в плане других баз (например я очень давно и мало работал с ораклом, а с другими вобще можно сказать ен работал). Так что вполне возможно что на каком-то даже современном сервере мои концепции не прокатят. Этого я не знаю и знать не могу. Но опять же, поскольку код мой, то я всегда смогу сделать рефакторинг... Для меня это перевешивает все остальные недостатки.
...
Рейтинг: 0 / 0
31.01.2007, 20:09
    #34297516
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
ALEXBORХотелось бы обсудить тему по поддержке в разрабатываемом приложении нескольких СУБД
Тема большая, я бы даже сказал, неподъемная. Практически слишком много различных вариантов по задачам, архитектурам и требованиям.

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

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

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

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

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

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

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

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

Что мы получим в итоге. В итоге мы получим довольно гибкий механизм, в котором можем балансировать стоимость-качество так, как оптимально в конкретном случае. Работы, конечно, много, но в случае достаточно большой системы она оправдается, и полагаю, будет оптимальной по итоговому эффекту.
...
Рейтинг: 0 / 0
01.02.2007, 00:08
    #34297739
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
1ц работает с дбф и мсскл, сейчас и с постгресом. Ничего сложного.
...
Рейтинг: 0 / 0
01.02.2007, 00:33
    #34297753
Yo.!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
10241ц работает с дбф и мсскл, сейчас и с постгресом. Ничего сложного.
великолепный пример, хотите увидеть пример как делать нельзя посмотрите 1С :)
...
Рейтинг: 0 / 0
01.02.2007, 08:47
    #34297982
Gluk (Kazan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
10241ц работает с дбф и мсскл, сейчас и с постгресом. Ничего сложного.

Ага, но КАК она с ними работает !!!
...
Рейтинг: 0 / 0
01.02.2007, 08:52
    #34297991
evostr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
10241ц работает с дбф и мсскл, сейчас и с постгресом. Ничего сложного.
Говорят теперь даже с DB2 будет
...
Рейтинг: 0 / 0
01.02.2007, 10:18
    #34298223
ALEXBOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
softwarer спасибо за подробный ответ...

softwarerТаким образом, нам остается либо писать хранимки индивидуально под каждый сервер, либо снова воспользоваться прослойкой - научить ее генерировать ХП под нужный сервер. Именно это мне кажется наиболее перспективным направлением; мы описываем ХП точно так же, в метатерминах, на своем языке, генерим код под сервер и имеем возможность оптимизировать его, задавая тело ХП на нужном языке.
А можно привести здесь небольшой, но конкретный пример. Не совсем понятно как это делается, особенно вот это "мы описываем ХП точно так же, в метатерминах, на своем языке, генерим код под сервер и имеем возможность оптимизировать его, задавая тело ХП на нужном языке".
То же самое, скорее всего, делают и ORM-ы, но повторяю, мы не знаем как...
Не проще ли воспользоваться готовым решением. Понятно, что .NET довольно молодая технология и качественных ORM, удовлетворяющих хотя бы минимальным критериям найти трудно. С другой стороны есть пример Hibernate под Java, на котором довольно успешно реализовано большое количество проектов...
...
Рейтинг: 0 / 0
01.02.2007, 12:31
    #34298814
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
ALEXBORА можно привести здесь небольшой, но конкретный пример. Не совсем понятно как это делается, особенно вот это "мы описываем ХП точно так же, в метатерминах, на своем языке, генерим код под сервер и имеем возможность оптимизировать его, задавая тело ХП на нужном языке".
Хм, боюсь небольшого примера не выйдет, все будет достаточно громоздко. Собственно, все примерно так же, как с генерацией SQL. Прежде всего, "остальные уровни" должны знать, что существует процедура, например, ДвижениеТовара с параметрами (что,откуда,куда,сколько). Это дело абстрактной прослойки. Дальше, мы описываем эту процедуру в "наших" терминах. Для этого как правило придумывают собственный язык, получится что-нибудь типа такого:

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

Теперь, если запустим генерацию, для Oracle получим что-нибудь типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
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 либо не поддерживает, либо неудачно поддерживает то, что я советую ему использовать. При том что проект у него довольно скромный, онлайновая игрушка. Сейчас, разумеется, появятся толпы желающих рассказать про умение готовить. Не знаю. Транслировать его претензии я не готов, гибернейтом не интересуюсь и не запоминал. Парень толковый и вдумчивый, дурацких ошибок он не делает.
...
Рейтинг: 0 / 0
01.02.2007, 12:36
    #34298849
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
2 ALEXBOR:

Между прочим Hibernate и под .NET есть, называется NHibernate.
...
Рейтинг: 0 / 0
01.02.2007, 13:05
    #34298953
ALEXBOR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
GoldМежду прочим Hibernate и под .NET есть, называется NHibernate
Да, я в курсе..., но он гораздо слабее своего Java-собрата. .NET, все таки, боле молодая технология...

softwarer спасибо. Я Вашу идею понял. Будем думать насколько она реально реализуема с нашими ресурсами...
Жаль, что никто не работал с каким-нибудь ORM под .NET...):
Что ж, мы, наверное, будем первыми в рамках данного сообщества. Обещаю поделиться впечатлениями...:)
...
Рейтинг: 0 / 0
01.02.2007, 13:14
    #34298991
1024
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка нескольких СУБД
авторАга, но КАК она с ними работает !!!

да примерно так же как и другие. Виндовс же гавном называет не потому что оно плохое а потому что оно у всех. Хорошо там где нас нет.
...
Рейтинг: 0 / 0
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Поддержка нескольких СУБД / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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