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