1

Я создал базу данных, которые следующую таблицу для действий пользователя:Как проверить производительность базы данных

user_id  | INTEGER | user being notified 
actor_id  | INTEGER | user performing the action 
activity_type | STRING | classname/type of the object being notified 
activity_id | INTEGER | id of the object being notified 
context_type | STRING | classname/type of the object's parent 
context_id  | INTEGER | id of the object's parent 
read/view_at | DATETIME | timestamp of when user saw it 

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

Есть ли хороший способ увидеть, как этот дизайн будет работать, когда есть 10.000 пользователей и 50.000.000 записей в таблице подач?

Я не знаю, если это может помочь, но это я использую MS SQL Server

+2

Построить; измерять его; ** затем ** настроить его. –

+0

Это означает, что этот дизайн должен быть выпущен. Но что, если я получу 50.000.000 действий, и я узнаю, что пользователи не могут открыть страницу из-за медленной базы данных. Я должен быть уверен, что этот проект для работы будет работать. – 1110

+1

Какое у вас оборудование? Вы используете SSD? Каковы ваши показатели? Имеете/Можете ли вы сконструировать связанные с схемой представления для кэширования агрегатов? Каковы ваши FK? Я только начал задавать соответствующие вопросы, необходимые для решения вашего вопроса. ** Просто создайте дизайн 3NF ** и рассмотрите проблемы производительности, когда у вас действительно есть проблема. –

ответ

0

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

  • Определите цели производительности, касающиеся времени загрузки и времени ответа. Вы должны определить принятое время отклика для конкретной загрузки данных.

  • Определить ресурсы. Не каждая конфигурация машины будет вести себя одинаково. Вы должны создать виртуальное Maching с целевой конфигурацией.

  • Выполнение load testing. Вы можете сделать это, используя такие инструменты, как SQL Server load generator.

Надеюсь, я помог!

0

Это работает для меня до сих пор:

  1. Определить набор, если запросы, которые являются производительность критически.
  2. Создайте базу данных, чтобы СУБД могла использовать быстрые планы выполнения для запросов, указанных выше.
  3. Заполните базу данных репрезентативными объемами тестовых данных и убедитесь, что планы выполнения запросов, ожидаемые выше, действительно используются (и производительность каждого отдельного запроса является удовлетворительной).
  4. Контролируйте весь «вертикальный стек» вашего программного обеспечения. К настоящему времени не должно быть слишком много неприятных сюрпризов.

Как вы можете видеть, дизайн базы данных не просто отвечает требованиям бизнеса. Действительно, понимание того, как клиенты намерены получить доступ к данным, является неотъемлемой частью процесса проектирования.

Другими словами, то, что традиционно является «логическим дизайном», недостаточно - между логическим и физическим дизайном должна быть «улица с двусторонним движением».

Есть ли хороший способ увидеть, как этот дизайн будет работать, когда в таблице подачей будет 10 000 пользователей и 50.000.000 записей?

Это предложение не содержит достаточной информации для ответа.

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


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

Что включает в себя «физические» методы, такие как индексирование, кластеризация, перегородки и т.д., но также может включать в себя некоторые аспекты, которые традиционно, хотя как «логического» дизайна, такие как дизайн ключей и отношений , Если вы понимаете базовые структуры данных, которые использует типичная СУБД, вы сможете прогнозировать последствия производительности большинства ваших проектных решений. Use The Index, Luke! - отличное введение на эту тему.

+0

На основе схемы мне нужно получить все записи, которые интересуют конкретного пользователя. Таким образом, это было бы просто 'select top 10 * от действий, где user_id = 123 order by read/view_at desc'. Я думал, что у меня есть все идентификаторы здесь, основанные на использовании типов, используемых для разных таблиц, но я думаю, что это вызовет у меня проблему, поэтому я решил сохранить как можно больше данных в этой таблице. Я знаю эту базу данных denormalize, но не могу найти лучшего способа сделать это. – 1110

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