Синхронизировать Базу Данных магазина

tegs

Новичок
Привет всем.
Есть крупный интернет магазин, у которого много оптовых клиентов.
Задача: что бы при обновлении таблиц товаров, автоматически также обновлялись и Базы Данных клиентов магазина.
Вариант: Подключится в БД клиента и дать ему заполнить названия его полей. С помощью INSERT ... ON DUPLICATE KEY UPDATE просто скопировать все к нему в БД. Такой подход не подходит из за того что каждый клиент заказывает разную продукцию и вся ему не нужна.

У каждого своя артихектура Базы Данных. Возможно ли реализовать универсальный скрипт для всех клиентов, или нужно под каждого индивидуально? У кого какие мысли, как это можна реализовать? Очень нужны ваши идеи.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
tegs, мое видение - пишется API по которому твои клиенты вытягивают у тебя обновления, приходит клиент, смотрит, есть ли обновки, если есть - запрос на получение данных и понеслась. Но клиент САМ должен запросить данные.
 

tegs

Новичок
tegs, мое видение - пишется API по которому твои клиенты вытягивают у тебя обновления, приходит клиент, смотрит, есть ли обновки, если есть - запрос на получение данных и понеслась. Но клиент САМ должен запросить данные.
В каком виде они должны вытягивать обновления? В Эксель файле и далее самостоятельно загрузить их к себе в БД или сразу при нажатии кнопки что бы происходило копировани обновлений к нему в БД?(В таком случае возникает масса проблем - он должен дать доступы к его бд, названия его полей, время копирования будет долгим - записей в таблице очень много).
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
tegs, API как правило отдает данные в двух основных форматах - это JSON и XML, первый мне кажется более удобным. Клиент съедает JSON ответ от серсера, преобразует его в удобный формат и вставляет в базу данных. Вопросы конкретной реализации - дело ваше.

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

Вурдалак

Продвинутый новичок
Всё зависит от требований, объёмов, договорённостей, etc.

Нормальный API, предусматривающий возможность получения списка изменённых объектов с даты последней проверки или списка изменения (CQRS + ES?), действительно решит вопрос для многих клиентов.

Если магазину нужно больше, чем самому клиенту, то можно по событию «товар изменился» (ORM, service, controller, ...) дёргать обработчиков, которые будут делать запросы на сервер каждого из клиентов (HTTP или MySQL-запрос в «тяжёлых» случаях).
 
Последнее редактирование:

С.

Продвинутый новичок
Если магазину нужно больше, чем самому клиенту, то можно ...
Давайте идиотские варианты не предлагать. Клиенты на столько тупы и ленивы, что не в состоянии воспользоваться АПИ для обновлениья своих баз, но все как один предоставили шлюзы, чтобы кто-то со стороны лазил по их базам. Ага!
 

vasinsky

Новичок
Давайте идиотские варианты не предлагать
гыггы.
гыгыгыгы ))

если вы не понимаете суть предложенной вам реализации - это ещё не говорит о том что она идиотская.

сама реализация для клиента проста проста, с учётом что вы знаете архитектуру БД их магазинов - иначе как вы обновите им данные?

достаточно написать скрипт и разместить у них в магазинах, например client-shop.ru/update - это маска ЧПУ - на сам деле, например скрипт называется update.php и лежит в корне магазина

остальное дело техники - запрос на API, проверка наличия обновления, обновление
или вы считаете, что у ваших клиентов мозгов не хватит набрать в урл http://client-shop.ru/update ?

можно так же повесить им всё это на cron

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

У каждого своя артихектура Базы Данных. Возможно ли реализовать универсальный скрипт для всех клиентов, или нужно под каждого индивидуально?
ахахха. вы как думаете? все попытки универсализировать такой алгоритм - сведутся к тому - что нужно писать множество алгоритмов под каждую структуру.
 

С.

Продвинутый новичок
vasinsky, клиенты! КЛИЕНТЫ!!! Не филиалы, а независимые клиенты, блеать!!! Которые могут еще закупаться и в других местах. Надо быть идиотом чтобы даже рассматривать этот вариант.
 
  • Like
Реакции: WMix

vasinsky

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

tegs

Новичок
что на данный момент представляют ваши клиенты? это просто левые товарищи у которых есть свои интернет магазины, которые хотели бы размещать ваш товар у себя на сайтах ? или кто это?
Именно. Это ленивые клиенты которые продают наш товар но не хотят заполнять сайт и нанимать контент-менеджера. Тоесть допустим у нас 20 крупных клиентов которым надо обновить БД в первую очередь. Под каждого надо писать отдельный скрипт исходя из архитектуры БД? Это можна реализовать на php+mysql? JavaScripty(Json) плиз не предлагайте, я новичок, еще не добрался до них.

Вот что я написал как базовый вариант который должен копировать простосто все названия товаров к ним в БД:

echo "<form method='post' action=''>
<table border=1>
<tr>
<td>Имя сервера БД:</td>
<td><input name='name_server' type='text' length='50' maxsize='50'></td>
</tr>
<tr>
<td>Логин:</td>
<td><input name='login' type='text' length='50' maxsize='50'></td>
</tr>
<tr>
<td>Пароль:</td>
<td><input name='pass' type='password' length='50' maxsize='50'></td>
</tr>
<tr>
<td>Имя БД:</td>
<td><input name='name_db' type='text' length='50' maxsize='50'></td>
</tr>
<tr>
<td>Название таблицы:</td>
<td><input name='name_table' type='text' length='50' maxsize='50'></td>
</tr>
<tr>
<td>Поле с названием артикула:</td>
<td><input name='name_artikul' type='text' length='50' maxsize='50'></td>
</tr>
<tr>
<td>Поле с названием товара:</td>
<td><input name='name_tovar' type='text' length='50' maxsize='50'></td>
</tr>
<tr>
<td>Поле с описанием товара:</td>
<td><input name='descrip_tovar' type='text' length='50' maxsize='50'></td>
</tr>
<tr>
<td colspan=2 align='center'><input type='submit' name='submit' value='Синхронизировать'></td>
</tr>
</table>
";

if(isset($_POST['submit'])) {
$name_server = $_POST['name_server'];
$login = $_POST['login'];
$pass = $_POST['pass'];
$name_db = $_POST['name_db'];
$name_table = $_POST['name_table'];
$name_artikul = $_POST['name_artikul'];
$name_tovar = $_POST['name_tovar'];

//Делаем выборку полей из нашей БД
$sql = "SELECT artikul FROM tov_con";
$result = mysql_query($sql);
if(mysql_num_rows($result)>0){
while($row = mysql_fetch_array($result)) {
$artikul[] = $row['artikul'];
}
} else {
echo "Не могу найти артикул!";
}
$sql = "SELECT name FROM tov";
$result = mysql_query($sql);
if(mysql_num_rows($result)>0){
while($row = mysql_fetch_array($result)) {
$tovar[] = $row['name'];
}
} else {
echo "Не могу найти товар!";
}

//Подключаемся к БД клиента
mysql_connect($name_server, $login, $pass) or die("Не могу подключится к БД");
mysql_select_db($name_db) or die("Такой БД не существует!");
//Перебрасываем наши данные в БД клиента
foreach($tovar as $value){
$sql = "INSERT INTO $name_table($name_tovar) VALUES('$value')";
mysql_query($sql);
}
 
Последнее редактирование:

tegs

Новичок
tegs, API как правило отдает данные в двух основных форматах - это JSON и XML, первый мне кажется более удобным. Клиент съедает JSON ответ от серсера, преобразует его в удобный формат и вставляет в базу данных. Вопросы конкретной реализации - дело ваше.

В общем случае на каждом клиентском сервере есть cron, который запускает по расписанию проверку обновлений с основного сервера и при наличии оных - запускает процесс обновления прайса. Почему время какого-то копирования должно быть долгим - мне не ясно.
А на php это реализовать возможно? На пример кода что я написал в предыдущем посте.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
tegs, да, это можно реализовать на php. Пример кода я не понял к чему был приведен ;)

Остальным, отметившимся в теме - кончайте сраться =)
 

tegs

Новичок
tegs, да, это можно реализовать на php. Пример кода я не понял к чему был приведен ;)

Остальным, отметившимся в теме - кончайте сраться =)
С помощью этого кода клиент вводит свои Доступы к Бд, название таблицы и полей которые надо ему заполнить.(+я добавилю еще поле выбор по торговой марке что бы не копировать сразу все вподряд). После этого скрипт копирует что нужно из нашей БД и вставляет в БД клиента. Но опять таким проблема что оно просто скопирует, а разнести по категориям клиенту надо будет сделать вручну (скопирует товар Корм для собак Чаппи - это должно быть в категории корм для собак поле для которого останется не заполненым и клиенту надо будет зайти и выставить это поле). Вот этот ньанс же нельзя автоматизировать? Я правильно понимаю?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
tegs, вы меня не поняли. У вас должен быть механизм, который бы отвечал на запросы из вне. Допустим у вас есть домент api.site.com, на котором располагается этот API, который отвечает на запросы ваших клиентов. Сервер клиента путем запуска скрипта по cron'у делает к вам запрос, например http://api.site.com/checkupdates?clientId=xxx... Сервер выдает ему информацию о имеющихся для него обновлениях, с даты его последнего посещения, либо если оное не нужно просто может выдавать ему описания товаров и категорий по каким-то фильтрам. Например все товары категории XXX http://api.site.com/get/goods/cat/XXX.

Примерно так.
 

tegs

Новичок
tegs, вы меня не поняли. У вас должен быть механизм, который бы отвечал на запросы из вне. Допустим у вас есть домент api.site.com, на котором располагается этот API, который отвечает на запросы ваших клиентов. Сервер клиента путем запуска скрипта по cron'у делает к вам запрос, например http://api.site.com/checkupdates?clientId=xxx... Сервер выдает ему информацию о имеющихся для него обновлениях, с даты его последнего посещения, либо если оное не нужно просто может выдавать ему описания товаров и категорий по каким-то фильтрам. Например все товары категории XXX http://api.site.com/get/goods/cat/XXX.

Примерно так.
А все действия по занесению этих данных в БД происходят потом на стороне клиента? Тоесть опять же для каждого клиента нужен индивидуальный скрипт для крона?
 

Breeze

goshogun
Команда форума
Партнер клуба
А все действия по занесению этих данных в БД происходят потом на стороне клиента? Тоесть опять же для каждого клиента нужен индивидуальный скрипт для крона?
да, нужен.
делать обновления со своей стороны -- путь в никуда, тем более, что в этом случаей тебе все-равно нужен будет индивидуальный скрипт под каждого.

а так, сделал api, показал как пользоваться и все.
не хотят сами, сделаешь им за денежку на их стороне.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
tegs, да, каждый клиент в соответствии со своим бизнес процессом сам обрабатывает и распихивает данные, полученные от тебя.
 

tegs

Новичок
Понял, спасибо, именно это мне и было не понятно.
А не подскажите какую-нибудь документацию как хоть примерное такое api можно на php написать?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
tegs, на хабе было несколько статей по поводу построения REST API, можно посмотреть там, или в гугле по запросу REST API php
 
Сверху