Функция слияния Storm Trident, сохраняющая временной порядок

Скажем, у меня есть два потока:

Stream 1: [1,3],[2,4]
Stream 2: [2,5],[3,2]

Обычное слияние создаст поток 3, например:

[1,3],[2,4],[2,5],[3,2]

Я хотел бы объединить поток, сохраняя порядок, в котором кортеж был выпущен, поэтому, если [2,5] был выпущен в момент 1, [1,3] был выпущен во время 2, [3,2] во время 3 и [2,4] во время 4, результирующий поток будет:

[2,5],[1,3],[3,2],[2,4]

Можно ли как-то это сделать и если да, то как? Некоторый пример кода будет оценен, поскольку я полный новичок Trident, который недавно был вовлечен в проект, основанный на Trident.

Заранее спасибо за помощь,

Эли


person E Shindler    schedule 06.11.2013    source источник


Ответы (1)


Вы должны использовать внешнее хранилище данных, используя постоянный трезубец. Я думаю, отсортированный набор Redis должен служить вашей цели.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Если вы пройдете через этот https://github.com/nathanmarz/storm/wiki/Trident-tutorial, вы можете узнать, как использовать кэш памяти в качестве хранилища для подсчета слов.

Точно так же вы можете написать потоковую резервную копию в Redis (если вы не знакомы с пробной версией Redis, http://redis.io/commands#sorted_set). Я думаю, что отсортированный набор redis послужит целью для вашего случая.

Если вам нужно постоянное хранилище для ваших данных, вы можете подумать об использовании другого решения NOSQL, такого как mongo, и тогда вы всегда сможете легко проиндексировать свои окончательные данные в свое время. Это легко обеспечит нужную вам функциональность сортировки. А что не так кто-то уже написал трезубец монго, https://github.com/sjoerdmulder/trident-mongodb< /а>.

Дайте мне знать, если вы все еще смущены и о чем.

person Global Warrior    schedule 06.11.2013
comment
Можете ли вы немного уточнить, с небольшим количеством примера кода. Я настоящий новичок. Спасибо большое - person E Shindler; 07.11.2013
comment
В настоящее время я работаю с MySQL в качестве внешнего источника данных. В конце концов мне придется использовать что-то более сложное, но пока этого достаточно. Большое спасибо за вашу помощь. - person E Shindler; 07.11.2013