У меня есть приложение, которое отправляет данные на основе пользовательского взаимодействия (а не ввода пользователем). Отправленные данные могут быть целыми, строковыми, датскими или логическими значениями. Есть 140 ключей. Мы можем получить от одной ключевой пары значений всего 140 за раз.Варианты дизайна стола для большого количества строк?
Мы хотим хранить все, но будем использовать только 20 из 140 ключей в приложении. Оставшиеся будут использоваться для контрольного журнала позже - так что нам все равно нужно их хранить.
Эти данные используются приложением для определения того, куда должен идти пользователь, поэтому ему необходимо получить доступ к записи по идентификатору студента и вытащить 20 или около того параметров в миллисекундах. Могут быть миллиарды строк данных (это обновление существующего приложения с более чем 20 000 пользователей), поэтому производительность имеет решающее значение. Пользователь генерирует новую строку при каждом обращении к приложению.
ПРИМЕР ДАННЫЕ:
Score:1
ID:3212
IsLast:False
Action:Completed
У меня есть 2 идеи о том, как это сделать, и ищут некоторую помощь, на которых лучше всего или третий вариант является лучшим выбором.
ВАРИАНТ 1:
Моей первая идея состоит в том, чтобы использовать столбец для значения в виде строки, то есть справочная таблица возможных типов данных для использования, когда значение должно быть Cast для использования.
value | dataType
-----------------------
"1" | int
"Completed" | string
В то время как отправляемые данные не созданы пользователем, я знаю, что в этом методе должна быть какая-либо информация. Единственная причина для этого состоит в том, что мы не знаем, какой ключ: пара будет отправлена (вне даты и id) и пытается избежать более нескольких столбцов.
В этом вопросе How to Handle Unknown Data Type in one Table использует аналогичную идею.
ВАРИАНТ 2:
Другое решение, чтобы иметь 140 столбцов - по одному для каждого ключа. Однако объем генерируемых данных очень велик (миллиарды строк), так что вызов этих данных будет не достаточно быстрым - я не думаю.
Технические данные: Использование SQL Server 2008 - не R2 с DotNet C# и службами Reporting Services.
Я что-то пропустил - как лучше всего создать эту таблицу для производительности?
Третий вариант: получить данные как XML, сохранить в виде данных NVARCHAR (max). –
Это не замедлит работу служб Reporting Services при создании отчета. –
Я бы поместил его в XML – arnabmitra