2012-05-05 3 views
0

Это обычная социальная сеть. Любой пользователь имеет "Настройки профиля"Какой подход намного лучше для партий ENUM?

Там около 30 настроек пользователь может изменить, так Там уже некоторые категории:

  • настройки профиля
  • SMS | Уведомления по электронной почте
  • настройки авторизации
  • Настройки безопасности
  • настройка доступа

Я сделал несколько таблиц, которые хранят настройки (тип ENUM)

Если я падаю, что настройки в столики, как это (конечно, уникальный идентификатор пользователя будет проиндексирован)

(Идентификатор пользователя является первичным ключом везде на вкладках)

CREATE TABLE user_profile_settings (...) type=MyISAM; 
CREATE TABLE user_profile_notif (...) type=MyISAM; 
CREATE TABLE user_profile_auth (...) type=MyISAM; 
CREATE TABLE user_profile_security (...) type=MyISAM; 
CREATE TABLE user_profile_access (...) type=MyISAM; 

Затем один запрос сводится к нескольким таблицам сразу, что также означает некоторое изменение вниз. Преимущество этого: Если я не читаю только из user_profile_settings, я запрашиваю только идентификатор index из этой таблицы.

Второй подход заключается в следующем: создать одну строку для всех пользовательских настроек пользователь имеет, как это:

CREATE TABLE all_user_config (/***/) type=MyISAM; 

Он содержит около 30 colums, но делает немного труднее поддерживать всю систему.

Вопрос: Какой подход рекомендуется и подходит для миллиарда строк?

ответ

1

Лично я бы рекомендовал хранить поля ENUM в одной большой таблице, поэтому вам нужно будет только запросить и обновить один огромный индекс вместо пяти. Это то, что несколько в возрасте class diagram утверждает, что Facebook делает или, по крайней мере, используется, если диаграмма аутентична.

Если вы серьезно относитесь к расчетному счету пользователей (в настоящее время у Facebook есть скудные 900 миллионов пользователей), вы можете захотеть рассмотреть реляционные базы данных, такие как MySQL, в пользу решения без SQL, например ключевое значение магазин Cassandra или документы предназначенный MongoDB. Они имеют тенденцию масштабироваться до огромных размеров и развертываться в распределенных средах более плавно, чем реляционные базы данных.

+0

Я согласен, потому что наличие одной таблицы имеет тенденцию делать вещи более удобными для обслуживания. Однако вы можете попасть в ситуацию, когда вы храните ключи для общей таблицы как 4 байта, но вы можете уйти с 1 байтом для отдельных значений. Если длина строки является главной задачей, вы можете попробовать другой подход. –

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