Перейти к содержимому


Синхронизация данных


Сообщений в теме: 18

#1 mahmud

    Активный участник

  • Пользователи
  • PipPipPip
  • 67 сообщений

Отправлено 29 Декабрь 2012 - 07:36

Добрый день уважаемые программисты,

Хотелось бы реализовать следующее:

Например есть два фирма и у них отдельная программа КБ.
Создаю кнопку в доп. или представление.
Вожу дополнение в одной программе хотелось бы как нибудь сделать синхронизацию файлов.
Как бы при нажатии на кнопку все изменение копировались.

Подскажите это возможно, если да то что можете посоветовать?

Заранее спасибо

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Декабрь 2012 - 10:59

http://clientbase.ru..._admin_16/sync/ - только так. Через доп.действия это вряд ли можно адекватно реализовать.

#3 mahmud

    Активный участник

  • Пользователи
  • PipPipPip
  • 67 сообщений

Отправлено 29 Декабрь 2012 - 11:40

Просмотр сообщенияCbCoder (29 Декабрь 2012 - 10:59) писал:

http://clientbase.ru..._admin_16/sync/ - только так. Через доп.действия это вряд ли можно адекватно реализовать.

Спасибо, а где хранятся все файлы изменение кроме данных. Чтоб мог копировать и вставить в соответствующее.

Сообщение отредактировал mahmud: 29 Декабрь 2012 - 12:46


#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Декабрь 2012 - 12:51

Файлы хранятся в папке files в каталоге программы. Если вам нужно синхронизировать только файлы, то можно просто папку копировать. Но при этом в обоих программах в таблицах должны быть одни и те же файлы в записях.

#5 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 30 Январь 2013 - 09:07

Поскольку таблицу можно сделать подчиненной только единожды, решил сделать две таблицы, каждую подчинить своей и сделать синхронизацию данных. Вот только как поступить с полем Файл? Есть какие-нибудь решения без их копирования? Что-то вроде ссылки, например...

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#6 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 30 Январь 2013 - 12:42

Как средствами КБ перенести файлы из одной таблицы в другую?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#7 Гость_Roman_*

  • Гости

Отправлено 30 Январь 2013 - 14:32

Можно создать вычисление, которое будет вставлять html-код в поле. Соответсвенно, код можно сгенерировать любой, включая и ссылки на файлы.

#8 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 30 Январь 2013 - 15:55

Просмотр сообщенияRoman (30 Январь 2013 - 14:32) писал:

Можно создать вычисление, которое будет вставлять html-код в поле. Соответсвенно, код можно сгенерировать любой, включая и ссылки на файлы.
Это я сделаю. Будет поле, содержащее правильные ссылки на файлы. Поэтому проблему синхронизации таблиц решу. Как физически перенести файлы из одной таблицы в другую в автоматическом режиме? Какие есть функции встроенные в КБ для работы с файловой системой? Как считать я знаю, а как записать?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#9 Гость_Roman_*

  • Гости

Отправлено 31 Январь 2013 - 09:21

Вариант первый
$file_path = get_file_path(111, 222, 'test.txt'); // Получаем путь к файлу
$new_path = get_file_path(333, 444, 'test.txt'); // Получаем новый путь к файлу
create_data_file_dirs(333, 444, 'test.txt'); // Создаём структуру каталогов
copy($file_path, $new_path); // Копируем файл
drop_data_file(111, 222, 'test.txt'); // Удаляем исходный файл, если надо
Вариант второй (не подойдёт для больших файлов)
$file_path = get_file_path(111, 222, 'test.txt'); // Получаем путь к файлу
$content = file_get_contents($file_path); // Получаем содержание файла
save_data_file(333, 444, 'test.txt', $content); // Сохраняем новый файл, структура каталогов автоматически создастся
drop_data_file(111, 222, 'test.txt'); // Удаляем исходный файл, если надо.


#10 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 31 Январь 2013 - 12:52

спасибо большое

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#11 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 08 Февраль 2013 - 11:36

Алгоритм синхронизации оказался с массой подводных камней. В частности с файлами.
Есть в планах привязка таблицы в качестве подчиненной к нескольким главным?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#12 wondertalik

    Активный участник

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 08 Февраль 2013 - 11:52

Просмотр сообщенияandibrag (08 Февраль 2013 - 11:36) писал:

Есть в планах привязка таблицы в качестве подчиненной к нескольким главным?
Меня этот вопрос тоже интересует. Довольно давно сталкиваюсь с необходимостью поддержки такого функционала.

Просмотр сообщенияandibrag (08 Февраль 2013 - 11:36) писал:

Алгоритм синхронизации оказался с массой подводных камней. В частности с файлами.
Пожалуйста, можно подробней?

#13 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 08 Февраль 2013 - 16:11

Просмотр сообщенияandibrag (08 Февраль 2013 - 11:36) писал:

Алгоритм синхронизации оказался с массой подводных камней. В частности с файлами.
Попытаюсь кратко. Есть две таблицы, одна клон другой. Смысл в том, чтобы при добавлении данных в любую из них они копировались в другую.
С текстовыми полями проблем нет. В случае с файлами ситуация такая.
  • Изменение поля типа файл не вызывает никакого события. Т.е. удаление или добавление проходит незамеченным, если только не явно вызвать событие, например, сохранение таблицы или изменение любого поля другого типа.
  • Копирование полей файл из одной таблицы в другую смысла не имеет. Получаем "битые ссылки" и внутренний файл-менеджер опознает их как есть в базе, но нет на диске, т.е. как мусор. Создание поля, в которое будут методом вычислений вноситься ссылки о реальном расположении файлов, решает проблему частично. Исчезает функционал добавления и удаления файлов в подчиненной таблице. Его тоже можно частично решить внеся соответствующие строки в вычисление. Вот только в табличном виде, не в качестве подчиненной, а именно в виде таблицы, эти созданные кнопочки Удалить напротив каждого файла и Добавить под ними - работать не будут. А лишнее всегда смущает пользователей.
  • Физическое копирование файлов, фактически их дублирование, решает проблемы пункта два, но выедает место на диске и бекап начинает пухнуть как на дрожжах, если включает файлы.
  • Перемещение файлов в одну таблицу позволяет исключить проблему съедания пространства и бекапа. При этом, если почистить поле файл в таблице, из которой файлы были перемещены (сами они не исчезнут, поскольку Вы сделаете перенос посредством вычислений) - пропадут битые ссылки. Т.е. пункт 2 частично станет не актуален, но неудобство в нем описанное останется. Очень важно, чтобы файлы, которые теперь перемещены не были удалены из таблицы, в которую они теперь попали, поскольку поле Файл становится разным. В одной пустое, в другой - есть файлы. Пару раз я данные потерял. Физически они на диске лежат, только ссылок на них нигде не остается. Здесь танцы с бубнами и начинаются.
Теоретически, если еще потанцевать, получится должно. Но решил все же спросить разработчиков. Если это не за горами:

Просмотр сообщенияCbCoder (08 Февраль 2013 - 11:54) писал:

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

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#14 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 22 Ноябрь 2013 - 11:15

На сервере лежат две базы. Одна рабочая, вторая тестовая. Хочу синхронизировать данные из рабочей в тестовую. Хотел сделать как локальную. Но не совсем разобрался с понятиями активная и пассивная. Активная та, которая выгружает? В чем глобальная разница, если обе срабатывают по крону и одна кидает в папку, вторая забирает из нее? В документации сказано: Активная программа является инициатором синхронизации периодически посылая запросы и выгружая данные. А что делает пассивная? Она тоже посылает запросы по крону и забирает данные.
Еще вопрос. Если все же делать по описанию и одну объявлять пассивной, обязательно проставлять номера синхронизируемых полей в соседствующие текстовые ячейки? Умолчание не заложено на предмет того, что если поле пустое, то номера совпадают?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#15 Гость_Roman_*

  • Гости

Отправлено 22 Ноябрь 2013 - 11:55

Разница активной и пассивной в том, что активная хранит в себе идентификаторы строк пассивной базы, а пассивная - идентификаторы полей активной. Инициирование синхронизации активной базой, опять же, было актуально раньше. При чём актуально это только для режима HTTP. На данный момент инициировать http-синхронизацию может как активная, так и пассивная база. Умолчание не заложено.

#16 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 22 Ноябрь 2013 - 12:06

Просмотр сообщенияRoman (22 Ноябрь 2013 - 11:55) писал:

Разница активной и пассивной в том, что активная хранит в себе идентификаторы строк пассивной базы, а пассивная - идентификаторы полей активной. Инициирование синхронизации активной базой, опять же, было актуально раньше. При чём актуально это только для режима HTTP. На данный момент инициировать http-синхронизацию может как активная, так и пассивная база. Умолчание не заложено.
Т.е. можно обе объявить активными и не заполнять поля в ручном режиме?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#17 Гость_Roman_*

  • Гости

Отправлено 22 Ноябрь 2013 - 12:12

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

#18 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 22 Ноябрь 2013 - 12:28

Просмотр сообщенияandibrag (22 Ноябрь 2013 - 12:06) писал:

Т.е. можно обе объявить активными и не заполнять поля в ручном режиме?

Просмотр сообщенияRoman (22 Ноябрь 2013 - 12:12) писал:

Может быть несоответствие строк, так что лучше не надо.
Не стоит обе объявлять активными, Вы имели ввиду?
Как нужно сделать в текущем варианте? Одну объявить активной, например ту, которая выгружает данные, вторую пассивной.
В пассивной рядом с каждым полем прописать номер соответствия (т.е. банально номер поля). Папка выгрузки для первой должна совпадать с папкой загрузки для второй. После чего настроить крон. Все верно?
Настройки по полям сохраняются в таблице cb_sync_fields. Какое поле нужно заполнить номером? Делать это в ручном режиме - безумие, проще через mysql.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#19 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 356 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 22 Ноябрь 2013 - 13:20

Просмотр сообщенияandibrag (22 Ноябрь 2013 - 12:28) писал:

Настройки по полям сохраняются в таблице cb_sync_fields. Какое поле нужно заполнить номером? Делать это в ручном режиме - безумие, проще через mysql.
Заполнил. При выборе опции "Добавить все поля" как происходит синхронизация, если в списке оказываются поля id?
Судя по ошибке эти поля программа также пытается заполнить.
Error generated:
/cb/include/functions_cron.php(5289) : data_insert()
/cb/include/functions_cron.php(5906) : sync_data()
/cb/cron.php(70) : eval()'d code(1) : sync_all()
/cb/cron.php(70) : eval()
Ошибка SQL запроса: INSERT INTO `cb_data113` (`user_id`, `add_time`, `f1726`, `f1686`, `f1515`, `f1513`, `f1564`, `f1516`, `f1509`, `f1679`, `f1512`, `f1520`, `f1764`, `f2521`, `id`, `u`, `s10`, `r`) VALUES ('', '2013-11-22 13:56:13', '-1-5-3-791-', 'Предварительный', '', '1', '8', '2013-11-22 00:00:00', '0,00', '0,00', '0,00', 'Нет', 'Эскизы', 'cb_modules/images/work.png', '276', '1', '276', '1')
Duplicate entry '276' for key 'PRIMARY'
Или их нужно потом удалять из списка самостоятельно при выборе выше названной опции?
Еще один вопрос. Если id оказывается другой после добавления в базу, происходит отслеживание и замена значений для связанных полей?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения






Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных