Я работаю над проектом, который сидит на большой ишевой куче необработанных данных, агрегаты, из которых используются для управления публичным информационным сайтом (некоторые простые агрегаты, такие как различные итоговые и верхние десятки итогов, а некоторые несколько - более сложные агрегаты). В настоящее время мы обновляем его раз в несколько месяцев, что связано с добавлением новых данных и, возможно, обновлением или удалением существующих записей и повторным запуском всей агрегации в автономном режиме, после чего новые агрегаты будут развернуты для производства.
Мы заинтересованы в увеличении частоты обновлений, так что повторное агрегирование всего с нуля нецелесообразно, поэтому мы хотели бы выполнить скользящую агрегацию, которая обновляет существующие агрегаты, чтобы отражать новые, измененные или удаленные записи.
Реализация CouchDB MapReduce предлагает примерно тот объект, который я ищу: он хранит промежуточное состояние задач MapReduce в большом B-дереве, где вывод карт находится на листьях, а операции уменьшения постепенно объединяются. Новые, обновленные или удаленные записи приводят к тому, что поддеревья должны быть помечены как грязные и пересчитанные, но нужно затронуть только соответствующие части дерева сокращения, а промежуточные результаты из нечистых поддеревьев могут быть повторно использованы как есть.
Однако по ряду причин (неопределенность в отношении будущего CouchDB, отсутствие удобной поддержки одноразовых запросов без MR, текущая реализация SQL-heavy и т.д.), мы бы предпочли не использовать CouchDB для этого проекта, поэтому я ищу другие реализации такого рода инкрементной стратегии сокращения дерева по дереву (возможно, но не обязательно, на вершине Hadoop или аналогичной).
Чтобы упредить некоторые возможные ответы:
- Я знаю о предполагаемой поддержке MongoDB для постепенного MapReduce; это не реальная вещь, на мой взгляд, потому что она действительно работает только для добавления в набор данных, а не для обновления или удаления.
- Я также знаю документ Incoop. Это описывает именно то, что я хочу, но я не думаю, что они сделали свою реализацию общедоступной.