|
|
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Скажем, есть некая сущность, назовем ее "фича". Фич имеется 18 штук, в будущем возможно увеличение их количества. У каждой фичи разумеется есть ряд своих свойств, но это не суть. Все фичи лежат в отдельной таблице. Так же есть сущность "юзер", у которого так же отдельная таблица и нобор своих индивидуальных свойств. Юзеров много, пусть будет 5 млн. они расшардины скажем на 5 серверов по табличкам в 50 тысяч в каждой. Каждый юзер имеет N-ное количество фич каждого типа (или не имеет их вовсе), нужно построить связь между юзерами и фичами. Причем нулевые значения тоже нужно хранить, то есть отсутствие фич данного вида. 1) Первым делом приходит в ум таблица вида (ид_юзера, ид_фичи, количество). Ок, пусть будем так же масштабировать таблицу по ид_юзера на множество серверов. Но размеры будут значительно больше, то есть суммарное количество записей в базе будет 5 млн. * 18 = больно дохрена. К тому же добавление новых фич будет весьма трудозатратным. 2) Второй вариант - сделать таблицу вида (ид_юзера, ид_фичи_1, ид_фичи_2, ид_фичи_3...ид_фичи_18) Таким образом получаем удобную структуру для хранения и выборки фич юзера. Шардинг так же возможен по ид_юзера. Суммарное количество записей не будет превышать количество записей юзеров. Добавление новых фич хоть и геморойно, но мне кажется более удобным, чем первый вариант, то есть нужно добавлять новое поле к таблице. 3) Третий вариант - Добавляем новое поле к таблице юзеров, поле "фичи", в котором храним в структурированном виде имеющие у юзера фичи, например содержание поля может выглядить вот так 1,3,0,5,0,... то есть через запитую все фичи. Странный конечно вариант, но с точки зрения выборки и уменьшения нагрузки на базу наверное самое то, то есть уходит лишняя выборка и таблицы вообще. Правда возрастают накалдные расходы на парсинг этого поля, но это уже расходы не базы. Конечно минус еще в том, что добавлять новые фичи будет так же несколько накладно, придется пробежаться по всем юзерам, хотя учитывая шардирование, это не так критично. Минус еще в том, что пропадает возможность аналитических выборок имеющихся фич у юзеров, но статистику можно вести в другом месте и иначе. Какой из этих вариантов наиболее предпочтительный в плане скорости и удобства обслуживания? Возможно они все не подходят и есть более лучший вариант? Прошу подсказать и направить. Сам лично склоняюсь ко второму, как наиболее компромиссному во всех отношениях. Спасибо тем, кто дочитал до конца:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2012, 15:36 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
Второй вариант нарушает 3-ю НФ, третий - первую. Что за недо-СУБД у вас, которой доставляют проблемы жалкие пять миллионов записей в таблице?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2012, 15:47 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
ewbКакой из этих вариантов наиболее предпочтительный в плане скорости и удобства обслуживания? Однозначно 1. Причем нулевые значения не хранить, а получать 0 в запросе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2012, 15:49 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы! Dimitry SibiryakovЧто за недо-СУБД у вас, которой доставляют проблемы жалкие пять миллионов записей в таблице?.. Дело не в общей массе записей, а в пиковых нагрузках, кои могут быть очень высокими (точные цифры сказать не могу, но порядка 1-5 тысяч юзеров онлайн постоянно за чем то обращающихся к базе), кроме того есть еще куча сопутствующих данных на такое же количество... Данные постоянно меняются, статики мало, и она загнана в кеши. То есть если будет много обращений к нескольким таблицам на 5 млн. (чтение, запись, обновление) в одну единицу времени, то явно ничего хорошего не выйдет. Не говоря уже о таблице в 90 млн. с фичами на таблицу юзеров в 5 млн. Как я понимаю, денормализация данных при больших нагрузках это обычное, а иногда необходимое дело? _модОднозначно 1. Причем нулевые значения не хранить, а получать 0 в запросе Можете пожалуйста аргументированно объяснить, чем второй вариант хуже первого своими словами? (третий брать не будем, это явный треш). То есть важно не просто получить совет, а именно понять, почему так, а не иначе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2012, 16:19 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
ewb, заметьте, что первый и второй вариант по объему хранимой инфы - однофигственен. Третий - приемлем только в одном случае: если у Вас список фич "в структруированном" виде достаточно компактен (банально экономит место) И нет запросов селектирующих юзверя по тем или иным фичам И разбор выбранной структуры незатратен по времени/объему, например выборка всегда небольшого количества юзверей с фичами (идеально всегда только одного). Вот ежели их надо выбирать небольшими партиями по 50тыщ шт., да для кажного юзверя распарсивать ваше "структруированное" хранение (как в Кашэ)... будет весело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2012, 16:26 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
ewbМожете пожалуйста аргументированно объяснить, чем второй вариант хуже первого своими словами? (третий брать не будем, это явный треш). 1. Добавление новых фич не потребует переписывать запросы. 2. Сами запросы типа exists, any и пр. 3. Индексы ? 4. Если есть справочник фич, то как связать определеннное поле со строкой справочника И главное - плюсв нет вообще - кл-во записей в таблице - не показатель ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2012, 16:28 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
ewb, иногда так и делают (2-й вариант), но надо отдавать себе отчет что любое добавление новой фичи приведет к перекройке 80% кода (из моей практики). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2012, 16:28 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
_мод, плюсом как раз пункт 3. но редко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2012, 16:29 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
Arhat109_мод, плюсом как раз пункт 3. но редко. А индексировать как - поиск по фичи = fullscan ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2012, 16:56 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
ewbДело не в общей массе записей, а в пиковых нагрузках, кои могут быть очень высокими (точные цифры сказать не могу, но порядка 1-5 тысяч юзеров онлайн постоянно за чем то обращающихся к базе) Бросьте, ваши "порядка 1-5 тысяч юзеров" может обработать даже бесплатный Firebird на среднего уровня железе. Что там шардить на пять серверов - совершенно непонятно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2012, 17:01 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, оно понятно, что задача "яйца выеденного не стоит", но... мож у чела такое ТУ стоит, что вот надо шардить и именно на 5 серверов. Ну вот представьте, купили уже 5шт, кудыж их теперь? А отчетность? ;) Лет ..надцать назад меня тоже поставили "перед фактом": есть Новелловская сеть из 3-х серверов... нафига? А вот ЕСТЬ и точка. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2012, 18:08 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
_мод, Наиборот, как раз. В каждом поле хранится только количество фич у юзверя. Просто чиселко. При наличии каждой фичи в отдельном поле - легко лепятся индексы, которые в другом варианте сделать или очень сложно, или даже невозможно. А именно: составной индекс Юзверь - фича1 - фича2 - фичаN (по мере убывания "нужности" фич). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2012, 18:30 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
Arhat109ewb, заметьте, что первый и второй вариант по объему хранимой инфы - однофигственен. Третий - приемлем только в одном случае: если у Вас список фич "в структруированном" виде достаточно компактен (банально экономит место) И нет запросов селектирующих юзверя по тем или иным фичам И разбор выбранной структуры незатратен по времени/объему, например выборка всегда небольшого количества юзверей с фичами (идеально всегда только одного). Вот ежели их надо выбирать небольшими партиями по 50тыщ шт., да для кажного юзверя распарсивать ваше "структруированное" хранение (как в Кашэ)... будет весело. Выборка будет происходить только по ID юзера, никак иначе. И только один запрос - один юзер. Никаких сложных запросов, никаких сложных связей. Следовательно в качестве индекса имеет смысл делать только ID юзера. При такой схеме индексов, если говорить именно о весе таблицы, второй вариант будет в разы меньше занимать место. У первого будут большие затраты на обслуживание индексов, в связи с большим количеством записей. К слову я провел небольшой эксперимент, сделал на дефолтном mysql две таблички по 1 и 2 варианту, заполнил обои 150 тысячами юзеров...размер первой в 20 раз больше второй, но выборка по времени практически одинаковая, за небольшим преимуществом второго варианта. Arhat109ewb, иногда так и делают (2-й вариант), но надо отдавать себе отчет что любое добавление новой фичи приведет к перекройке 80% кода (из моей практики). А вот это верно. Непосредственно о модернизации кода я не подумал во втором варианте, хотя это далеко не 80%, но может привнести геморой. При первом варианте код можно не обновлять, то есть обслуживание гораздо удобнее. Dimitry SibiryakovБросьте, ваши "порядка 1-5 тысяч юзеров" может обработать даже бесплатный Firebird на среднего уровня железе. Что там шардить на пять серверов - совершенно непонятно. Хочу уточнить, что юзер может инициировать обработчик, который делает порядка 20 запросов к базе на один присест (разных типов, к разным таблицам). Причем таких обработчиков в один момент времени могут быть вызваны сотни, что в сумме дает уже, как мне кажется не маленькую нагрузку? Но похоже я ошибаюсь и мое представление о нагрузках не правильное? СУБД к слову - mysql. 5 млн. это грубая цифра, вполне возможно, что будет и больше, даже скорее всего так и будет. Так же онлайн возможен больше. То есть хочется оказаться готовым в случае чего к быстрому росту. К слову, именно старт приложения обещает быть бурным, то есть порядка миллиона новых юзеров в течении нескольких суток. Хочу так же уточнить, что таких сущностей типо "фич" на самом деле порядка 6-8. Скажите пожалуйста, как рассчитать какие пиковые нагрузки сможет выдерживать сервер и база? Какие лимиты вообще у mysql или все зависит сугубо от железа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2012, 23:19 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
ewbСУБД к слову - mysql. Скажите пожалуйста, как рассчитать какие пиковые нагрузки сможет выдерживать сервер и база? Какие лимиты вообще у mysql или все зависит сугубо от железа? А не пошёл бы ты с этими вопросами в соответствующий раздел?.. PS: На всякий случай уточняю: в раздел по MySQL, а не по железу. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2012, 23:52 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Dimitry SibiryakovА не пошёл бы ты с этими вопросами в соответствующий раздел?.. А не пошел бы ты повернуть свой рычажок адекватности в положение ON?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2012, 00:09 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
ewbКак я понимаю, денормализация данных при больших нагрузках это обычное, а иногда необходимое дело?Это миф для глупьий-глупьий менеджер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2012, 04:35 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
Ares_ekbмифиз разряда: нет, вы не подумайте, что базу проектировала бригада таджиков, которые не слышали о нормализации. Наоборот, база - агонь, самая эффективная ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2012, 04:50 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
ewb, несколько странный у вас результат между 1 и 2. Хотя бы потому, что большинство СУБД хранит широкие таблицы по тем же столбцам. Разница между 1 и 2 - только в том, что в 1 у вас на каждое чиселко фичи навешивается ид юзверя и номер фичи. Так что, учитывая, что фича - чиселко (BIGINT = FLOAT = 8байт, ладно пусть будет 4), добавляется ещё 5 байт... ну не как не в 20 раз. При этом, пустые связки (кол-во фичи равно 0), как тут уже правильно заметили, хранить вовсе не требуется (это та самая нормализуемая избыточность от 3НФ!)... стало быть если у Вас "заполненность" фич менее 50% то получаете даже выигрыш в объеме. При этом, заметьте, что Ваше замечание "хранить надо даже 0" - выполняется и без реального хранения. Это раз. Во втором варианте, у вас 100% переделка всего кода, выбирающего, пишущего в объединенную таблицу юзверь-фича. Каждый раз при добавлении/удалении фичи. Надеюсь, что это далеко не 80% всего кода. Это два. И третье, работа с именами фич возможна только на уровне ЯП или динамического SQL, поскольку в (2) они суть названия столбцов. Если у Вас выборка строго(!) по одному иду юзверя и !внимание! Вы можете гарантировать, что других выборок НЕ появится в будущем при расширении функционала, то наиболее полезный вариант - как раз 3. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2012, 07:12 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
Ares_ekbНаоборот, база - агонь :D Arhat109несколько странный у вас результат между 1 и 2. Первая таблица - ид_юзер - индекс, ид_фичи - тиниинт, количество - тиниинт. Вторая таблица - ид_юзер - уникальный индекс, ид_фичи_1....ид_фичи_18 - тиниинт. Как я сказал выше, загнал 150 тысяч юзеров, в первой таблице была полная инициализация всех фич сразу, то есть по 18 записей на юзера. Размер первой - 86 Мб на данные + 40 Мб на индексы. Размер второй - 6,5 на данные + 0 Мб на индексы. Согласен, что разница по данным слишком большая, не ясно для меня почему. Arhat109"хранить надо даже 0" - выполняется и без реального хранения Верно. Это мое остаточное мышление от второго варианта. Но тут проблема в том, что так или иначе большинство юзеров (процентов 70) попробуют все фичи, то есть все 18 записей разнесутся по таблице. Arhat109Если у Вас выборка строго(!) по одному иду юзверя и !внимание! Вы можете гарантировать, что других выборок НЕ появится в будущем при расширении функционала, то наиболее полезный вариант - как раз 3. :) Никаких усложнений не предвидится, база по сути используется в виде хранилища ключ-значение, то есть никаких сложных выборок нет нигде. Может быть в таком случае перейти на nosql и юзать везде третий вариант? Как я понимаю, как раз для этого оно и предназначено? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2012, 15:42 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
> Каждый юзер имеет N-ное количество фич каждого типа (или не имеет их вовсе), > нужно построить связь между юзерами и фичами. > Причем нулевые значения тоже нужно хранить, то есть отсутствие фич данного вида. > > 1) Первым делом приходит в ум таблица вида (ид_юзера, ид_фичи, количество). > Ок, пусть будем так же масштабировать таблицу по ид_юзера на множество серверов. > Но размеры будут значительно больше, то есть суммарное количество записей в базе > будет 5 млн. * 18 = больно дохрена. > К тому же добавление новых фич будет весьма трудозатратным. Домножил 5 миллионов на какие-то 18 -- и уже сразу дохрена ? Интересная логика. А добавлять фичи чтобы было удобно -- НЕ храни для пользователей фичи с 0м кол-вом. Это легко. > > 2) Второй вариант - сделать таблицу вида (ид_юзера, ид_фичи_1, ид_фичи_2, > ид_фичи_3...ид_фичи_18) Сразу 2 за "проектирование БД". Иди в школу, начальный класс, нормальные формы. Это -- первая (точнее, её нарушение). > 3) Третий вариант - Добавляем новое поле к таблице юзеров, поле "фичи", в > котором храним в структурированном виде имеющие у юзера фичи, например > содержание поля может выглядить вот так 1,3,0,5,0,... то есть через запитую все > фичи. То же самое, что вариант 2. Итого -- остался только один верный вариант. 1-ый. > Какой из этих вариантов наиболее предпочтительный в плане скорости и удобства > обслуживания? Один единственный вариант есть, первый, других просто нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2012, 01:11 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
On 10/08/2012 04:47 PM, Dimitry Sibiryakov wrote: > Второй вариант нарушает 3-ю НФ, третий - первую. Дмитрий, ОБА -- ПЕРВУЮ. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2012, 01:12 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
> Как я понимаю, денормализация данных при больших нагрузках это обычное, а иногда > необходимое дело? 0) ты понимаеш неправильно. 1) где ты тут видел денормализацию ? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2012, 01:14 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
ewb, Очень странные размеры. Могу попробовать дома повторить ваши измерения. С точки зрения проектирования, ваши "юзвери попробуют все варианты" - не аргумент. Не стоит гадать за всех. Каждый чел - уникален. С точки зрения "используются как ключ-значение"... вам виднее, логику использования фич вы не описали. Если это значения для показа, типа ФИО, место работы и проч. анкетные данные, например в системе прав юзверя (то есть которые НЕ нужны ещё и для логики, а исключительно показа для, например только в его профиле), то собственно все равно КАК вы их будете хранить, в смысле 1, 2 или 3. Такие данные вытаскиваются по ключу (ид_юзверя) и далее идут практически прямиком в код показа... А вот ежели есть логика обработки по чиселке фичи, да ещё и у этой фичи такая, а у этой другая... то вариант 3 - может оказаться проблематичен. Особенно, если Вам "вдруг" понадобится делать какое либо сопоставление или выборку групп юзверей по тем или иным свойствам фич. Например, дай мне список всех юзверей, у которых фича3 больше 10. Вот тут третий вариант - глубокая засада. Задача сильно похожа на сетевую игру, где "фича" - численное свойство персонажа... в этом случае, конечно же у каждого юзверя есть все фичи сразу и вариант 2 нормален, тем более что логика у каждой фичи своя. Если это накопление возможностей юзверя, то "со временем" - да, все активные юзвери приобретут все фичи... но пока это произойдет, набор фич поменяется раз ..надцать. И вариант 1 тут наиболее верен. Да и в реале, активных юзверей как правило на порядок меньше остальных, и ваша оценка в 5млн.. мне кажется завышена на 1-2 порядка. :) 2 от 1 отличается только неудобством развития/сопровождения и избыточностью хранения пустых фич. Ну и ещё раз, хочу обратить ваше внимание на посты о правильном проектировании. Верен только вариант 1. Выбирнать, конечно же Вам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2012, 08:56 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
Arhat109ewb, Очень странные размеры. Могу попробовать дома повторить ваши измерения. Был бы очень благодарен. Хотелось бы понять, почему именно такая дикая разница. Попробую еще сам покопать в этом направлении. Arhat109С точки зрения проектирования, ваши "юзвери попробуют все варианты" - не аргумент. Не стоит гадать за всех. Каждый чел - уникален. Пожалуй верно, но приложение будет всеми силами наталкивать его на это:) А вот агрумент на счет неактивности некоторых пользователей весьма весом, треть или половина будут не активны или слабо активны, но тем не менее неактивные из базы никуда не денутся. Arhat109Задача сильно похожа на сетевую игру, где "фича" - численное свойство персонажа... в этом случае, конечно же у каждого юзверя есть все фичи сразу и вариант 2 нормален, тем более что логика у каждой фичи своя. Если это накопление возможностей юзверя, то "со временем" - да, все активные юзвери приобретут все фичи... но пока это произойдет, набор фич поменяется раз ..надцать. И вариант 1 тут наиболее верен. Да и в реале, активных юзверей как правило на порядок меньше остальных, и ваша оценка в 5млн.. мне кажется завышена на 1-2 порядка. :) Совершенно верно! Это игровое приложение для социальной сети. Для относительно небольшой европейской соц.сети, издатель обещает быстрый нагон траффика, суммарно как раз млн. 5 будет установок, поэтому хочется быть готовым, пусть даже с избытком мощностей, тем более, что сервера халявные:) Если уточнить, то фичи это по сути некие счетчики - цифры присущие каждому игроку, числа эти постоянно меняются, некоторые только в большую сторону, некоторые в обе стороны. То есть одинаково важны, как скорость выборки, так и скорость апдейта. Пример: 1) хранить сколько и каких монстров убил игрок. 2) сколько и каких монстров создал игрок 3) сколько и каких артефактов у него имеется 4) Какие ачивки открыты И так далее, всего уже 12 таких сущностей с количеством элементов от 2 до 18 в каждой, которое может варьироваться. К тому же прибавятся еще и сами сущности. Arhat109Ну и ещё раз, хочу обратить ваше внимание на посты о правильном проектировании. Верен только вариант 1. Выбирнать, конечно же Вам. Спасибо! Я действительно все пересмотрел, понял всю не достаточную гибкость в обслуживание при варианте 2 и 3, особенно скорее 2. И нашел больше плюсов в первом, кроме того, скорость выборки при тестах там практически ничем не уступает второму варианту, но вот апдейты будут происходить в несколько раз медленней, ввиду нескольких запросов на апдейт сразу, но удобство добавление новых элементов это компенсирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2012, 14:39 |
|
||
|
Создание связи между двумя сущностями
|
|||
|---|---|---|---|
|
#18+
ewbЕсли уточнить, то фичи это по сути некие счетчики - цифры присущие каждому игроку, числа эти постоянно меняются, некоторые только в большую сторону, некоторые в обе стороны. То есть одинаково важны, как скорость выборки, так и скорость апдейта. Пример: 1) хранить сколько и каких монстров убил игрок. 2) сколько и каких монстров создал игрок 3) сколько и каких артефактов у него имеется 4) Какие ачивки открыты И так далее, всего уже 12 таких сущностей с количеством элементов от 2 до 18 в каждой, которое может варьироваться. К тому же прибавятся еще и сами сущности. Спасибо! Я действительно все пересмотрел, понял всю не достаточную гибкость в обслуживание при варианте 2 и 3, особенно скорее 2. И нашел больше плюсов в первом, кроме того, скорость выборки при тестах там практически ничем не уступает второму варианту, но вот апдейты будут происходить в несколько раз медленней, ввиду нескольких запросов на апдейт сразу, но удобство добавление новых элементов это компенсирует. У-у-у как всё запущено... :) Монстры, артефакты, ачивки и прочие сущности, по-хорошему надо моделировать собственными таблицами-справочниками, пардон в терминах РМД "отношениями". И делать отдельно связи с игроком, (пардон опять же "отношения" - таблицы) в части "какой_игрок - какая-сущность - сколько_создал - когда_создал - как создал - сколько_убил - когда_убил - как_убил"... ну или допустить что сколько > 0 -- стало быть создал, а ежели меньше, то убил... а не лепить всё в одну таблицу связи, пардон "отношение"... :) Кстати, как правило, размер таблицы особой рояли не играт... важен размер выборки и количества просматриваемых записей для неё, разовой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2012, 18:46 |
|
||
|
|

start [/forum/topic.php?fid=32&startmsg=37988454&tid=1541509]: |
0ms |
get settings: |
4ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
155ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 432ms |

| 0 / 0 |
