Как реализовать персонализированный поток событий?

Для кода выше...//* [содержит (@prop, 'нечто')]

5
задан googletorp 6 December 2009 в 14:26
поделиться

5 ответов

Я думаю, что идеального решения не существует - зависит от того, какие операции более важны для вашего приложения. Я считаю, что Silicon Alley Insider хранит комментарии, вложенные, например, в MongoDB. Это усложняет вопрос, о котором вы говорите.

Один из вариантов - хранить на верхнем уровне сообщения список всех комментаторов в массиве. Думайте об этом как об денормализованных данных. Тогда можно будет легко найти все сообщения, в которых участвует определенный комментатор. Затем для детализации вы используете map / reduce или db.eval (), чтобы получить информацию о вложенном посте внутри.

Еще одно замечание - если вы имеете дело с одним документом, db.eval (), вероятно, легче чем карта / уменьшить. $ where также является вариантом, но может быть медленным, поэтому мне нравится упомянутый выше дополнительный «список комментаторов» - не так просто индексировать этот массив (см. «Multikey» в документации).

См. также:

Еще одно замечание: если вы имеете дело с одним документом, db.eval (), вероятно, легче, чем map / reduce. $ where также является вариантом, но может быть медленным, поэтому мне нравится упомянутый выше дополнительный «список комментаторов» - не так просто индексировать этот массив (см. «Multikey» в документации).

См. также:

Еще одно замечание: если вы имеете дело с одним документом, db.eval (), вероятно, легче, чем map / reduce. $ where также является вариантом, но может быть медленным, поэтому мне нравится упомянутый выше дополнительный «список комментаторов» - не так просто индексировать этот массив (см. «Multikey» в документации).

См. также: люди, которые видят их в ленте новостей). Вы можете получить много сообщений на событие, но это сделает запросы к интерфейсу намного быстрее и переложит работу на фоновые процессы.

Я не использовал Gearman, но если это что-то вроде вещь, которая позволяет загружать среду вашего приложения в фоновом режиме и получать события для обработки через очередь, тогда это, вероятно, хорошая идея.

Мое простое решение состояло в том, чтобы свернуть свою собственную, используя beanstalkd и мои собственные скрипты PHP.

2
ответ дан 14 December 2019 в 13:38
поделиться

Facebook разработал собственную базу данных для такого рода вещей и открыл ее исходный код, я мало что об этом знаю, но полагаю, что стоит посмотреть .

1
ответ дан 14 December 2019 в 13:38
поделиться

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

1
ответ дан 14 December 2019 в 13:38
поделиться

Не знаю, как структурирована ваша БД (возможно, вы захотите рассказать нам больше), но что-то очевидное, например

SELECT events.* FROM events, event_tags, user_tags
     WHERE event_tags.event_id = events.id 
         AND event_tags.tag_id = user_tags.tag_id
         AND  user_tags.user_id = <$user_id>

, мне не кажется слишком сложным, если у вас есть все индексы над местом

1
ответ дан 14 December 2019 в 13:38
поделиться

Вы смотрели модуль Activity ? Вот отрывок со страницы проекта:

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

Мне будет любопытно, что вы придумаете, потому что в ближайшем будущем нужно будет сделать что-то подобное.

1
ответ дан 14 December 2019 в 13:38
поделиться
Другие вопросы по тегам:

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