2010-05-18 2 views
19

Соучредитель Reddit выступил с презентацией о проблемах, которые они имели при масштабировании для миллионов пользователей. Доступна сводка here.База данных с «Открытой схемой» - хорошая или плохая идея?

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

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

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

ответ

16

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

7

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

+0

Фактически в разговоре Хаффман рассказывает о создании отчетов и о том, как они это делают, экспортируя кучу данных в текстовый файл и анализируя его в другом месте. Https://vimeo.com/10506751 m24: 50 –

+0

Reddit имеет немного, если есть требования к целостности данных. Это не то, что они хранят дату или целочисленные значения, которые должны быть между определенными диапазонами или иметь сложные бизнес-правила. I.e., правильность данных не очень важна для сайта, такого как reddit; он просто должен быть в основном правильным. Однако приложения LOB не так терпимы к неточности. Дизайн Reddit ориентирован на то, что данные не корректны. Тем не менее, дело в правильности заключается в том, что, когда вы заботитесь об этом, чрезмерно дорого, чтобы не обращаться к нему заранее. – Thomas

8

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

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

Смежные вопросы