Реклама на сайте Advertise with us

Php обёртка базы данной для возможности смены движка db

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 10/10/15 в 10:04       Ответить с цитатойцитата 

Подскажите паттерн, которым обернуть все вызовы db, чтоб можно было потом добавить в код возможность работы с другим движком. Например, сейчас mongodb, а потом дописать, чтоб то же самое работало для mysql.

0
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 10/10/15 в 12:29       Ответить с цитатойцитата 

Вообще PDO, но nosql оно не поддерживает.

9
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 10/10/15 в 15:13       Ответить с цитатойцитата 

А как поступить, если я сам буду писать реализации под конкретные базы, включая простейший вариант в текстовом файле.
Например есть абстрактный класс, в котором обьявдены все нужные методы работы с абстрактной БД. Как реализовать смену реализации этого абсмтрактного класса, налету, в зависимости от настроек скрипта? Самый тупой спобоб, который приходит в голову, это смана файла инклуда с реализацией. Но это не совсем уже ООП! Ибо таким макром можно и процедуры обёртки инклудить с разной реализацией, раскидав их по разным файлам!

0
 

programmer

С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760

Ссылка на сообщениеДобавлено: 10/10/15 в 16:28       Ответить с цитатойцитата 

ОРМ для реляционных БД реализована
скорее всего свой велосипед писать
ибо принципиально разные подходы к хранению данных

крипта на ByBit

0
 

programmer

С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760

Ссылка на сообщениеДобавлено: 10/10/15 в 16:30       Ответить с цитатойцитата 

Цитата:

Как реализовать смену реализации этого абсмтрактного класса, налету, в зависимости от настроек скрипта?

интерфейсом например

крипта на ByBit

9
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 10/10/15 в 17:59       Ответить с цитатойцитата 

Sterx писал:
интерфейсом например

Можешь схематически показать или дать линк на что-то похожее?

0
 

programmer

С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760

Ссылка на сообщениеДобавлено: 10/10/15 в 18:36       Ответить с цитатойцитата 

Код: [развернуть]

таким образом в абстракции имеем набор методов одинаковых для каждого нового интерфейса, каждый из методов имеет свою реализацию для конкретной БД

крипта на ByBit

8
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 10/10/15 в 19:07       Ответить с цитатойцитата 

Sterx: А как это будет выглядеть в коде, где надо использовать конкретно базу в зависимости от какого-то условия? Предположим, для простоты в конфиге есть настройка $dbEngine = 'Mysql'; //или 'MongoDB'; (Или статический класс с тем же примерно полем по смыслу..) Как эта нвстройка должна влиять на код?

И как в самом файле, где нужно обращаться к базе использовать эту абстракцию? (Т.е. элементарно вызвать selectItems..)

0
 

programmer

С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760

Ссылка на сообщениеДобавлено: 10/10/15 в 19:48       Ответить с цитатойцитата 

Код: [развернуть]

крипта на ByBit

8
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 10/10/15 в 20:05       Ответить с цитатойцитата 

Почему ты тогда не посмотреть в сторону doctrine, propel. Потратить время на обучение, но потом сильно сэкономить на изготовлении своего велосипеда.

Тем более имхо переход mongodb -> mysql весьма специфичный, что бы все предусмотреть заранее. А в orm уже более менее решено.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

-1
 

programmer

С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760

Ссылка на сообщениеДобавлено: 10/10/15 в 20:08       Ответить с цитатойцитата 

в doctrine и nosql и sql дружат?

крипта на ByBit

0
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 10/10/15 в 20:31       Ответить с цитатойцитата 

Да, так как ты работаешь с объектами записей. А хранение, выборка и прочее уже за тебя решает сам ORM. Конечно же такое будет не бесплатно, а стоить дополнительных серверных ресурсов.
Тот же symfony вроде как раз doctrine использует в качестве прослойки работы с базой данных.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 10/10/15 в 22:05       Ответить с цитатойцитата 

Имхо такие переходники писать разово нужно. Не каждый день бд меняешь.
Поэтому смысла с такими заморочками абсолютно не вижу. К тому же с такими велосипедами потеряешь в производительности.
Касаемо паттернов. Основных пара это Active Record и Data Mapper.

1
 



С нами с 06.07.15
Сообщения: 110
Рейтинг: 171

Ссылка на сообщениеДобавлено: 11/10/15 в 12:14       Ответить с цитатойцитата 

Stek писал:
Почему ты тогда не посмотреть в сторону doctrine, propel. Потратить время на обучение, но потом сильно сэкономить на изготовлении своего велосипеда.


Потом чтобы в готовом проекте колонку в таблице добавить столько гемору словить..

0
 



С нами с 09.08.12
Сообщения: 185
Рейтинг: 378

Ссылка на сообщениеДобавлено: 11/10/15 в 13:46       Ответить с цитатойцитата 

использовать ORM - но лучше написать свой слой для бизнес логики (набор функций на уровне бизнес логики а не абстракции на уровне драйвера).

т.к. при использованиие orm боремся с инструментом вместо реализации приложения

0
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 11/10/15 в 21:09       Ответить с цитатойцитата 

gcc писал:
Потом чтобы в готовом проекте колонку в таблице добавить столько гемору словить..

А при чем тут добавление колонки, если изначально разговор шел о обертке над базой, что бы можно было с mongo на mysql съехать.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

-1
 



С нами с 09.08.12
Сообщения: 185
Рейтинг: 378

Ссылка на сообщениеДобавлено: 13/10/15 в 19:49       Ответить с цитатойцитата 

S_Flash писал:
Самый тупой спобоб, который приходит в голову, это смана файла инклуда с реализацией. Но это не совсем уже ООП! Ибо таким макром можно и процедуры обёртки инклудить с разной реализацией, раскидав их по разным файлам!


ну и что?
вполне нормальный способ чем городить какие то классы с интерфейсами.

require "dblayer/mysql.php";
//require dblayer/mongodb.php;

в файле реализуем несколько функции

entitySelect($table, $filter) - выборка списка элементов

entityGet($table, $key) - возвратить по ключу

entitySet($table, $key, $data) - сохранить по ключу

entityDelete($table, $key)

этих функций в принципе достаточно

0
 

programmer

С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760

Ссылка на сообщениеДобавлено: 13/10/15 в 21:24       Ответить с цитатойцитата 

вопрос личностной дрочки - у кого то стоит на ООП стайл, у кого то на функции

крипта на ByBit

0
 

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 13/10/15 в 21:57       Ответить с цитатойцитата 

Короче, заебался я! icon_smile.gif
Часть основных операций монги обернул. Потом, когда выборки посложнее пошли, понял, что хоть и оберну, но реализовать то же самое на других БД парадигмах хоть и можно, но оно не стоит того ни по времени не по ресурсам. Вторая база будет подстраиваться под запросы монги и потеряет львиную долю быстродействия. А скорость я всегдадержу в приоритете!
Перевёл всё на чисто монгу безповоротно. А надо будет переключиться, перепишу, хера тут уже делать!

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »