
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
30.01.2007, 10:55
|
|||
|---|---|---|---|
|
|||
Поддержка нескольких СУБД |
|||
|
#18+
Всем доброго времени суток! Хотелось бы обсудить тему по поддержке в разрабатываемом приложении нескольких СУБД (например, Oracle, SQL Server, DB2 и MySQL). Очень хотелось бы узнать мнение сообщества по этому поводу. Какой подход лучше (использование ORM, разработка серверного кода для каждой СУБД, использование только SQL 92...)? Достоинства и недостатки каждого подхода? Ссылки на документацию и литературу по этому поводу... К сожалению в поиске по форуму ничего подходящего не нашел. Может плохо искал..:) Заранее всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2007, 11:15
|
|||
|---|---|---|---|
Поддержка нескольких СУБД |
|||
|
#18+
Боюсь, что использование стандарта SQL ничего не даст, поскольку разный уровень поддержки + реализация своих вещей в каждой СУБД + разные системные представления (возможно, что-то еще забыл). На мой взгляд - разработка серверного кода для каждой СУБД, хотя при этом теряется удобства реализации некоторых функций на клиенте (сравнение серверной реализации против клиентской реализации уже было) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2007, 11:22
|
|||
|---|---|---|---|
|
|||
Поддержка нескольких СУБД |
|||
|
#18+
В принципе, выбор иде между ORM и разработкой серверного кода для каждой СУБД. Забыл добавить, что речь идет о web-приложении на ASP.NET 2.0. В частности, очень хотелось попробовать ORM под .NET... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2007, 11:49
|
|||
|---|---|---|---|
Поддержка нескольких СУБД |
|||
|
#18+
Мы, к примеру, свою ORM пишем... Если что-то не получается, то винить некого :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2007, 11:57
|
|||
|---|---|---|---|
|
|||
Поддержка нескольких СУБД |
|||
|
#18+
авторМы, к примеру, свою ORM пишем... Если что-то не получается, то винить некого :-) Если не секрет, чем не устраивают решения предлагаемые на рынке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2007, 15:49
|
|||
|---|---|---|---|
|
|||
Поддержка нескольких СУБД |
|||
|
#18+
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.01.2007, 16:13
|
|||
|---|---|---|---|
|
|||
Поддержка нескольких СУБД |
|||
|
#18+
Реализовывать объемное web-приложение таким способом не очень рационально... ИМХО, тем более для этого нет соответствующих ресурсов и есть довольно жесткие сроки. Скажем, если сузить спектр и рассматривать реализацию только в парадигне .NET (естественно для реализации некоторых задач C/C++ никто не отменял...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2007, 17:35
|
|||
|---|---|---|---|
Поддержка нескольких СУБД |
|||
|
#18+
2 ALEXBOR Потому как у нас круче :-) На самом деле может и не круче, но существующие системы довольно старые, а наша изначально использовала такие вкусности как нуловые типы, женерики, анонимные делегаты и т.п. К тому же в случае проблем я всегда могу пофиксить свои ошибки или дописать новую функциональность. Разбираться же в чужих кодах мне очень сложно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2007, 17:57
|
|||
|---|---|---|---|
|
|||
Поддержка нескольких СУБД |
|||
|
#18+
2 Gold Что ж, это тоже вариант, особенно, если система унаследованная... Просто при большом объеме функциональности, которую необходимо реализовать написание своего ORM может быть делом не подъемным... Ну, все равно спасибо за ответ. Будем и его держать в голове...:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2007, 20:00
|
|||
|---|---|---|---|
Поддержка нескольких СУБД |
|||
|
#18+
Ну да, список того что надо сделать у меня огого. С другой стороны это вторая версия где были учтены недочёты первой и всё намного грамотрее сделано. Вон мои коллеги щас разбираются с DLinq. Будем посмотреть что у них получится. Я по этому поводу скептически настроен, поскольку знаю как майкрософт любит неявно затачивать свои продукты под MS SQL. Потом окажется что например этот DLinq не сможет мапить объекты на процедуры, функции, блоки SQL всевозможные или подымать их их подзапросов, процедур, функций или ещё чего-то что у МС не так реализовано. Автоинкременты свои дебильные везде пихают. Я уже с ними запарился... Поэтому однозначно лучше самому всё делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.01.2007, 20:13
|
|||
|---|---|---|---|
|
|||
Поддержка нескольких СУБД |
|||
|
#18+
A> Автор: ALEXBOR A> Реализовывать объемное web-приложение таким способом не очень A> рационально... ИМХО, тем более для этого нет соответствующих A> ресурсов и есть довольно жесткие сроки. Скажем, если сузить спектр и A> рассматривать реализацию только в парадигне .NET (естественно для A> реализации некоторых задач C/C++ никто не отменял...) Все зависит от знания языка и инструментария. Кому ближе .NET, кому еще что-нибудь. Разумеется, чем ниже уровень языка, тем меньше шансов. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 10:53
|
|||
|---|---|---|---|
|
|||
Поддержка нескольких СУБД |
|||
|
#18+
Просто у нас есть возможность опробовать два варианта реализации... На форуме уже обсуждалась тема ORM /topic/85698&pg=-1, но только в контексте общего применения, а не решения задачи поддержки нескольких СУБД. Может кто-то пробовал использовать ORM под .NET? Поделитесь впечатлениями... Второй вариант - это разработка серверного кода под каждую СУБД (возможно, по общим правилам описанных Джо Селко). Здесь, ИМХО только вопрос наличия ресурсов... Что касается заточенности MS под SQL Server, так это не новость...:) Это ни чему особо не мешает. Мы, например, с успехом использовали оракловый провайдер ADO для написания приложения ASP.NET 2.0 + Oracle 10g. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 16:34
|
|||
|---|---|---|---|
Поддержка нескольких СУБД |
|||
|
#18+
2 ALEXBOR Ну у меня есть опыт использования своей ORM. Как минимум я пишу её с учётом того что я всегда смогу сменить MS SQL на FireBird. Как писать лучше - это вобще вопрос крайне обширный и сложный. Я так полагаю что для этого нужно знать паттерны и не плохо бы прочитать книгу "Архитектура корпоративных приложений" Фаулера кажется. Я честно признаться ни того ни другого толком не читал. У меня щас на всё своё видение есть. Но прочитать собираюсь обязательно. По поводу написания кода под разные СУБД. Я на другое закладываюсь. Есть некие минимальные возможности СУБД и провайдеров, на которые я закладываюсь. Например: 1) СУБД должна понимать SEWLECT FROM SELECT 2) СУБД должна уметь делать SELECT * FROM SP/UDF () 3) Желательно чтобы СУБД поддерживала представления 4) Должен быть способ получения сгенерированного ID в одной команде или пакете команд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 17:56
|
|||
|---|---|---|---|
|
|||
Поддержка нескольких СУБД |
|||
|
#18+
Gold 1) СУБД должна понимать SEWLECT FROM SELECT 2) СУБД должна уметь делать SELECT * FROM SP/UDF () 3) Желательно чтобы СУБД поддерживала представления 4) Должен быть способ получения сгенерированного ID в одной команде или пакете команд Это очень короткий список... (возможно Вы привели далеко не весь...). Многие ORM имеют гораздо больше возможностей..., единственный их недостаток - это то, как они это делают. К тому же есть масса вопросов даже при написании SQL-запросов, например, обработка Null значений в Oracle и SQL Server, хотя обе СУБД соответствую стандарту ANSI, но делают это по-разному... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 19:31
|
|||
|---|---|---|---|
Поддержка нескольких СУБД |
|||
|
#18+
Список - это то, на что надо обратить внимание. Ясное дело что если например СУБД не имеет провайдера, то её поддержка также невозможно. Но это вроде и так понятно :-) По поводу возможностей. Я стараюсь всё делать расширяемым через наследование коассов и фабрик. Например для генерации SQL у меня есть StandardCommandXxxGenerator, от которого есть наследники если надо. Доступ к генераторам команд осуществляется через фабрики генераторов команд, которые для каждой СУБД разные и естественно занают правильные генераторы. Выбор фабрики осуществляется в конфигурационном файле. Что до обработки нуллов - по моему это вопросы провайдера. А вобще у меня слишком мало знаний в плане других баз (например я очень давно и мало работал с ораклом, а с другими вобще можно сказать ен работал). Так что вполне возможно что на каком-то даже современном сервере мои концепции не прокатят. Этого я не знаю и знать не могу. Но опять же, поскольку код мой, то я всегда смогу сделать рефакторинг... Для меня это перевешивает все остальные недостатки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2007, 20:09
|
|||
|---|---|---|---|
Поддержка нескольких СУБД |
|||
|
#18+
ALEXBORХотелось бы обсудить тему по поддержке в разрабатываемом приложении нескольких СУБД Тема большая, я бы даже сказал, неподъемная. Практически слишком много различных вариантов по задачам, архитектурам и требованиям. Все нижеследующее - на правах личного мнения без подробного обоснования, пардон, просто нет времени. Я бы выделил несколько моментов. Во-первых, попытка остаться в рамках стандарта либо иным путем писать одинаковый или почти одинаковый код обречена на провал, многократно подробно обсуждалось, подходит только для Hello world. Во-вторых, организация взамодействия "чего-нибудь" с сервером БД. "Что-нибудь" - это клиент или сервер приложений. Очевидно, что нужна та или иная абстрагирующая прослойка, отделяющая "детали взаимодействия с конкретным сервером" от всего остального. Я уверен, что с ростом требований стандартные решения, такие как JDBC, ADO или стандартные ORM-ы, перестанут удовлетворять в таком качестве. Практически сразу стоит закладываться на то, что эту прослойку либо писать самим, либо брать более-менее подходящую и вдумчиво дорабатывать. В-третьих, если пишется большая система, мы имеем противоречие между скоростью и стоимостью разработки (и желанием писать универсальный код) и эффективностью. Отсюда следует, что вышеназванная прослойка должна как обладать некими метавозможностями, возможностью задать код в универсальном виде с генерацией SQL под конкретную СУБД, так и возможностью явно задать код именно для этой операции в этой СУБД. Это позволяет идти стандартным путем "сначала напишем, потом оптимизируем узкие места". В-четвертых, проблемным местом в такой системе является серверная логика. В связи с этим часто рассматривают вариант трехзвенки, если он принимается, достаточно вышесказанного, поэтому далее будем говорить о двузвенной системе. В принципе возможен отказ от серверных процедур. Это не обязательно приведет к ужасам "все на клиенте", поскольку клиент вполне может отправлять на сервер скрипты, по сути те же процедуры, но не хранимые, а выполняемые на ходу. Однако, это все же заметно хуже хранимых процедур - дополнительные разборы, компиляции, проблемы с версионностью итп. Так что давайте о процедурах. Единого языка создания ХП сейчас нет и в обозримом будущем не будет. На эту роль могут претендовать ява-сишарп, выполняемые на сервере, но это вряд ли выход в силу эффективности; им придется либо долго и мучительно делать то, что можно было бы сделать одной sql-командой, либо работать "вызывалкой SQL-ей", и тогда снова встанут вопросы универсального кода итп. Особого цимеса в этом пути я не вижу. Таким образом, нам остается либо писать хранимки индивидуально под каждый сервер, либо снова воспользоваться прослойкой - научить ее генерировать ХП под нужный сервер. Именно это мне кажется наиболее перспективным направлением; мы описываем ХП точно так же, в метатерминах, на своем языке, генерим код под сервер и имеем возможность оптимизировать его, задавая тело ХП на нужном языке. Что мы получим в итоге. В итоге мы получим довольно гибкий механизм, в котором можем балансировать стоимость-качество так, как оптимально в конкретном случае. Работы, конечно, много, но в случае достаточно большой системы она оправдается, и полагаю, будет оптимальной по итоговому эффекту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.02.2007, 00:08
|
|||
|---|---|---|---|
Поддержка нескольких СУБД |
|||
|
#18+
1ц работает с дбф и мсскл, сейчас и с постгресом. Ничего сложного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.02.2007, 00:33
|
|||
|---|---|---|---|
|
|||
Поддержка нескольких СУБД |
|||
|
#18+
10241ц работает с дбф и мсскл, сейчас и с постгресом. Ничего сложного. великолепный пример, хотите увидеть пример как делать нельзя посмотрите 1С :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.02.2007, 08:47
|
|||
|---|---|---|---|
|
|||
Поддержка нескольких СУБД |
|||
|
#18+
10241ц работает с дбф и мсскл, сейчас и с постгресом. Ничего сложного. Ага, но КАК она с ними работает !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.02.2007, 08:52
|
|||
|---|---|---|---|
Поддержка нескольких СУБД |
|||
|
#18+
10241ц работает с дбф и мсскл, сейчас и с постгресом. Ничего сложного. Говорят теперь даже с DB2 будет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.02.2007, 10:18
|
|||
|---|---|---|---|
|
|||
Поддержка нескольких СУБД |
|||
|
#18+
softwarer спасибо за подробный ответ... softwarerТаким образом, нам остается либо писать хранимки индивидуально под каждый сервер, либо снова воспользоваться прослойкой - научить ее генерировать ХП под нужный сервер. Именно это мне кажется наиболее перспективным направлением; мы описываем ХП точно так же, в метатерминах, на своем языке, генерим код под сервер и имеем возможность оптимизировать его, задавая тело ХП на нужном языке. А можно привести здесь небольшой, но конкретный пример. Не совсем понятно как это делается, особенно вот это "мы описываем ХП точно так же, в метатерминах, на своем языке, генерим код под сервер и имеем возможность оптимизировать его, задавая тело ХП на нужном языке". То же самое, скорее всего, делают и ORM-ы, но повторяю, мы не знаем как... Не проще ли воспользоваться готовым решением. Понятно, что .NET довольно молодая технология и качественных ORM, удовлетворяющих хотя бы минимальным критериям найти трудно. С другой стороны есть пример Hibernate под Java, на котором довольно успешно реализовано большое количество проектов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.02.2007, 12:31
|
|||
|---|---|---|---|
Поддержка нескольких СУБД |
|||
|
#18+
ALEXBORА можно привести здесь небольшой, но конкретный пример. Не совсем понятно как это делается, особенно вот это "мы описываем ХП точно так же, в метатерминах, на своем языке, генерим код под сервер и имеем возможность оптимизировать его, задавая тело ХП на нужном языке". Хм, боюсь небольшого примера не выйдет, все будет достаточно громоздко. Собственно, все примерно так же, как с генерацией SQL. Прежде всего, "остальные уровни" должны знать, что существует процедура, например, ДвижениеТовара с параметрами (что,откуда,куда,сколько). Это дело абстрактной прослойки. Дальше, мы описываем эту процедуру в "наших" терминах. Для этого как правило придумывают собственный язык, получится что-нибудь типа такого: Код: plaintext 1. 2. 3. Теперь, если запустим генерацию, для Oracle получим что-нибудь типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Наконец, если сгенерированное тело нас по каким-то причинам не устраивает, мы должны иметь возможность указать: для этой процедуры должен быть вот такой оракловый код. И тогда инсталлятор просто применит готовое тело. ALEXBORТо же самое, скорее всего, делают и ORM-ы, но повторяю, мы не знаем как... Не проще ли воспользоваться готовым решением. Понятно, что .NET довольно молодая технология и качественных ORM, удовлетворяющих хотя бы минимальным критериям найти трудно. С другой стороны есть пример Hibernate под Java, на котором довольно успешно реализовано большое количество проектов... "Проще" не всегда значит "лучше". Повторю изначальное утверждение: я совершенно уверен в том, что чем больше проект, тем меньше будут подходить стандартные решения; потребуется либо серьезно дорабатывать существующие и открытые, либо делать свое с нуля. Что касается Hibernate - есть парень, который пишет на яве и регулярно советуется у меня по поводу взаимодействия с ораклом. Так вот, он довольно часто жалуется на то, что Hibernate либо не поддерживает, либо неудачно поддерживает то, что я советую ему использовать. При том что проект у него довольно скромный, онлайновая игрушка. Сейчас, разумеется, появятся толпы желающих рассказать про умение готовить. Не знаю. Транслировать его претензии я не готов, гибернейтом не интересуюсь и не запоминал. Парень толковый и вдумчивый, дурацких ошибок он не делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.02.2007, 12:36
|
|||
|---|---|---|---|
Поддержка нескольких СУБД |
|||
|
#18+
2 ALEXBOR: Между прочим Hibernate и под .NET есть, называется NHibernate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
01.02.2007, 13:05
|
|||
|---|---|---|---|
|
|||
Поддержка нескольких СУБД |
|||
|
#18+
GoldМежду прочим Hibernate и под .NET есть, называется NHibernate Да, я в курсе..., но он гораздо слабее своего Java-собрата. .NET, все таки, боле молодая технология... softwarer спасибо. Я Вашу идею понял. Будем думать насколько она реально реализуема с нашими ресурсами... Жаль, что никто не работал с каким-нибудь ORM под .NET...): Что ж, мы, наверное, будем первыми в рамках данного сообщества. Обещаю поделиться впечатлениями...:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=35&mobile=1&tid=1553378]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 406ms |

| 0 / 0 |
