База данных для запуска микроблогов
Я сделаю веб-сервис микроблогов (для школы, так что не жалейте меня на отсутствие новой идеи), и я волнуюсь, что БД часто может быть перегружена (пользователь может подписаться на других пользователей или даже пометить, поэтому я предполагаю, что SELECT
будет тяжело - проверьте 20 последних сообщений, которые содержат все теги наблюдения и пользователя).
Моя идея состоит в том, чтобы создать еще одну таблицу и хранить в ней только statusID и userID (кто должен забрать сообщение). Опасность в том, что если у какого-либо тега или пользователя много подписчиков, будет много записей с этим идентификатором статуса. Так это хорошая идея? Или, может быть, лучше использовать отношение M2M? (один статус -> много получателей)
3 ответа
Я думаю, что большинство баз данных могут легко обрабатывать большие наборы записей. Ответственность за правильную настройку индексов лежит на вашем дизайне. Если вы создаете правильные индексы, предложения select должны работать очень хорошо.
Я бы пошел с таблицей пользователей, таблицей, в которой есть отношение m2m между пользователями и таблицей сообщений.
Затем вы можете сделать один выбор, чтобы найти всех пользователей, за которыми следует пользователь, а затем второй выбор, чтобы получить все интересующие сообщения (сортируя и ограничивая результаты соответствующим образом). Расширить это до тегов должно быть довольно просто.
Такой дизайн должен подойти для большого числа пользователей и сообщений, если вы индексируете нужные столбцы. Если у вас есть большие возможности, вы также можете запускать таблицы пользователей и таблицы сообщений на разных серверах или иметь реплики только для чтения. Я бы даже не волновался об этом на данный момент - тебе нужно быть огромным.
При реализации Collabinate ( http://www.collabinate.com/), сервисного движка для микроблогов и общих потоков активности, я использовал графовую базу данных. Тот факт, что люди создают посты и следят за другими людьми, поддается графической структуре. При правильных отношениях и алгоритмах это может быть очень эффективным и производительным решением.