База данных с "открытой схемой" - хорошая или плохая идея?

StackOverflow https://stackoverflow.com/questions/2854312

Вопрос

Соучредителем Reddit дал презентацию по вопросам, которые они оказались при масштабировании до миллионов пользователей. Резюме доступно здесь.

Что меня удивило, это точка 3:

Вместо этого они держат таблицу вещь и таблица данных. Все в Reddit - это вещь: пользователи, ссылки, комментарии, подсчеты, награды, награды и т. Д. Вещи сохраняют общий атрибут, такие как голосов вверх / вниз, тип и дата создания. Таблица данных имеет три столбца: идентификатор вещи, ключ, значение. Есть ряд для каждого атрибута. Есть ряд для заголовка, URL, автор, спам, голосов и т. Д. Когда они добавляют новые функции, которые им не нужно было беспокоиться о базе данных. Им не нужно было добавлять новые столы для новых вещей или беспокоиться о обновлениях.

Это похоже на ужасную идею для меня, но, похоже, сработает для Reddit. Хотя это хорошая идея в целом? Или это особенность Reddit, который случился для них?

Это было полезно?

Решение

Это модель данных, известная как Воображение за ценность атрибута. Отказ У него есть его использование. Примером Prime - это данные тестирования пациентов, которые естественным образом редкие, поскольку есть сотни тысяч тестов, которые могут быть запущены, но, как правило, присутствуют только для пациента только горстки. Стол с сотнями тысяч колонн глупо, но стол с EAV имеет смысл.

Другие советы

Большинство действительно больших веб-сайтов в конечном итоге используют какой-то невероятно простой на стороне базы данных. Это имеет преимущество, что это быстро и масштабируется. Он имеет недостаток, что все отношения, которые вы получите базу данных, чтобы обеспечить автоматически (через триггеры и такое) вы необходимость вместо этого заставить себя в вашем клиентском коде. Поддержание консистенции - это боль в шее, и есть почти всегда, по крайней мере, некоторые шансы, что ваши данные будут несовместимыми, по крайней мере, на короткие периоды времени.

Для социального сетевого сайта это достойный компромисс. Данные, в основном в основном большую часть времени, являются адекватными (например, кто действительно заботится, если количество голосов, которые вы получаете за предмет, на самом деле на самом деле 20 миллисекунд, когда он отправляется), и сохранение расходов разумных во время масштабирования для поддержки Gazillion Пользователи очень важно.

Я отметил, что они ничего не упоминали о легкой или сложности при создании отчетов против этих данных. При использовании в узком наборе обстоятельств EAV может быть полезным. В качестве центральной части большинства систем он станет кошмаром, когда вы попадаете в отчетность. Проблема с EAVS заключается в том, что большая часть выгоды находится в начале проекта, и большая часть боли позже при анализе и отчетности, особенно из-за серьезного отсутствия целостности данных. «Не беспокоиться о зарубежных ключей» мне звучит как кошмар сиротных рядов. Добавьте в использование суррогатных ключей для всего, и у вас есть запутанная морская масса, которая обычно заканчивается полным переписанным

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top