Архитектура новостной ленты

#architecture #c #facebook

#архитектура #c #Facebook

Вопрос:

Для проекта, над которым я работаю, мне нужно реализовать новостную ленту, похожую на Facebooks, с той разницей, что она будет обновляться со скоростью, аналогичной скорости чата, и что в ленту будут вноситься пользователи (только обновления статуса). Я планировал использовать Thrift с php на клиенте и C на сервере.

Поскольку частота обновления на сервере должна быть очень высокой, я думал сохранить последние ~ 20 записей в лентах в виде связанного списка (или аналогичной структуры) в памяти для быстрого доступа (поскольку любому, кто обновляет, нужны только последние записи), отправляя все старые записи в базу данных mysql для хранения.

Кажется ли это подходящей архитектурой для данной реализации? Если да, то какой был бы хороший способ отправить старые записи в базу данных?

Ответ №1:

Отправляйте все элементы непосредственно в базу данных, но сохраняйте список с последними 100 или около того.

Если вы используете шаблон репозитория, сохраните список внутри вашего класса репозитория и добавьте вызываемый метод GetLatest . Остальным частям вашего приложения должно быть все равно, кэшированы они или нет.

Если вы используете nhibernate, вы можете включить кэширование и попросить nhibernate позаботиться об этом за вас.

Ответ №2:

Рассматриваю возможность использования memcached перед вашей базой данных. Это то, для чего он разработан.

Но прежде чем вы даже это сделаете, просто реализуйте вещь без кэширования. Посмотрите, как это происходит. Возможно, это будет нормально работать с довольно скучной реализацией

Ответ №3:

Извините за упрощенный ответ, но я бы отправлял записи в базу данных по мере их поступления на сервер, а не как «устаревшие». Нет смысла ждать. Затем вы можете использовать свою базу данных в качестве хранилища и запрашивать ее при поступлении нового клиента для последних 20 записей.