Создайте базу данных с большим количеством новых данных - PullRequest
0 голосов
/ 16 января 2011

Я новичок в проектировании баз данных и нуждаюсь в руководстве.В течение дня в мою базу данных добавляется много новых данных.(100 тыс. Строк в день). Данные никогда не изменяются и не удаляются после вставки.Как я могу оптимизировать эту базу данных для скорости поиска?

Мои идеи

  • Создайте две базы данных (и возможно на разных жестких дисках) и объедините их ночью при низком трафике
  • Создайте несколько специальных индексов ...

Ваша рекомендация высоко ценится.

ОБНОВЛЕНИЕ: В моей базе данных есть только одна таблица.

Ответы [ 3 ]

2 голосов
/ 16 января 2011

100k / день на самом деле довольно низок. 3М / месяц, 40М / год. Вы можете хранить архив 10 лет и не достигать 1B строк.

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

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

0 голосов
/ 16 января 2011

Ваши требования являются общими. Для сервера MS SQL 100к (более-менее «нормальных») записей в сутки не должно быть проблемой, если у вас приличное оборудование. Очевидно, что вы хотите быстро записать в базу данных, но вы запрашиваете оптимизацию для производительности поиска. Это не очень хорошо подходит! ;-) Настройка базы данных - особый навык сам по себе. Таким образом, вы никогда не получите общий ответ, который хотели бы получить.

0 голосов
/ 16 января 2011

Лучший совет, который я могу дать всем большим сайтам для ускорения работы сайта:

CACHE CACHE CACHE

использование redis / memcached для кеширования ваших данных!Потому что память (молниеносно) быстрая, а дисковый ввод-вывод дорог.

Запись в очередь

Также для дополнительной производительности вы можете на некоторое время поставить в очередь записи в память, прежде чем записывать их на диск -> запись в базу данных SQL.Конечно, тогда вы рискуете потерять данные, если храните их в памяти и у вас происходит сбой в работе компьютера или сбой питания или что-то в этом роде

Отсутствует контекст

Также я не думаю, что вы дали нам многоконтекст!

Я думаю, что отсутствует:

  1. архитектура.
    1. Какой у вас сервер VPS / виртуальный хостинг.
    2. В какой операционной системе установлена ​​система linux / windows / macosx
    3. , такая как, например, объем доступной памяти, процессор и т. д.
  2. a найти ваше определение данных немного расплывчатым.Не могли бы вы приложить диаграмму или что-то, что немного объясняет ваш домен.Например, что-то вроде alt text

    , используя http://yuml.me/

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