Как стать автором
Обновить

Комментарии 16

Осталось узнать какова производительность этого, гм, фреймворка. Пока чем-то напоминает как раз тот самый reduce.
Думаю вы зря так про js с Map-Reduce, правда я его использую в CouchDB и там не ad-hoc.
В кауче божественный map-reduce!
Производительность относительно M/R выше. Пока еще достаточно много ограничений, но по моим тестам на моих данных быстрее от 2 до 10 раз. Хотя заметно, что кое-где пока что не использует индексы. Впрочем, от distinct мне тоже не удалось добиться консистентной работы с индексами.
c текущим map/reduce еще ведь/ проблема что одновременно выполняется только 1 map reduce, а если новые функции не используют javascript то такого ограничения там не будет.
А если в процессе агрегации какой-то элемент изменяет свои данные, как она себя ведёт?
Думаю, агрегация вешает write lock.
Главное использовать подходящие инструменты в любой ситуации, иначе получается вот это:

Must. Use. Mongo. DB. It. Is. Web. Scale. www.youtube.com/watch?v=b2F-DItXtZs
Я вот думаю: а не проще ли было реализовать SQL синтаксис. Он многим знаком, привычен.

У меня есть сомнения насчет читабельности и сопровождаемости вот такого:
db.zoo.aggregate({$project: {name: 1, holidays: 1}}, {$unwind: "$holidays"},{$match: {holidays : {$gt: -1}}}, {$project: {holidays: 1, _id: 0}});
В реальных проектах это будет в 10 раз сложнее.
Как раз наоборот, каждый шаг прост и понятен. А SQL обычно превращается в гигантский «blob-запрос», который нельзя трогать руками иначе всё сломается. Ну и здесь еще соль в том, что всё поддаётся концепции map/reduce (по сути, этот язык — надстройка над типичными операциями map/reduce), а потому все данные проходят через некоторые пайпы, а значит всё прозрачно с точки зрения памяти, необходимой для обработки данных.
Читаемость sql, вы шутите?
Не самый удачный пример sql запроса, но такое тоже бывает:

select left_id, right_id from
(
select max(W.COUNTS.TIME_START) maxtime, W.COUNTS.left_id, W.COUNTS.right_id  from
(
select correct.* from
(
select sub1.* from
(
select W.COUNTS.left_id, W.COUNTS.right_id from
W.COUNTS, W.ORDER, W.CLIENT
where W.CLIENT.NET = 2
and W.ORDER.ID = W.CLIENT.ID
and W.COUNTS.ID = W.ORDER.ID
group by W.COUNTS.left_id, W.COUNTS.right_id
) sub1, W.CHANGES
where W.CHANGES.left_id = sub1.left_id
and W.CHANGES.right_id = sub1.right_id
and (W.CHANGES.TYPE = 1 or W.CHANGES.TYPE = 2 or W.CHANGES.TYPE = 0)
and [CHTIME] > '2010-1-1' and [CHTIME] < '2010-9-1'
)correct, W.EMPLOYEES
where W.EMPLOYEES.left_id = correct.left_id
and W.EMPLOYEES.right_id = correct.right_id
and W.EMPLOYEES.STATE <= 3
)sub2, W.COUNTS
where W.COUNTS.left_id = sub2.left_id
and W.COUNTS.right_id = sub2.right_id
group by W.COUNTS.left_id, W.COUNTS.right_id
)wtime
where maxtime < '2012-2-27'
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Такие структуры кстати проще будет генерировать, чем SQL.
Спасибо за статью.
+1 в карму ;)
спасибо автору, очень полезная статья
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации