2016-11-09 7 views
0

У нас есть приложение в Django, работающее с базой данных PGSQL. Одной из функций, которые мы создали для поддержки, является обмен сообщениями в реальном времени с нашим пользовательским интерфейсом, когда данные обновляются в БД.Обмен сообщениями в реальном времени

Так, например, мы показываем содержимое таблицы клиентов в нашем пользовательском интерфейсе, так как записи добавляются/удаляются/обновляются из базы данных клиентского БД, мы эхо обновляем наши пользовательские интерфейсы в режиме реального времени через некоторый redis /socket.io/node.js магия.

В настоящее время мы развернули собственное решение для всего этого, используя перегруженные методы save() в моделях таблицы Django. Это действительно хорошо работает для наших текущих функций, но по мере того, как таблицы продолжают расти в данные GB, он начинает замедляться на некоторых более крупных таблицах, так как наш движок просматривает текущие «подписанные» пользовательские интерфейсы и сообщения соответственно, какие обновления необходимы, как которые клиенты.

Любопытно, что другие варианты могут существовать здесь. Я считаю, что MongoDB и другие двигатели типа no-sql поддерживают некоторые конструкции, подобные этому из коробки, но я не нахожу точный удар, когда Googling для более эффективных решений.

+0

вы можете интегрировать внутреннюю связь для системы поддержки клиентов в реальном времени. Https://www.intercom.com – Satendra

ответ

1

В настоящее время мы развернули собственное решение для всего этого, используя перегруженные методы save() в моделях таблицы Django.

Вместо того, чтобы работать на уровне приложения, вы можете захотеть работать на нижнем уровне базы данных.

Добавьте триггер PostgreSQL после вставки строки и используйте pg_notify для уведомления внешних приложений об изменении.

Тогда в NodeJS:

var PGPubsub = require('pg-pubsub'); 

var pubsubInstance = new PGPubsub('postgres://[email protected]/tablename'); 

pubsubInstance.addChannel('channelName', function (channelPayload) { 
    // Handle the notification and its payload 
    // If the payload was JSON it has already been parsed for you 
}); 

См that и that.

И вы сможете это сделать в Python https://pypi.python.org/pypi/pgpubsub/0.0.2.

Наконец, вы можете использовать data-partitioning в PostgreSQL. Короче говоря, у PostgreSQL есть все, что вам нужно :)

+0

Спасибо, человек, это было областью, на которую мне нужно было указать. Как только я знаю, что делать в Google, я могу наложить много хитов на это. Этот вопрос, в частности, касается того, к чему я направляюсь: http://stackoverflow.com/q/21117431/2123176 – slumtrimpet

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