2015-04-16 1 views
-1

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

Вопрос: Быстрее ли иметь одну большую запись, которую нужно пройти, чтобы найти идентификаторы или создать одно проиндексированное поле, содержащее несколько (миллиардов) записей, но все это очень мало?

+0

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

+0

Спасибо, что мне было интересно. –

+0

«одна большая запись, которую нужно пройти, чтобы найти идентификаторы», пожалуйста, не делайте этого. – 1010

ответ

0

Серверы Rdms, такие как MySQL, оптимизированы для поиска нескольких коротких записей из многих. Если вы структурируете свои данные таким образом и правильно проиндексируете их, вы получите достойную производительность.

С другой стороны, длинные списки данных, требующие линейного поиска, не будут хорошо масштабироваться.

Кстати, планируйте десятки миллионов записей, а не миллиарды. Если вам действительно нужно обрабатывать миллиарды, у вас, вероятно, будут ресурсы для расширения вашей системы. В то же время оперативная память и дисковое хранилище все еще находятся на кривой затрат по закону Moore, даже если процессоры нет.

0

Этот сценарий, как правило, будет реализован с тремя таблицами. Упрощенная версия будет выглядеть примерно так:

users(id, name, password, ...)
pages(id, title, ....)
page_access(user_id, page_id, permission)

user_id где и page_id ссылки на таблицах users и pages соответственно. В своем приложении вы затем проверите текущую страницу и пользователя в таблице page_access, чтобы узнать, должно ли быть разрешено или запрещено разрешение.

У MySQL нет проблем с обработкой миллионов на миллионы хорошо проиндексированных строк, если у вас достаточно аппаратного обеспечения. Вы хотите нацелиться на normalised data, не перебирая все в одну строку в одном столе.