Ваш вызов om.readValue()
возвращает Map
:
Map>> m1 = om.readValue(a1, Map.class);
Map>> m2 = om.readValue(a2, Map.class);
System.out.println(m1); //{a=[{b=1}, {b=2}]}
System.out.println(m2); //{a=[{b=2}, {b=1}]}
Списки {b=1}, {b=2}
и {b=2}, {b=1}
не равны из-за их порядка. Поэтому я преобразовал список в HashSet и затем запустил сравнение:
Map>> m1Collected = m1.entrySet().stream()
.map(e -> Map.entry(e.getKey(), new HashSet<>(e.getValue())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
Map>> m2Collected = m2.entrySet().stream()
.map(e -> Map.entry(e.getKey(), new HashSet<>(e.getValue())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println(m1Collected.equals(m2Collected)); //prints true
Вы также можете использовать JSONassert со строгим режимом, установленным в false, для сравнения JSON, игнорирующих порядок. [119 ]
Я был бы очень тщательным использованием Google App Engine Memcache таким образом. Вы правы волноваться о "неожиданных замещениях кэша".
Google ожидает, что Вы будете использовать кэш-память для кэширования данных и не хранения его. Они не гарантируют, что сохранили данные в кэше. Из Документации GAE:
По умолчанию объекты никогда не истекают, хотя объекты могут быть выселены из-за давления памяти.
Править: Всегда существуют Простые Услуги Организации очередей Amazon. Однако это не может встретить уровни цены/производительности ни один как:
I have started a Simple Python Memcached Queue, it might be useful: http://bitbucket.org/epoz/python-memcache-queue/
Если Вы довольны возможностью проигрывающих данных, любой ценой идете вперед. Примите во внимание, тем не менее, что, хотя кэш-память обычно имеет более низкую задержку, чем хранилище данных, как что-либо еще, это пострадает, если у Вас будет высокий показатель атомарных операций, Вы хотите выполниться на единственном элементе. Это не проблема хранилища данных - это - просто проблема необходимости сериализировать доступ.
Приводя это к сбою, SQS Amazon походит на жизнеспособный вариант.
До реализации Google надлежащая очередь заданий, почему бы не использовать хранилище данных? Как другие сказали, кэш-память является просто кэшем и могла потерять объекты очереди (который будет.. плохо)
Хранилище данных должно быть больше, чем достаточно быстро для того, в чем Вы нуждаетесь - у Вас просто была бы простая модель Job, которая будет более гибкой, чем кэш-память, поскольку Вы не ограничены парами ключ/значение