SQL Server: вопрос разработки - сохраненные записи в виде строк по сравнению с BLOB - NVARCHAR (MAX) - PullRequest
0 голосов
/ 10 февраля 2019

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

Итак, сейчас я нахожусь в этой дилемме сохранения расписания в базе данных в виде строк таблицы или в виде nvarchar (max).

Вот требование

  1. Расписания генерируются каждый день.Каждое расписание с точностью до 1 секунды.Таким образом, самое большее, он будет содержать 86,400 записей за расписание .
  2. В день, в зависимости от настройки , система может генерироватьдо 100 расписаний на одного инженера (у нас около 10 инженеров)
  3. Расписание содержит следующие поля: INT | INT | INT | INT | NVARCHAR(1024) | NVARCHAR(64) | BIT | BIT | DATETIME | DATETIME (В итоге: 4x INTs , 2x NVARCHAR , 2x БИТЫ и 2x ДАННЫЕ )
  4. Расписание редко будет обновляться, но оно может быть обновлено.Доступные для обновления поля: 2x БИТЫ и 1x DATETIME .

Теперь рассмотрим общий случайСценарий:

В течение дня он генерирует около 1 296 000 записей за день .

This is the calculation of common case scenario:
- 10 seconds accuracy per schedule = 8,640 rows
- 5 engineers run the scheduler each day
- Each engineer generates about 30 schedules

So total is: 8,640 * 5 * 30 = 1,296,000 records

Если ясохраняйте каждое расписание как NVARCHAR (MAX) с запятыми с разделителями , тогда количество записей уменьшается до 150 записей в день .

Here is the calculation:
- 10 seconds accuracy per schedule = 8,640 rows --> stored as NVARCHAR (becomes 1 record)
- 5 engineers run the scheduler each day
- Each engineer generates about 30 schedules

So total is: 5 * 30 = 150 records

Теперь этоэто требование для этих расписаний:

  1. Сгенерированные расписания можно просмотреть на веб-сайте.
  2. Расписания загружаются приложением каждый день для анализа.
  3. Поля (2x BIT) могут быть обновлены после завершения анализа.Эти поля могут быть обновлены приложением (после завершения анализа расписания) или могут быть обновлены (вручную) инженером на веб-сайте.
  4. Все сгенерированное расписание должно храниться не менее 3 месяцев для целей аудита.

Какая ваша рекомендация?Сохранять расписания в виде строк таблицы ИЛИ NVARCHAR (МАКС.)

1 Ответ

0 голосов
/ 10 февраля 2019

Есть ли у них какие-либо преимущества в хранении данных в одном столбце, кроме количества строк?Если нет, то, как по мне, вы сохраняете данные, чтобы хранить данные в нормализованном порядке.


Я использовал оба метода для хранения данных из-за различных требований.И, конечно же, хранение данных в VARBINARY(MAX) или NVARCHAR(MAX) приводит ко многим трудностям:

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

Итак, из-за вышеизложенного, яПосоветую выбрать формат таблицы.Кроме того, если вы чувствуете, что экспорт данных в какой-либо форме сериализации лучше, вы всегда можете реализовать такую ​​SQL CLR string concatenation функцию или использовать встроенную при использовании SQL Server 2017и последнее.

Кроме того, будет лучше использовать разделители , такие как CHAR (31) и CHAR (30) для столбцов и строк.Это более понятно, чем использование табуляции / новых строк / запятых / точек с запятой, поскольку маловероятно, что входные данные содержат их и нарушают ваши данные.

...