[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Синхронизация данных
Djadka
Приветствую. Суть в том что я получаю через SOAP клиент данные, так как данные грузятся порядком больше 10 секунд, то это очень не практично, то я загнал все данные в базу, всё вроде бы нечего, но клиентская часть соап обновляеться довольно часто. Вся база больше 50 мегов примерно в обьём, пока всё на сайте всё хорошо, но как синхронизировать данные не перезаписывая база каждый раз, пытался сразу сделать таким образом беру массив с соап потом беру данные с базы привожу примерно к одному виду для критерий, но сравнивать такой обьём данных, сервак подчас висит и жрёт много памяти, а под час вообще не могу запустить так как не хватает памяти. Обновлять всё базу с переодичностью в три часа с одной стороны решение но не весьма гибкое. Кто что может подсказать в такой ситуации, товарищи знатоки?



Спустя 1 день, 22 часа, 1 минута, 1 секунда (10.12.2011 - 13:17) Guest написал(а):
у меня была задача синхронизировать базы на разных серверах. Я пошел таким путем - делал запрос возвращающий MD5 от таблицы или от каких то полей таблицы и стравнивал их. Если они не совпадали, то базы нуждались в синхронизации. Это было куда быстрее чем делать сравнение всех записей.

Спустя 5 минут, 36 секунд (10.12.2011 - 13:23) Djadka написал(а):
Допустим даже так, то есть я сравнил приходящие данные с СОАП и имеющиюся базу данных, и понял что они разные, следующий шаг, это сравнивать поля. У меня обьём данных очень большой нехватает даже по 500 мегов оперативы когда делаю цикл в цикле. md5 не будет ли занимать больше места в памяти чем просто сравнения поля, у меня есть числа в полях, которые несут только одно значения, а мд5 же имеет фиксированую длинну. Поправьте если я ошибаюсь.

Спустя 6 часов, 56 минут, 3 секунды (10.12.2011 - 20:19) Guest написал(а):
MD5 это одно число на всю базу или таблицу. Получение его для таблицы делается одним SQL запросом. Если таблица большая, то может иметь смысл делать это запрос не для всей таблицы, а для конкретных полей. Но в любом случае это один запрос, поэтому выполняется он на порядки быстрее чем сравнивание базы целиком по записям.
А при несовпадении не надо сравнивать поля, надо просто забрать новые данные.
Но думаю с SOAP такой номер не пройдет. Ведь нет средств получить MD5 от данных на строне сервера? Я просто привел пример решения похожей задачи, вдруг натолкнет на какие нибудь идеи.

Спустя 38 минут, 59 секунд (10.12.2011 - 20:58) Djadka написал(а):
Если долго мучаться что нибудь получиться. Так как всё таки получая данные есть уникальный ключ для продукта, сделал для сравнения пока следующие сначала вынимаю все данные из свой таблицы, загоняю в массив где есть первичный ключ, потом беру данные с СОАП и по тому же полю делаю в духе
if(array_search($value['id'],$sup)===false) это для уникальных значений со стороны СОАП, а для новых полей сделал цикл в цикле и сравненивани по ключи проверяет массив весь с помощью array_diff. Пока вроде на верному пути. пытался найти готовые классы, но у них всегда идёт полное обновление базы, грубая(полная) синхронизация без выборки. Хочется всё таки точечно обновлять что бы не гнобить базу.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.