Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проектирование БД для сайта знакомств

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Toxa
Отправлено: 23 Декабря, 2012 - 23:49:07
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


Всем привет! Заголовок многообещающий, но на деле вопросы простые. Их два.

1) Как бы вы организовали хранение личной инфы о пользователе? В одной таблице или же в нескольких?
Ситуация в том, что полей может быть очень много
    логин
    пароль
    емаил
    телефон
    страна
    город
    пол
    возраст
    скайп
    аська
    рост
    вес
    дети
    отношение к курению
    ...

Рассматриваю два варианта:

Одна таблица. Плюсы: простота выборки. Минусы: большая нагрузка на сервер. Если пользователей ~N млн., а нам надо выбрать только тех, кто online, вычитая из текущей даты дату последного клика, то при такой структуре будут тормоза ого-го.

Две и более таблиц. Плюсы: при малом количестве полей небольшая нагрузка. Минусы: сложные связи между таблицами, множественные.

Что посоветуете?

И вопрос №2, посложнее.
2) Как бы вы организовали хранение фотографий на сервере?
На эту тему есть множество статей. Пока склоняюсь к варианту с хабра, когда путь вычисляется по айди.
На многих сайтах используют несколько серверов для изображений. Где про это можно почитать? На данный момент смотрю в сторону WebDAV.
Вариант с хранением изображений в БД не рассматриваю.


-----
Удобный сервис для хранения файлов
 
 Top
DeepVarvar Супермодератор
Отправлено: 24 Декабря, 2012 - 00:05:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




1) Все в одной таблице, тащить только нужные поля. Расставьте индексы, раскидайте по серверам, используйте горячий кеш. В конце концов - запустите сперва в виде простой болванки хотябы. Об оптимизации еще успеете подумать. Может у вс там в течении трех первых лет, всего лишь пара хромых юзеров будет ошиваться. Куда вы торопитесь?

2) Все то же самое что и в первом ответе, только применительно к теме второго вопроса.
 
 Top
DlTA
Отправлено: 24 Декабря, 2012 - 00:26:25
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




DeepVarvar пишет:
Все в одной таблице,
хоть какую то разбивку надо же сделать, хотя б отделить то что реально отделяется: страна, город.
а все остальное это личные данные которые ни укого больше не повторяются, и вопрос скорее тут в том, как будет проходить поиск/сортировка, если по некоторым поля не будет напрягаться база, то это вообще можно хранить в неком поле аля серелизованные данные, потому что каждый раз добавлять новый столбец как то напряжно.
 
 Top
Zuldek
Отправлено: 24 Декабря, 2012 - 09:19:17
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Структура данных должна быть подчинена нуждам приложения.
Если полей будет много (а их будет в итоге в несколько раз больше чем вы указали) выносите в отдельные таблицы данные, которые запрашиваются не часто.
В базовой таблице пользователя держите только самые часто запрашиваемые поля: логин, пароль, почта (в зависимости от требований приложения). Для дополнительных данных, которые запрашиваются реже (например, - только на странице профиля) - сделайте связанную таблицу, для множественных строк к одному пользователю - строго отдельная связанная таблица: vocabulary_gallery, user_notepad и т.п.
Также для вас может быть актуально вывести в отдельную таблицу, например, user_online список пользователей на сайте, что ускорит операцию вывода и изменения этого параметра при большом количестве полей в таблице user и при большой частоте этой операции.
В конечном счете не все можно заложить на этапе проектирования, тестирование для такого, предположительно, нагруженного проекта все равно потребуется и последующие корректировки в т.ч. на уровне архитектуры уровня данных.

(Отредактировано автором: 24 Декабря, 2012 - 09:23:34)

 
 Top
Toxa
Отправлено: 24 Декабря, 2012 - 13:39:16
Post Id



Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008  


Помог: 8 раз(а)

[+]


Спасибо за отзывы и советы, обязательно все учту. Хотелось бы услышать комментарии людей, имеющих опыт в создании чего-то подобного с большой нагрузкой.


-----
Удобный сервис для хранения файлов
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Прочее »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB