JSON dedup
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
JSON dedup
Никому не приходилось решать подобную задачу ? Для данного request URL нужно получить несколько раз подрял JSON response и определить эдентичны они или нет ? Нужно какое-нибудь очень простое решение и очень scalable. AWS based.
Была мысль построить простенький вебсервис на Ноде, который будет перехватывать request, получать response, расcчитвать hash of stringified JSON и делать lookup в Dynamo DB. Если такой уже в базе есть - заменять actual response на какую нибудь ошибку - "дубликат бла бла".
Сказали что hash стринга это плохо, потому что поля могут поменяться местами ( чего в реальной жизни в этом API не наблюдалось).
Интересно какие еще возможны варианты ?
Была мысль построить простенький вебсервис на Ноде, который будет перехватывать request, получать response, расcчитвать hash of stringified JSON и делать lookup в Dynamo DB. Если такой уже в базе есть - заменять actual response на какую нибудь ошибку - "дубликат бла бла".
Сказали что hash стринга это плохо, потому что поля могут поменяться местами ( чего в реальной жизни в этом API не наблюдалось).
Интересно какие еще возможны варианты ?
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 9195
- Joined: 04 Mar 2011 03:04
- Location: SFBA
Re: JSON dedupe
А чем нибудь "съесть" это 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
И что эта QT-шная функция будет всегда и порядок элементов выдавать одинаковый ? Даже если они в самом API могут быть периодически переставлены ?Medium-rare wrote:А чем нибудь "съесть" это JSON и нормализовать через функцию, например, дать, скажем, компактное представление. Функция одна и та же будет для всех "компактов", одинаковый подход гарантирован. Тогда строка с функционально одинакового JSON будет гарантировано одинаковой.
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 8632
- Joined: 22 Mar 2011 01:40
Re: JSON dedup
json diff ?
-
- Уже с Приветом
- Posts: 9195
- Joined: 04 Mar 2011 03:04
- Location: SFBA
Re: JSON dedupe
КМК, в разных фреймворках представление документа трансормируется внутри в "дерево" с элементами, может, и уровни сортируя,. Ну, а раз нам дают снова строчку получить, то можно попробовать, нарочно переставив какие-то элементы JSON на одном уровне?Сабина wrote: И что эта QT-шная функция будет всегда и порядок элементов выдавать одинаковый ? Даже если они в самом API могут быть периодически переставлены ?
... and even then it's rare that you'll be going there...
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: JSON dedup
Как-то не очень scalable выглядит... А может в "консерватории" что-то поменять?Сабина wrote:Никому не приходилось решать подобную задачу ? Для данного request URL нужно получить несколько раз подрял JSON response и определить эдентичны они или нет ? Нужно какое-нибудь очень простое решение и очень scalable. AWS based.
Была мысль построить простенький вебсервис на Ноде, который будет перехватывать request, получать response, расcчитвать hash of stringified JSON и делать lookup в Dynamo DB. Если такой уже в базе есть - заменять actual response на какую нибудь ошибку - "дубликат бла бла".
Починить клиента, чтобы не повторялся, или наоборот - при записи в storage сервиса отлавливать дубликат?...
Если есть доверие к клиенту - можно и так, а ещё лучше бы какой-то ID выделить для запросов и сравнивать их...Сказали что hash стринга это плохо, потому что поля могут поменяться местами ( чего в реальной жизни в этом API не наблюдалось).
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: JSON dedup
Увы, но это не вариант когда вы можете слелать только poll, не pushPalych wrote:Как-то не очень scalable выглядит... А может в "консерватории" что-то поменять?Сабина wrote:Никому не приходилось решать подобную задачу ? Для данного request URL нужно получить несколько раз подрял JSON response и определить эдентичны они или нет ? Нужно какое-нибудь очень простое решение и очень scalable. AWS based.
Была мысль построить простенький вебсервис на Ноде, который будет перехватывать request, получать response, расcчитвать hash of stringified JSON и делать lookup в Dynamo DB. Если такой уже в базе есть - заменять actual response на какую нибудь ошибку - "дубликат бла бла".
Починить клиента, чтобы не повторялся, или наоборот - при записи в storage сервиса отлавливать дубликат?...Если есть доверие к клиенту - можно и так, а ещё лучше бы какой-то ID выделить для запросов и сравнивать их...Сказали что hash стринга это плохо, потому что поля могут поменяться местами ( чего в реальной жизни в этом API не наблюдалось).
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: JSON dedup
То есть - несколько сосков к одной емкости?
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: JSON dedup
ага заметила только что "при записи в сторедж сервиса отлавливать дубликат". О каком сервисе речь ? Если о том который дает 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
не только это. грубо говоря надо "отловить момент когда данные поменялись, но лишние дубликаты не записывать".Palych wrote:То есть - несколько сосков к одной емкости?
тащить эти дубликаты all the way to storage выходит дороговато с точки зрения $$$$ и собственно storage resources.
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: JSON dedup
Если JSON содержит только информацию об изменении (что и где поменялось) - такие запросы не будут уникальными.
Если сосать такие транзакции в несколько соломинок и не удалять запись сразу после отсоса - задача дедупа мне видится не выполнимой в принципе...
Если сосать такие транзакции в несколько соломинок и не удалять запись сразу после отсоса - задача дедупа мне видится не выполнимой в принципе...
-
- Уже с Приветом
- Posts: 9195
- Joined: 04 Mar 2011 03:04
- Location: SFBA
Re: JSON dedup
Не лезя в scalability, в Qt можно просто сравнить два JSON:
http://doc.qt.io/qt-5/qjsondocument.html#operator-eq-eq" onclick="window.open(this.href);return false;
Очень возможно, что в других фреймворках это тоже есть.
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
Задача оказалась еще проще чем я думала ! некоторые APIs (FB в частности ) возвращает уникальный хешкод как одно из свойств в ответе.
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 13682
- Joined: 16 Jan 2001 10:01
Re: JSON dedup
"Где просто - там ангелов сО сто..."
-
- Уже с Приветом
- Posts: 34164
- Joined: 03 Dec 2000 10:01
- Location: Vladivostok->San Francisco->Los Angeles->San Francisco
Re: JSON dedup
В случае с json это может и не прокатить.Сабина wrote:Задача оказалась еще проще чем я думала ! некоторые APIs (FB в частности ) возвращает уникальный хешкод как одно из свойств в ответе.
"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
В этом случае это покатит лучше чем что либо другоеSergunka wrote:В случае с json это может и не прокатить.Сабина wrote:Задача оказалась еще проще чем я думала ! некоторые APIs (FB в частности ) возвращает уникальный хешкод как одно из свойств в ответе.
https://www.youtube.com/watch?v=wOwblaKmyVw