Основанная на кэш-памяти очередь сообщений?

Ваш вызов 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 ]

10
задан gravitation 2 November 2016 в 21:18
поделиться

4 ответа

Я был бы очень тщательным использованием Google App Engine Memcache таким образом. Вы правы волноваться о "неожиданных замещениях кэша".

Google ожидает, что Вы будете использовать кэш-память для кэширования данных и не хранения его. Они не гарантируют, что сохранили данные в кэше. Из Документации GAE:

По умолчанию объекты никогда не истекают, хотя объекты могут быть выселены из-за давления памяти.

Править: Всегда существуют Простые Услуги Организации очередей Amazon. Однако это не может встретить уровни цены/производительности ни один как:

  1. Была бы задержка вызова с Google на серверы Amazon.
  2. Вы закончили бы тем, что платили дважды за весь трафик данных - оплата его для отъезда Google и затем оплаты снова, чтобы это вошло в Amazon.
9
ответ дан 3 December 2019 в 22:39
поделиться

I have started a Simple Python Memcached Queue, it might be useful: http://bitbucket.org/epoz/python-memcache-queue/

4
ответ дан 3 December 2019 в 22:39
поделиться

Если Вы довольны возможностью проигрывающих данных, любой ценой идете вперед. Примите во внимание, тем не менее, что, хотя кэш-память обычно имеет более низкую задержку, чем хранилище данных, как что-либо еще, это пострадает, если у Вас будет высокий показатель атомарных операций, Вы хотите выполниться на единственном элементе. Это не проблема хранилища данных - это - просто проблема необходимости сериализировать доступ.

Приводя это к сбою, SQS Amazon походит на жизнеспособный вариант.

1
ответ дан 3 December 2019 в 22:39
поделиться

До реализации Google надлежащая очередь заданий, почему бы не использовать хранилище данных? Как другие сказали, кэш-память является просто кэшем и могла потерять объекты очереди (который будет.. плохо)

Хранилище данных должно быть больше, чем достаточно быстро для того, в чем Вы нуждаетесь - у Вас просто была бы простая модель Job, которая будет более гибкой, чем кэш-память, поскольку Вы не ограничены парами ключ/значение

0
ответ дан 3 December 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: