Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Промежуточная таблица для связки "многие ко многим" / 10 сообщений из 10, страница 1 из 1
28.04.2014, 00:27:27
    #38627259
murtukov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Промежуточная таблица для связки "многие ко многим"
Здравствуйте, в БД новичок. Интересует такой вопрос: допустим есть таблица пользователей users. Необходимо реализовать возможность добавления пользователям в друзья других пользователей. Для этого мне посоветовали создать ещё одну таблицу relations с полями id1, id2, status.

Например пользователь 111 (я) отправляю запрос на добавление в друзья пользователю 222. Тогда в таблице relations добавляется запись:

id1 | id2 | status
111 222 0

Когда другой пользователь подтвердить запрос, добиватся ещё одна строка:


id1 | id2 | status
111 222 1
222 111 1

Получится что таблица relations будет во много раз больше чем таблица users. Если в базе будет 1 млн пользователей, и у каждого из них по 100 друзей, то в таблице relations будет 200000000 записей.

Будет ли это сильно тормозить БД? Или имеется более рациональный способ организовать систему добавления в друзья?
...
Рейтинг: 0 / 0
28.04.2014, 00:38:28
    #38627262
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Промежуточная таблица для связки "многие ко многим"
murtukovЕсли в базе будет 1 млн пользователей, и у каждого из них по 100 друзей, то в таблице relations будет 200000000 записей.

Будет ли это сильно тормозить БД? Или имеется более рациональный способ организовать систему добавления в друзья?Не нужно заниматься преждевременной оптимизацией. Вот когда будете приближаться к таким величинам, тогда и будет надо думать над этим.
А пока обычной таблицы-связки вполне достаточно.

Я, правда, не понял, зачем тут поле status, но это уже дело хозяйское...
...
Рейтинг: 0 / 0
28.04.2014, 00:52:58
    #38627267
murtukov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Промежуточная таблица для связки "многие ко многим"
miksoft,

а если у меня уже сейчас 1 млн пользователей? Как быть? Лучше заранее все оптимизировать, чем потом исправлять. Даже если не так, ответьте пожалуйста на вопрос, если у вас есть ответ.
...
Рейтинг: 0 / 0
28.04.2014, 08:23:13
    #38627325
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Промежуточная таблица для связки "многие ко многим"
murtukovНапример пользователь 111 (я) отправляю запрос на добавление в друзья пользователю 222. Тогда в таблице relations добавляется запись:

id1 | id2 | status
111 222 0

Когда другой пользователь подтвердить запрос, добиватся ещё одна строка:


id1 | id2 | status
111 222 1
222 111 1А зачем добавлять ещё строку? Статус поменять на единицу и всё.
...
Рейтинг: 0 / 0
28.04.2014, 08:55:16
    #38627343
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Промежуточная таблица для связки "многие ко многим"
murtukovЕсли в базе будет 1 млн пользователейНе будет.
...
Рейтинг: 0 / 0
28.04.2014, 10:11:30
    #38627426
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Промежуточная таблица для связки "многие ко многим"
кстати даmurtukovа если у меня уже сейчас 1 млн пользователей?то вы можете позволить себе нанять специалиста для решения этой задачи
...
Рейтинг: 0 / 0
28.04.2014, 11:19:54
    #38627515
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Промежуточная таблица для связки "многие ко многим"
murtukovmiksoft,

а если у меня уже сейчас 1 млн пользователей?То у вас уже наняты пара квалифицированных DBA и несколько программистов.
murtukovКак быть?Спросить у них.
Но, поскольку их у вас нет, то попытайтесь исходя из текущей нагрузки и посещаемости экстраполировать рост нагрузки в будущее. Но не слишком далекое. Например, на год.
murtukovЛучше заранее все оптимизировать, чем потом исправлять.Нет, преждевременная оптимизация - это зло.
murtukovДаже если не так, ответьте пожалуйста на вопрос, если у вас есть ответ.Например, существуют кластера и шардинг. Существует разделение северов по ролям (веб-фронтенд, веб-бэкенд, БД и т.п.)
В любом случае, когда у вас реально будет миллион пользователей, то одна сабжевая табличка будет лишь одной, далеко не самой острой, проблемой из множества.
...
Рейтинг: 0 / 0
28.04.2014, 11:45:03
    #38627567
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Промежуточная таблица для связки "многие ко многим"
murtukov,

Будет ли это сильно тормозить БД?


Нет.


Или имеется более рациональный способ организовать систему добавления в друзья?


Нет.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
22.07.2015, 13:15:26
    #39013325
JustBear
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Промежуточная таблица для связки "многие ко многим"
Один из вариантов это оптимизировать, разбивка на таблицы по каждому пользователю со ссылками на таблицы друзей в этих таблицах
id1|id2|table|staus
111|222|222_friends|1

id1|id2|table|status
222|111|111_friends|0

Получается если у обоих статус = 1 все ок - друзья, в противном случае тот у кого 1 подписчик или отправлен запрос в друзья
...
Рейтинг: 0 / 0
22.07.2015, 21:43:38
    #39013970
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Промежуточная таблица для связки "многие ко многим"
Это не оптимизация, а почти что наоборот.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Промежуточная таблица для связки "многие ко многим" / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]