2015-08-12 2 views
0

Я создаю приложение для социальных сетей, где пользователь должен что-то публиковать, и это размещенное содержимое затем передается всем членам в его/ее кругах. Значение запроса переходит в цикл. Это похоже на родословную. Логика работает отлично. Но теперь, когда количество членов в каждом круге продолжает расти, превышение превышает максимальное время выполнения, которое в настоящее время установлено на 90, и это достаточно хорошо.PHP пакетная обработка

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

Любая идея или хотя бы о том, как это можно реализовать. Заранее спасибо.

+0

Почему так требуется 90+ секунд? Профилировали ли вы свой код? Это waaay слишком абстрактно, чтобы ответить. Покажи, не говори. –

ответ

0

Я полагаю, вы используете реляционную БД для этого (например, mysql). По моему опыту, хотя он может работать, он, безусловно, не лучший инструмент для моделирования социальных взаимодействий, потому что он не является масштабируемым/эффективным.

Возможно, вам стоит изучить базу данных NoSQL с поддержкой графика для такого рода проблем, например OrientDB http://orientdb.com/orientdb/.

Не совсем то, что вы предложили, но я думаю, что это спасет вас от многих головных болей в конце.

+0

Привет, Диего, спасибо за ваш быстрый ответ. Мы попытались использовать Neo4j DB, но потом поняли, что мы намного опережаем любые изменения базового ядра в приложении. Именно по этой причине мы теперь пытаемся найти альтернативное решение, которое может вписаться, не изменяя никакой основной логики или архитектуры. – user3227262

+0

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

0

То, что вы ищете, называется Message queuing service.

Как правило, в приложении вы отправляете сообщение, в котором говорится о том, чтобы отправить содержимое членам кругов текущего пользователя. Затем это сообщение будет потребляться асинхронно потребителем (другой исполняемый экземпляр PHP вашего приложения, способный обрабатывать эти сообщения)

Посмотрите на RabbitMQ или Beanstalkd с PHP.

+0

Привет, Яссин, спасибо за ваш быстрый ответ. Я посмотрю ваши варианты. – user3227262

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