[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP & MySQL как правильно организовать бд
filippok
Пишу социальную сеть и не могу придумать как же мне сделать базы.
Сейчас сделал так: пользователь регистрируется и для него создается новая БД(db344) и к ней конфиг с его ID(db344.php). После авторизации по его id просто подхватывается нужный файл с настройками например db344.php, в котором указаны логин пароль и адрес для доступа к базе данных. Таким образом я могу подключать новые сервера баз данных и быстро переносить туда сильно загруженные страницы.
Мне интересно послушать ваши идеи по этому поводу
Как вы думаете, правильное ли это решение?



Спустя 2 часа, 19 минут, 59 секунд (29.06.2012 - 09:21) vagrand написал(а):
А как вы собираетесь осуществлять поиск пользователей и вывод списка друзей например?

Спустя 11 минут, 10 секунд (29.06.2012 - 09:33) filippok написал(а):
Цитата (vagrand @ 29.06.2012 - 06:21)
А как вы собираетесь осуществлять поиск пользователей и вывод списка друзей например?

таблица друзей

user_id | name
-----------------------------
564 | Сидоров Иван

этих данных достаточно чтобы показать в списке моих друзей фотографию друга, его имя, ссылку на его страницу или сразу написать ему сообщение, а для поиска у меня будет создана отдельная база на отдельном сервере и заполнена специальным образом (оптимизирована) как раз для быстрого поиска и тем самым не будет трогать основные базы

Спустя 9 минут, 44 секунды (29.06.2012 - 09:42) Invis1ble написал(а):
для каждого юзера отдельная БД ? blink.gif

Спустя 5 минут, 51 секунда (29.06.2012 - 09:48) filippok написал(а):
Цитата (Invis1ble @ 29.06.2012 - 06:42)
для каждого юзера отдельная БД ? blink.gif

Но не совсем для каждого, там пользователи по категориям делятся, для некоторых создается, а для некоторых нет, это у меня как сервис на Ucoz`e. Там же тоже создается база если ты сайт сделал, а если как пользователь, то ничего не создается.

Спустя 2 минуты, 55 секунд (29.06.2012 - 09:51) vagrand написал(а):
Цитата
таблица друзей


И зачем тогда дублировать данные? К тому же указанных вами данных явно недостаточно, нужна еще аватарка, статуст онлайн или офлайн. А как же друзья друзей и прочее?

Спустя 15 минут, 41 секунда (29.06.2012 - 10:07) filippok написал(а):
Цитата (vagrand @ 29.06.2012 - 06:51)
Цитата
таблица друзей


И зачем тогда дублировать данные? К тому же указанных вами данных явно недостаточно, нужна еще аватарка, статуст онлайн или офлайн. А как же друзья друзей и прочее?

Дублировать необходимо для уменьшения запросов на основную базу.
В таблице указан user_id(например 564) это много о чем говорит например:
ссылка на аватарку - http://img.site.ru/ava/564.jpg
ссылка на его страницу http://site.ru/id/564 там же можно и его друзей глянуть.
А вот про статус On или Off можно и запрос на основную бд сделать, ведь у меня есть его id

Спустя 15 минут, 54 секунды (29.06.2012 - 10:23) vagrand написал(а):
Ну тогда подумайте о следующем, вот у вас скажем 1000 пользователей, соответствено у вас 1001 БД на допустим на 5-ти серверах, т.е. по 200 БД на сервере и вот вам например надо в пределах одной страницы получить данные из 5-ти БД, т.е. вы открываете уже не один конект к БД, а 5, а если учесть что еще и основная БД есть то 6-ть. Дале очень вероятно что все 5-ть конектов будут к разным серверам. Таким образом один пользователь создает нарузку на все 5-ть серверов и я не вижу тут никакого выигрыша.
Можно спроектировать по другому:
1. Одна БД;
2. Основная инфа о пользователе кешируется или даже напрямую хранится пусть в той же MongoDB.
Тогда для получения инфы о конкретном пользователе по его ID, надо будет сделать звпрос к MongoDB, а судя по е описаниям она такие запросы выполняет ну очень быстро.

Спустя 32 минуты, 20 секунд (29.06.2012 - 10:55) filippok написал(а):
Так то действительно я и не подумал, что все запросы пойдут последовательно, а не параллельно, так бы запрос выполнился в 5 раз быстрее, но не факт что базы как раз будут на разных серверах, а про "MongoDB" впервые слышу.
А что если таблицу сообщений отделить от основной бд и кинуть на другой сервер, ведь она будет чаще перезаписываться и создавать очередь.
Я просто боюсь, что база у меня сильно вырастит и ей потом будет сложно управлять, вот и думаю заранее.

может у кого есть какие наработки по схемам и структурам баз данных? И вообще стоит ли делить базы на части?

Спустя 6 минут, 59 секунд (29.06.2012 - 11:02) vagrand написал(а):
Цитата
Так то действительно я и не подумал, что все запросы пойдут последовательно, а не параллельно


Для одного пользователя сами запросы пойдут последовательно, но вот конекты к БД он будет держать параллельно.

Спустя 7 часов, 48 минут, 43 секунды (29.06.2012 - 18:51) filippok написал(а):
Я весь день думал над базой и пришел снова к тому же. Как я понял вы не знаете масштабы проекта. А дело вот в чем, это коммерческая социальная сеть(КСС). Регистрируется у меня предприятие и ему сразу создается сайт. На этом сайте будут различные модули такие как: новости; обратная связь; онлайн заказы и т.п. Они то и будут требовать отдельности базы.

Может кто хочет принять участие rolleyes.gif буду полностью переписывать, а сейчас это как набросок, пишу на фраемворке cakephp 2.0
http://zsit.ru
логин: 101
пароль: 101

Спустя 6 минут, 23 секунды (29.06.2012 - 18:57) I++ написал(а):
https://www.google.ru/search?q=%D0%BF%D1%80...%BD%D1%8B%D1%85

+1 в таком проекте за транзакты.

Спустя 25 минут, 18 секунд (29.06.2012 - 19:22) filippok написал(а):
Цитата (I++ @ 29.06.2012 - 15:57)
+1 в таком проекте за транзакты.

Не понял в каком смысле? )))

Спустя 34 минуты, 1 секунда (29.06.2012 - 19:56) filippok написал(а):
скорее всего у меня по транзакциям и будет построен проект

Спустя 13 часов, 58 минут, 16 секунд (30.06.2012 - 09:55) vagrand написал(а):
Цитата
Как я понял вы не знаете масштабы проекта. А дело вот в чем, это коммерческая социальная сеть(КСС). Регистрируется у меня предприятие и ему сразу создается сайт.


Вот интересно и каким образом я мог об этом догадаться по вашему первому посту? smile.gif

Спустя 11 минут, 29 секунд (30.06.2012 - 10:06) filippok написал(а):
Цитата (vagrand @ 30.06.2012 - 06:55)
Вот интересно и каким образом я мог об этом догадаться по вашему первому посту?


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

P.S. под пользователем подразумевается предприятие, ведь это коммерческая сеть

Спустя 3 минуты, 1 секунда (30.06.2012 - 10:09) vagrand написал(а):
Цитата
Получается, что я правильно сделал, каждому пользователю своя база данных.


Првильно вы сделали или нет покажет практика. Но для такого проекта это боле обосновано, чем для обычной социальной сети.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.