JSON dedup

Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

JSON dedup

Post by Сабина »

Никому не приходилось решать подобную задачу ? Для данного request URL нужно получить несколько раз подрял JSON response и определить эдентичны они или нет ? Нужно какое-нибудь очень простое решение и очень scalable. AWS based.
Была мысль построить простенький вебсервис на Ноде, который будет перехватывать request, получать response, расcчитвать hash of stringified JSON и делать lookup в Dynamo DB. Если такой уже в базе есть - заменять actual response на какую нибудь ошибку - "дубликат бла бла".
Сказали что hash стринга это плохо, потому что поля могут поменяться местами ( чего в реальной жизни в этом API не наблюдалось).
Интересно какие еще возможны варианты ?
https://www.youtube.com/watch?v=wOwblaKmyVw
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: JSON dedupe

Post by Medium-rare »

А чем нибудь "съесть" это JSON и нормализовать через функцию, например, дать, скажем, компактное представление. Функция одна и та же будет для всех "компактов", одинаковый подход гарантирован. Тогда строка с функционально одинакового JSON будет гарантировано одинаковой.
... and even then it's rare that you'll be going there...
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: JSON dedupe

Post by Сабина »

Medium-rare wrote:А чем нибудь "съесть" это JSON и нормализовать через функцию, например, дать, скажем, компактное представление. Функция одна и та же будет для всех "компактов", одинаковый подход гарантирован. Тогда строка с функционально одинакового JSON будет гарантировано одинаковой.
И что эта QT-шная функция будет всегда и порядок элементов выдавать одинаковый ? Даже если они в самом API могут быть периодически переставлены ?
https://www.youtube.com/watch?v=wOwblaKmyVw
User avatar
Леонид Ильич Брежнев
Уже с Приветом
Posts: 8632
Joined: 22 Mar 2011 01:40

Re: JSON dedup

Post by Леонид Ильич Брежнев »

json diff ?
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: JSON dedupe

Post by Medium-rare »

Сабина wrote: И что эта QT-шная функция будет всегда и порядок элементов выдавать одинаковый ? Даже если они в самом API могут быть периодически переставлены ?
КМК, в разных фреймворках представление документа трансормируется внутри в "дерево" с элементами, может, и уровни сортируя,. Ну, а раз нам дают снова строчку получить, то можно попробовать, нарочно переставив какие-то элементы JSON на одном уровне?
... and even then it's rare that you'll be going there...
Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Re: JSON dedup

Post by Palych »

Сабина wrote:Никому не приходилось решать подобную задачу ? Для данного request URL нужно получить несколько раз подрял JSON response и определить эдентичны они или нет ? Нужно какое-нибудь очень простое решение и очень scalable. AWS based.
Была мысль построить простенький вебсервис на Ноде, который будет перехватывать request, получать response, расcчитвать hash of stringified JSON и делать lookup в Dynamo DB. Если такой уже в базе есть - заменять actual response на какую нибудь ошибку - "дубликат бла бла".
Как-то не очень scalable выглядит... А может в "консерватории" что-то поменять?
Починить клиента, чтобы не повторялся, или наоборот - при записи в storage сервиса отлавливать дубликат?...
Сказали что hash стринга это плохо, потому что поля могут поменяться местами ( чего в реальной жизни в этом API не наблюдалось).
Если есть доверие к клиенту - можно и так, а ещё лучше бы какой-то ID выделить для запросов и сравнивать их...
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: JSON dedup

Post by Сабина »

Palych wrote:
Сабина wrote:Никому не приходилось решать подобную задачу ? Для данного request URL нужно получить несколько раз подрял JSON response и определить эдентичны они или нет ? Нужно какое-нибудь очень простое решение и очень scalable. AWS based.
Была мысль построить простенький вебсервис на Ноде, который будет перехватывать request, получать response, расcчитвать hash of stringified JSON и делать lookup в Dynamo DB. Если такой уже в базе есть - заменять actual response на какую нибудь ошибку - "дубликат бла бла".
Как-то не очень scalable выглядит... А может в "консерватории" что-то поменять?
Починить клиента, чтобы не повторялся, или наоборот - при записи в storage сервиса отлавливать дубликат?...
Сказали что hash стринга это плохо, потому что поля могут поменяться местами ( чего в реальной жизни в этом API не наблюдалось).
Если есть доверие к клиенту - можно и так, а ещё лучше бы какой-то ID выделить для запросов и сравнивать их...
Увы, но это не вариант когда вы можете слелать только poll, не push
https://www.youtube.com/watch?v=wOwblaKmyVw
Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Re: JSON dedup

Post by Palych »

То есть - несколько сосков к одной емкости?
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: JSON dedup

Post by Сабина »

ага заметила только что "при записи в сторедж сервиса отлавливать дубликат". О каком сервисе речь ? Если о том который дает JSON response, то там без вариантов - 3rd party, only poll и никаких вариантов насчет "в консерватории что то поменять". если о том который опрашивает эти 3rd party APIs , дороговато получается тащить all the way to storage. один AWS EMR cluster чего стоит
https://www.youtube.com/watch?v=wOwblaKmyVw
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: JSON dedup

Post by Сабина »

Palych wrote:То есть - несколько сосков к одной емкости?
не только это. грубо говоря надо "отловить момент когда данные поменялись, но лишние дубликаты не записывать".
тащить эти дубликаты all the way to storage выходит дороговато с точки зрения $$$$ и собственно storage resources.
https://www.youtube.com/watch?v=wOwblaKmyVw
Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Re: JSON dedup

Post by Palych »

Если JSON содержит только информацию об изменении (что и где поменялось) - такие запросы не будут уникальными.
Если сосать такие транзакции в несколько соломинок и не удалять запись сразу после отсоса - задача дедупа мне видится не выполнимой в принципе...
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: JSON dedup

Post by Medium-rare »

Не лезя в scalability, в Qt можно просто сравнить два JSON:
http://doc.qt.io/qt-5/qjsondocument.html#operator-eq-eq" onclick="window.open(this.href);return false;
bool QJsonDocument::operator==(const QJsonDocument &other) const

Returns true if the other document is equal to this document.

Code: Select all

if (jsonDoc1 == jsonDoc2)
{
   // no way
}
Очень возможно, что в других фреймворках это тоже есть.
... and even then it's rare that you'll be going there...
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: JSON dedup

Post by Сабина »

Задача оказалась еще проще чем я думала :)! некоторые APIs (FB в частности ) возвращает уникальный хешкод как одно из свойств в ответе.
https://www.youtube.com/watch?v=wOwblaKmyVw
Palych
Уже с Приветом
Posts: 13682
Joined: 16 Jan 2001 10:01

Re: JSON dedup

Post by Palych »

"Где просто - там ангелов сО сто..." :)
User avatar
Sergunka
Уже с Приветом
Posts: 34164
Joined: 03 Dec 2000 10:01
Location: Vladivostok->San Francisco->Los Angeles->San Francisco

Re: JSON dedup

Post by Sergunka »

Сабина wrote:Задача оказалась еще проще чем я думала :)! некоторые APIs (FB в частности ) возвращает уникальный хешкод как одно из свойств в ответе.
В случае с json это может и не прокатить.
"A patriot must always be ready to defend his country against his government." Edward Abbey
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: JSON dedup

Post by Сабина »

Sergunka wrote:
Сабина wrote:Задача оказалась еще проще чем я думала :)! некоторые APIs (FB в частности ) возвращает уникальный хешкод как одно из свойств в ответе.
В случае с json это может и не прокатить.
В этом случае это покатит лучше чем что либо другое
https://www.youtube.com/watch?v=wOwblaKmyVw

Return to “Вопросы и новости IT”