|
|
|
Как правильно спроектировать базу?
|
|||
|---|---|---|---|
|
#18+
Добрый вечер. Вопрос такой: Условно будем считать, что планируется сделать некие простейшие тесты. Имеем 2 таблицы - одна таблица сравнительно небольшая из 3 столбцов - индекс, вопрос, ответ. С количеством записей порядка 10000 2-я таблица - пользователи. Количество записей 1+ . Ну если брать по максимуму - пусть будет 1000000. Каждый пользователь относительно каждого вопроса может иметь некий коэффициент(количество правильных ответов) - от 1 до 10. Ну и собственно вопрос как с наименьшей нагрузкой на серверную часть все это реализовать? :) У меня варианта 2: 1) Таблица с перекрестными индексами и значениями - как я понимаю максимально на 10 млрд. записей. Минус: очень большая база. 2) Таблица с текстовым полем для каждого пользователя, которое будет составной характеристикой для 10000 значений сразу (ну как вариант 10 записей по 1000 значений)... База уже не такая большая, но появляется логика, которая будет кушать процессор(хотя ее в теории можно перекинуть на клиентскую часть)... Хотелось бы услышать критику по поводу этих 2-х пунктов и может какие-либо еще варианты :) P.S. Сам пока склоняюсь ко второму пункту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 21:55 |
|
||
|
Как правильно спроектировать базу?
|
|||
|---|---|---|---|
|
#18+
Gerrr одна таблица сравнительно небольшая из 3 столбцов - индекс, вопрос, ответ. Вы бы со словом индекс поосторожнее. Могут неправильно понять. Как я правильно понял это таблица "Вопросы" Gerrr Количество записей 1+Еще раз призываю вас к точности в формулировках. Таблица "Ответчики" Gerrr Каждый пользователь относительно каждого вопроса может иметь некий коэффициент(количество правильных ответов) - от 1 до 10. Это что cписок из полей int (1,3,9) или список битов да/нет? 10 это точный максимум или нет? То бишь говорим о таблице "ОтветыОтветчиков" Опять же непонятно. Может пример вопроса, ответчика, ответов_на_вопрос сделает ситуацию яснее. Gerrr Ну и собственно вопрос как с наименьшей нагрузкой на серверную часть все это реализовать? :)Встречный вопрос - а какая будет нагрузка. Gerrr Минус: очень большая база.В строках да. В гигабайтах нет. Gerrr Таблица с текстовым полем для каждого пользователя, которое будет составной характеристикой для 10000 значений сразу (ну как вариант 10 записей по 1000 значенийНарушение нормальной формы которое аукнется как только эта характеристика потребует парсинга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2014, 23:31 |
|
||
|
Как правильно спроектировать базу?
|
|||
|---|---|---|---|
|
#18+
Gerrr... как с наименьшей нагрузкой на серверную часть все это реализовать? Что вы понимаете под нагрузкой? Задача тривиальна и реализация более-менее одинакова у всех. Поэтому нагрузка на железо решается увеличением мощностей железа, разноской на несколько серверов и т.д. Т.е. вот так по щелчку пальцев нагрузку уменьшить неполучится. GerrrУ меня варианта 2: 1) Таблица с перекрестными индексами и значениями - как я понимаю максимально на 10 млрд. записей. Минус: очень большая база. 2) Таблица с текстовым полем для каждого пользователя, которое будет составной характеристикой для 10000 значений сразу (ну как вариант 10 записей по 1000 значений)... База уже не такая большая, но появляется логика, которая будет кушать процессор(хотя ее в теории можно перекинуть на клиентскую часть)... Хотелось бы услышать критику по поводу этих 2-х пунктов и может какие-либо еще варианты Как я уже говорил задача уже давно решена. Есть 2 подхода. Первый как у вас. Второй - для каждого пользователя создается отдельная таблица с вариантами ответов. Второй подход решает вопрос блокировки таблицы при реально больших нагрузках. Т.е. грубо таблица вопросов и варианты ответов общие для всех, а вот таблица результатов для каждого пользователя свои. У каждого подхода есть как плюсы так и минусы. Идеального решения нет. Поэтому вариант нужно выбрать зная все входящие и то что нужно получить на выходе. Иначе переделывать потом задолбаетесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 00:47 |
|
||
|
Как правильно спроектировать базу?
|
|||
|---|---|---|---|
|
#18+
GerrrХотелось бы услышать критику по поводу этих 2-х пунктов и может какие-либо еще варианты :) Однозначно 1. Как ответить на запрос типа: Скока пользователей ответило на вопрос N с числом баллов больше M ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 09:25 |
|
||
|
Как правильно спроектировать базу?
|
|||
|---|---|---|---|
|
#18+
Спасибо большое за комментарии. Извиняюсь за применение термина индекс к идентификатору - не первый раз уже в этом ошибаюсь. SERG1257Это что cписок из полей int (1,3,9) или список битов да/нет? 10 это точный максимум или нет? То бишь говорим о таблице "ОтветыОтветчиков"Да список из полей int(9) - возможно будет расширен - тут подумать надо. Это количество правильных ответов на конкретный вопрос. Чем выше - тем реже вопрос встречается. Да - на самом деле видимо придется первым вариантом воспользоваться... Последний пример убедил. Просто хотелось часть нагрузки на сторону клиента вынести и не напрягаться. А можете прокомментировать реальные размеры такой базы с 10 млрд. записей в гигабайтах? И сколько времени будет занимать выборка статистики для одного пользователя по 1000, к примеру, вопросов? Понимаю, что все зависит от нагрузки - ну хотелось бы понять просто порядок времени хотя бы на ненагруженной системе... И еще насколько глупо все же думать о совмещении первого и второго вариантов? Очень уж хочется часть нагрузки на клиента вынести - хотя возможно это решается уменьшением количества запросов и массивами на стороне клиента, которые реже обновляться будут, хотя тогда будет потеря данных - не очень критично, но все же не очень и приятно... Или просто в последствии смотреть в сторону noSQL для этой конкретной задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 10:38 |
|
||
|
Как правильно спроектировать базу?
|
|||
|---|---|---|---|
|
#18+
GerrrА можете прокомментировать реальные размеры такой базы с 10 млрд. записей в гигабайтах? Расслабься, в твоей базе никогда не наберётся 10 млрд. записей. Человеческой жизни не хватит для такого количества ответов. GerrrИ сколько времени будет занимать выборка статистики для одного пользователя по 1000, к примеру, вопросов? 0.53 секунды. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 13:30 |
|
||
|
Как правильно спроектировать базу?
|
|||
|---|---|---|---|
|
#18+
GerrrА можете прокомментировать реальные размеры такой базы с 10 млрд. записей в гигабайтах? И сколько времени будет занимать выборка статистики для одного пользователя по 1000, к примеру, вопросов? Понимаю, что все зависит от нагрузки - ну хотелось бы понять просто порядок времени хотя бы на ненагруженной системе... Все зависит от деталей. От десятых секунды до 2-3 секунд. Все что будет выше это уже проблема. GerrrИ еще насколько глупо все же думать о совмещении первого и второго вариантов? Совмещение даже теоретически невозможно. Представьте себе автомобиль для правостороннего и левостороннего движения. И вот вы вышли из дома и думаете с какой стороны вам сесть и каким рулем рулить. Ну вот примерно вот так вот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 15:43 |
|
||
|
Как правильно спроектировать базу?
|
|||
|---|---|---|---|
|
#18+
Gerrr, Хотелось бы услышать критику по поводу этих 2-х пунктов и может какие-либо еще варианты :) P.S. Сам пока склоняюсь ко второму пункту. Правильный вариант - первый. Во-первых, потому, что у тебя не будет такого количества пользователей, во-вторых, потому, что даже если будет, то это не страшно, и в третьих, потому, что ты сможешь обрабатывать данные на сервере бд с помощью SQL. ТОЛЬКО если третье тебе никогда не будет нужно, можно делать про второму варианту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2014, 23:14 |
|
||
|
Как правильно спроектировать базу?
|
|||
|---|---|---|---|
|
#18+
Gerrr1) Таблица с перекрестными индексами и значениями - как я понимаю максимально на 10 млрд. записей. Минус: очень большая база.10 млрд. записей - нереально даже для миллиона пользователей. По 10 000 вопросов на пользователя, на столько даже за 5 лет обучения не ответить :-) Впрочем, даже если миллиард, ничего страшного. Естественно, нужно выбрать первый вариант. Что бы была поменьше нагрузка, да и вообще, что бы получилось в итоге дешевле (не забываем, что зарплата даже одного разработчика перекроет стоимость рчень нехилого сервера) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2014, 00:31 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38574347&tid=1540968]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
170ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 504ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...