X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Поддержка нескольких БД
Alexander
сообщение 2008-12-17, 18:24
Сообщение #1
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 262
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Благодаря KrasivayaSvo, мне достался набор классов для подключения к различным БД: MySQL, firebird, MSSQL, ODBC, MySQLi, ORACLE, Postgres, SQLite...

Сегодня я решил немного поковыряться во всем этом, хочется научить систему работать не только с MySQL.. В процессе ковыряния, пришел к выводу, что поддержку MySQL, MySQLi, Postgres и SQLite сделать возможно, а вот от всех остальных придется отказаться. Почему?

1. Прежде всего, трудно поверить и невозможно представить, что поддержка такого количества БД реально необходима. Подавляющее число сайтов в сети, используют либо MySQL, либо Postgres. Хостинги сейчас также ориентированы предоставлять именно эти БД. Поэтому довольно трудно найти сервер с установленными другими БД, а значит не получится как следует протестировать и отладить систему при использовании их. - Зачем писать по теории то, что никем не будет использовано, а также не будет гарантий корректной работы.

2. Отличие в SQL запросах. Например, в MySQL и ORACLE по-разному расставляются пределы выборки (LIMIT), кроме того мне смутно верится, что в MSSQL существует функция UNIT_TIMESTAMP и многое другое. Конечно, можно абстрагировать написание запросов в БД (для вставки, обновления и удаления я так и сделал, но как красиво абстрагировать SELECT я так и не придумал), однако такое чревато трудностями при написании/понимании SELECT запросов, что резко отпугнет не только новичков, но и других разработчиков.

Не знаю, как вам, но мне при виде:
$this->ipsclass->DB->build_query( array(	'select'	=> 't.*, t.posts as topic_posts, t.title as topic_title',
																'from'		=> array( 'topics' => 't' ),
																'where'		=> "t.tid IN({$topics})",
																'limit'		=> array( $this->first, '25' ),
																'order'		=> $this->sort_key . ' ' . $this->sort_order,
																'add_join'	=> array(
																					array(
																							'select'	=> 'p.pid, p.author_id, p.author_name, p.post_date, p.post, p.post_htmlstate, p.queued',
																							'from'		=> array( 'posts' => 'p' ),
																							'where'		=> 'p.topic_id=t.tid AND p.new_topic=1',
																							'type'		=> 'left'
																						),
																					array( 
																							'select'	=> 'm.*',
																							'from'		=> array( 'members' => 'm' ),
																							'where'		=> 'm.id=p.author_id',
																							'type'		=> 'left'
																						),	
																					array( 
																							'select'	=> 'me.*',
																							'from'		=> array( 'member_extra' => 'me' ),
																							'where'		=> 'me.id=p.author_id',
																							'type'		=> 'left'
																						),	
																					array( 
																							'select'	=> 'pp.*',
																							'from'		=> array( 'profile_portal' => 'pp' ),
																							'where'		=> 'pp.pp_member_id=p.author_id',
																							'type'		=> 'left'
																						),	
																					)
													)		);

хочется закрыть файл и куда-то убежать.. Ведь если я, изрядно поднапрягшись, - еще могу понять, что хотел получить автор этого запроса; то самому написать нечто подобное - ПРОСТО НЕВОЗМОЖНО!

3. В MySQL, MySQLi, Postgres и SQLite по-моиму нет никакой разницы в запросах - принципы и функции те же.. Значит никому не придется привыкать к новым стандартам или прочим "новинкам". Я имею ввиду разработчиков сторонних модулей, которые, надеюсь, будут. Прав ли я?

Что думаете по этому поводу? :mellow:

Сообщение отредактировал Alexander - 2008-12-17, 21:54
Перейти в начало страницы
+Цитировать сообщение
Next
сообщение 2008-12-17, 18:53
Сообщение #2
Новичок
Иконка группы

Группа: Разработчики
Сообщений: 76
Регистрация: 2008-12-13

Репутация:   нет  
Всего: 8


MySQL, MySQLi, SQLite
Все остальное не нужно
Перейти в начало страницы
+Цитировать сообщение
Гость_xakep_*
сообщение 2008-12-17, 19:44
Сообщение #3



Гости





Может вообще кроме mysql ничего ненужно? или один из вариантов на странице скачки сделать несколько вариантов: mysql версия, Mysqli, sqlite.
Перейти в начало страницы
+Цитировать сообщение
Youshi
сообщение 2008-12-17, 21:48
Сообщение #4
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Цитата (xakep @ 17.12.2008, 19:44)
Может вообще кроме mysql ничего ненужно? или один из вариантов на странице скачки сделать несколько вариантов: mysql версия, Mysqli, sqlite.


MySQL, MySQLi, Postgres

ИМХО
Перейти в начало страницы
+Цитировать сообщение
Гость_livetver_*
сообщение 2008-12-17, 21:53
Сообщение #5



Гости





Большинство будет MySQL, MySQLi юзать...
Перейти в начало страницы
+Цитировать сообщение
Youshi
сообщение 2008-12-17, 22:02
Сообщение #6
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Цитата (livetver @ 17.12.2008, 21:53)
Большинство будет MySQL, MySQLi юзать...


Эт точно. Но Postgres поддерживать все-таки желательно.
Перейти в начало страницы
+Цитировать сообщение
Гость_RULEVOY_*
сообщение 2008-12-17, 22:37
Сообщение #7



Гости





Цитата (Youshi @ 17.12.2008, 22:02)
Эт точно. Но Postgres поддерживать все-таки желательно.

SQLite?
Перейти в начало страницы
+Цитировать сообщение
Youshi
сообщение 2008-12-17, 22:41
Сообщение #8
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Цитата (RULEVOY @ 17.12.2008, 22:37)
SQLite


Нет. Это вообще другая БД
Перейти в начало страницы
+Цитировать сообщение
Гость_RULEVOY_*
сообщение 2008-12-17, 22:54
Сообщение #9



Гости





Цитата (Youshi @ 17.12.2008, 22:41)
Нет. Это вообще другая БД

мое "краткое сообщение" означало, "а как насчет SQLite" ?
Извиняюсь, что недоступно написал...

Сообщение отредактировал RULEVOY - 2008-12-17, 22:55
Перейти в начало страницы
+Цитировать сообщение
Гость_xakep_*
сообщение 2008-12-17, 23:32
Сообщение #10



Гости





Я вообще завел речь о том чтобы неписать в коде ничего такого сверх, можно выложить 3-4 дистрибутива под разные БД
Перейти в начало страницы
+Цитировать сообщение
NoIndex
сообщение 2008-12-18, 5:54
Сообщение #11
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 825
Регистрация: 2008-12-13
Из: Россия → Новосибирск
Версия системы: RC5

Репутация:   нет  
Всего: 24


Цитата (xakep @ 18.12.2008, 2:32)
Я вообще завел речь о том чтобы неписать в коде ничего такого сверх, можно выложить 3-4 дистрибутива под разные БД

Бред :blink:
Перейти в начало страницы
+Цитировать сообщение
Youshi
сообщение 2008-12-18, 8:34
Сообщение #12
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Цитата (NoIndex @ 18.12.2008, 5:54)
Бред


Почему же. Хотя дистриб - это громко сказано, а вот если допустим при установке выбирать необходимый тип БД... я думаю, разумно.
Перейти в начало страницы
+Цитировать сообщение
NoIndex
сообщение 2008-12-18, 8:46
Сообщение #13
Опытный
Иконка группы

Группа: Бета-тестеры
Сообщений: 825
Регистрация: 2008-12-13
Из: Россия → Новосибирск
Версия системы: RC5

Репутация:   нет  
Всего: 24


Именно. ^_^
Я тебе про тоже и хочу сказать, что для каждой БД делать свой дистр - бред :)
А вот, если сделать выбор БД при установке системы - это нормально.
Перейти в начало страницы
+Цитировать сообщение
Гость_timoxa_*
сообщение 2008-12-18, 14:25
Сообщение #14



Гости





Мое имхо- стоит оставить одну mysql. Если хостинг поддерживает несколько видов БД, то mysql- точно одна из них. Так зачем изобретать велосипед, и парить мозги Alexander`a и прочих? Если потребуется экзотика, то можно и другую кмс по такому случаю взять.. Я понимаю что мускул не верх совершенства, но....
Перейти в начало страницы
+Цитировать сообщение
Youshi
сообщение 2008-12-18, 15:22
Сообщение #15
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Цитата (timoxa @ 18.12.2008, 14:25)
Мое имхо- стоит оставить одну mysql. Если хостинг поддерживает несколько видов БД, то mysql- точно одна из них. Так зачем изобретать велосипед, и парить мозги Alexander`a и прочих? Если потребуется экзотика, то можно и другую кмс по такому случаю взять.. Я понимаю что мускул не верх совершенства, но....


Лучше конечно сакцентировать свое внимание на исправлении существующих ошибок в системе, а не на внесении новых :)
ООП - штука такая, что потом всегда можно будет прикрутить хоть 10 классов для доступа к БД - никто и не заметит...
Перейти в начало страницы
+Цитировать сообщение
Screatch
сообщение 2008-12-18, 16:09
Сообщение #16
Опытный
Иконка группы

Группа: Eleanor TEAM
Сообщений: 717
Регистрация: 2008-11-11
Из: Таллинн

Репутация:   нет  
Всего: 20


MySQL, MySQLi, Postgres и SQLite
Думаю все 4 надо поддерживать, раз есть такая возможность, то пусть будет, пойдёт системе только на пользу.
Перейти в начало страницы
+Цитировать сообщение
Гость_xakep_*
сообщение 2008-12-18, 17:11
Сообщение #17



Гости





Можно как вариант сделать чтобы при установке создавались класы для работы с бд в зависимости от выбора, да и вообще неплохо бы сделать установку в 2 файла (setup.php и файл-архив системы)
Перейти в начало страницы
+Цитировать сообщение
Гость_Bartelby_*
сообщение 2009-01-05, 23:31
Сообщение #18



Гости





MySQL, Postgres
под MySQLi и SQLite я даж хостенгов не видел. Сам использую (в ПХП) только MySQL (один раз юзал MSSQL - заколупался, есть целая куча библиотек для хостеров для связи внешней базы с экземпляром локальной, но ни кто их ставить не хочет). Postgres, насколько я понял, это та же MySQL, только с чуть увеличенными объемами таблиц и поправленными алгоритмами работы. Для некоторых проектов может пригодится.

ЗЫ: Хотя я бы еще сделал поддержку БД на плоских файлах а-ля Google но это потом. :)

ЗЗЫ: При установке система не должна что-либо сама создавать (за исключением конфигурации) иначе удалить что-то или поправить смогут только юзеры с правами root (Недавно Битрикс пытался снести с хостинга, пришлось админа просить, что б лично все файлы ручками не перебирать). Выбор при установке должен писать соответствующую переменную в конфиг, а от положения переменно (константы) класс работы с БД уже выбирал как ему работать и какие методы использовать. Или даже сделать абстрактный класс, а внутри его уже подключать класс для работы с нужной БД (? сам не совсем понял что написал)

Сообщение отредактировал Bartelby - 2009-01-05, 23:36
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2009-01-06, 1:45
Сообщение #19
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 262
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Цитата (Bartelby @ 6.1.2009, 0:31)
ЗЗЫ: При установке система не должна что-либо сама создавать (за исключением конфигурации) иначе удалить что-то или поправить смогут только юзеры с правами root

Админ хостинга идиот, раз так. Больше добавить нечего.
Перейти в начало страницы
+Цитировать сообщение
Youshi
сообщение 2009-01-06, 9:38
Сообщение #20
Любитель
Иконка группы

Группа: Разработчики
Сообщений: 118
Регистрация: 2008-12-14
Из: Россия. Астрахань

Репутация:   нет  
Всего: 8


Цитата (Alexander @ 6.1.2009, 1:45)
Админ хостинга идиот, раз так. Больше добавить нечего.


Ты немного не прав. Это вопрос тонкий и надо разбираться в устройстве никсов. А как мне известно, ты их не любишь, мякго выражаясь :)
Так вот с правами доступа там все очень непросто. Точнее ничего сложного. Кроме одного НО!. Апач обычно запускается с правами root (или другого пользователя с широкими правами, но значительно ниже root), и всем файлам, созданным скриптами, автоматически назначается владелец root. То есть в дальнейшем только владелец, то есть root сможет их удалить. Это все происходит если PHP работает как модуль апача. В режиме CGI таких заморочек с правами нет (похоже, что у твоего хостера пхп работает именно как CGI модуль). Вот только это гораздо медленее, чем в первом случае.
Хотя конечно есть куча библиотек, решающих эту проблему с модулем Apache, вот только все они глючные и толком не доделанные.

В общем к чему это я... не надо винить хостера;)

Цитата (Bartelby @ 5.1.2009, 23:31)
ласс работы с БД уже выбирал как ему работать и какие методы использовать. Или даже сделать абстрактный класс, а внутри его уже подключать класс для работы с нужной БД


Все правильно сказал
+1
Перейти в начало страницы
+Цитировать сообщение

Ответить в данную темуНачать новую тему
0 чел. читают эту тему (гостей: 0, скрытых пользователей: 0)
Пользователей: 0

 
RSS Текстовая версия 0.0356 сек.    11 запросов    GZIP включен    Сейчас: 2024-10-08, 9:08