Как я могу оптимизировать свою базу данных? - PullRequest
1 голос
/ 22 октября 2010

Я создаю платформу для некоторых клиентов. Каждый клиент должен иметь контакты и управлять ими в группах, категориях (которые зависят от группы) и подкатегориях (которые зависят от категории).

База данных будет очень большой, и я боюсь за производительность. Я хочу оптимизировать базу данных; теперь у меня есть эти варианты:

  1. Управление только одной базой данных с несколькими таблицами (как мы управляем сейчас)
  2. Создать базу данных для каждого клиента (каждая база данных будет иметь те же несколько таблиц, что и опция 1)
  3. Управление несколькими файлами XML (как и в варианте 2, у каждого клиента будет каталог с XML для контактов, другой файл XML для групп, другой для категорий и т. Д.)

Какой самый лучший вариант для производительности и управления данными (CRUD, создание, чтение, обновление, удаление) ??

Спасибо !!

Ответы [ 5 ]

2 голосов
/ 22 октября 2010

Я думаю, что одной базой данных с несколькими таблицами будет путь, потому что дублирование базы данных и схемы для каждого нового клиента плохо масштабируется.XML-файлы звучат круто, но до сих пор я не видел движка чтения / записи XML, который был бы так же быстр, как большинство СУБД, так что лучше всего его.следует обратить внимание на индексацию и оптимизацию одной базы данных;Индексы, в частности, помогут вам поддерживать скорость при увеличении.

1 голос
/ 22 октября 2010

Используйте кластеризованную индексацию для идентификатора клиента в любой таблице, в которой он может существовать как внешний ключ.Эта процедура даст вам лучшую ориентированную на клиента производительность, потому что вы (обычно) извлекаете информацию о конкретном клиенте при получении страницы.

Для # 2 я бы предложил сделать эту услугу премиум-класса для ваших клиентов.Если им нужен «приоритетный хостинг» на отдельном «своем» сервере, они платят дополнительно.Это сделает головной болью обслуживания стоящей.

0 голосов
/ 22 октября 2010

Что касается текущего обслуживания и поддержки, я думаю, что только вариант 1 имеет смысл для вас. Индексируйте все столбцы, которые вам нужны, но не более того. Посмотрите на ваш код и посмотрите, как соединяются таблицы, и индексируйте столбцы, которые в противном случае потребуют сканирования таблицы.

Индексы ускорят операции чтения, но замедлят ваши операции записи, так как вам нужно обновить индикаторы, а также столбец. Им также нужно больше места в БД.

Как предложено выше, используйте EXPLAIN, чтобы увидеть, как выполняются ваши запросы и что там можно оптимизировать.

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

0 голосов
/ 22 октября 2010

Вы пытались на самом деле реализовать 1 (что является самым простым)?

  1. Вы профилировали код?
  2. Какая сейчас производительность?
  3. используйте EXPLAIN, чтобы увидеть, как выполняются запросы?
  4. Используете ли вы индексы (часто правильных индексов достаточно, чтобы обеспечить отличные изменения производительности)?

Оптимизация при попадании в узкое место (или когда вы устанавливаете определенные критерии производительности), а не на этапе проектирования ...

ОБНОВЛЕНИЕ: Вы упомянули "миллионы записей ".Это ничего не значит для mysql (при условии, что вы используете правильные индексы в ваших таблицах).У меня есть таблица с примерно 40 миллионами строк, и, хотя она не молниеносна, она дает результаты через пару секунд.Итак, поехали ...

0 голосов
/ 22 октября 2010

3 не рекомендуется.Поиск и т. Д. - это не то, что эффективно делают файлы XML.

2 - проблема обслуживания.

1 должно быть выполнимо«очень большой» означает что?У меня есть база данных с таблицей с 1,5 миллиардами записей - это «большая», а не «очень большая».Что вы определяете как очень большой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...