Показать сообщение отдельно
Старый 20.10.2015, 09:35   #10
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: Чат: PHP + MySQLi или что то другое?

И внезапно возник вопрос. Пока я не углубился в кущи MongoDB хотелось бы узнать, а подходит ли РЕАЛЬНО документарная база данных для сложного чата ("чат" звучит очень грубо, скорее микрокопия фейсбука без ленты активности, о чём я, разумеется забыл упомянуть выше... да хотя сейчас даже старая-добрая Аська уже не просто банальная чатилка, какой была раньше)? Ведь у меня будут пользователи и информация о пользователях (которая возможно будет меняться), будут группы и информация о группах (которая возможно будет меняться), в конце концов будут сообщения, которые будут содержать отправителя (информация о котором будет будет возможно меняться).

В общем, проведя глубокий анализ и прочитав статью про "Диаспору" (вот прям только что) уже не очень уверен, что MongoDB правильный выбор для меня. Даже банальный (банальный ли?) MySQL больше подходит своей реляционностью, лично мне так кажется. А MongoDB больше подходит под справочники (аля Кинозал) своей документарностью. Если же делать примерно что запланировал я, то будет очень много дублирования данных в тех же беседах и сообщениях (сообщение ведь содержит отправителя, а это значит что и всю инфу о нём, если следовать парадигме денормализации данных). А в случае если отправитель ВНЕЗАПНО решит поменять инфу о себе (добавил/изменил ник/дату рождения/пол/да что угодно о себе), то ПРИДЁТСЯ менять всю эту инфу во всех документах где этот пользователь фигурирует. Можно конечно хранить ссылки на пользователей в беседах и сообщениях, это позволит избежать дублирования данных, но абсолютно уничтожит все полюсы документарной СУБД превратив её в реляционную (причём ещё и с отсутствием "аппаратных" джоинов, что приводит к "программным" джоинам в коде).

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

Пойду почитаю про PosgreSQL...

Кстати, понял что я пытался сделать в первой версии своего "чата". Я пытался сделать что то среднее между реляционной и документарной структурой данных , что бы если надо было добавить к какой то записи ещё одно поле - ненадо было добавлять его ко всем записям (используя MySQL хранил, например, в сообщениях JSON о отправителе с краткой информацией, которую можно было просто расширить добавив конкретно в это сообщение в JSON нужное поле), и как раз наткнулся на беду, описанную мной выше... Невозможность человеческого изменения данных, простого, без тучи кода по изменению ВСЕХ мест где используются эти данные.
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Offline)
 
Ответить с цитированием