2012-02-27 2 views
4

В настоящее время у нас есть приложение appengine (java) с миллионами сущностей. Мы делаем много отчетов с использованием карты, снижающей рамки + cron до панелей управления и т. Д.Динамический язык запросов с использованием MapReduce on Appengine

Однако мы хотели бы иметь возможность запускать adhoc-запросы по всему нашему набору данных. То, как мы делаем это сейчас, - это написать mapreduce, развернуть, запустить mapreduce, увидеть результаты. Нам не нужно делать шаг развертывания. То есть, просто перейдите к некоторому интерфейсу администратора, укажите наш запрос и, возможно, какой-то пользовательский код, чтобы выполнить пост-обработку, а затем просмотреть результаты. Мы бы сделали гораздо больше специальных запросов, если бы нам не приходилось развертывать их каждый раз.

Кто-нибудь сделал что-то подобное? Что ты изучал? Какие-нибудь хорошие стратегии?

ответ

2

Это пример Python, но я уверен, что вы можете сделать то же самое с Java. Одно решение, если вы просто хотите считать объекты фильтрами. Вы можете создать картограф, который обрабатывать фильтры из mapreduce.yaml

- name: Query on Actors 
    mapper: 
    handler: mapper_api.query_process 
    input_reader: google.appengine.ext.mapreduce.input_readers.DatastoreInputReader 
    params: 
    - name: entity_kind 
     value: common.models.Actor 

    - name: filters 
     value: age<27, name=toto 

Тогда в вашем mapper_api.py Вы должны взорваться и обрабатывать каждый фильтр:

def query_process(entity): 
    ctx = context.get() 
    pms = ctx.mapreduce_spec.mapper.params 

    filters = pms['filters'] 

    if match(entity, filters): 
    yield op.counters.Increment("matched") 

Так что теперь в вашей/MapReduce вы можете выбрать картограф Query on Actors и передать ему несколько фильтров.

+0

Я не думаю, что вы можете сделать это на Java. Вы должны перебирать весь набор данных. Я в порядке с этим, поэтому мне, возможно, придется писать код, который принимает эти фильтры в виде строк, преобразует их в код динамически, чтобы увидеть, соответствует ли сущность фильтру. Это должно было быть сделано до ... – aloo

Смежные вопросы