выбор дизайна таблицы для производительности базы данных - PullRequest
0 голосов
/ 28 сентября 2010

Я разрабатываю приложение Job, которое выполняет несколько параллельных заданий. Каждая работа будет извлекать данные из стороннего источника и процесса. Минимальные записи 100 000. Поэтому я создаю новую таблицу для каждой работы (например, Job123. 123 is jobId) и обрабатываю ее. Когда работа начинается, она удаляет старые записи и получает новые записи и обрабатывает их. Теперь проблема в том, что у меня 1000 заданий, а в БД 1000 таблиц. Размер БД резко увеличен из-за большого количества таблиц.

Мой вопрос: можно ли создавать новую таблицу для каждой работы? или иметь только одну таблицу с именем Job и иметь столбец jobId, затем ввести данные и обработать их. Единственная проблема в том, что на каждой работе будет более 100 000 записей. Если у нас есть только одна таблица, повлияет ли это на производительность БД?

Пожалуйста, дайте мне знать, какой подход лучше.

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

Не создавайте все эти таблицы!Даже если это может сработать, производительность значительно снизится.

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

Редактировать

База данных увеличится до необходимого размера, но пространство от удаленногозаписи используются повторно.Если вы добавляете 100 тыс. Записей и удаляете их снова и снова, база данных не будет расти.Но даже после удаления он будет занимать столько же места, сколько и 100 тыс. Записей.

0 голосов
/ 29 сентября 2010

Я рекомендую один большой стол для всех заданий. Должна быть одна таблица для каждой вещи, а не одна для каждой вещи.

Если вы сделаете идентификатор задания первым полем в кластерном индексе, SQL Server будет использовать индекс b-дерева для определения физического порядка данных в таблице. В принципе, данные будут автоматически сгруппированы по идентификатору задания из-за физического порядка сортировки. Это может не всегда оставаться строго верным из-за фрагментации, но это также повлияет на дизайн нескольких таблиц.

Влияние производительности на то, что идентификатор работы становится первым ключевым полем большой таблицы, должно быть незначительным для операций с одним заданием, в отличие от наличия отдельной таблицы для каждого задания.

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

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