У меня есть приложение, которое отправляет данные на основе взаимодействия с пользователем (не пользовательский ввод). Отправляемые данные могут быть целыми числами, строками, датами или логическими значениями. Есть 140 ключей. Мы можем получить от 1 пары ключевых значений до всех 140 одновременно.
Мы хотим хранить все, но будем использовать только 20 из 140 ключей в приложении. Остальные будут использованы для контрольного журнала позже, поэтому нам все еще нужно их хранить.
Эти данные используются приложением, чтобы решить, куда пользователь должен перейти, поэтому ему необходимо получить доступ к записи по идентификатору студента и получить около 20 вариантов в течение миллисекунд. Может быть миллиарды строк данных (это обновление существующего приложения с более чем 20 000 пользователей), поэтому производительность является критически важной. Пользователь генерирует новую строку каждый раз, когда получает доступ к приложению.
ПРИМЕРНЫЕ ДАННЫЕ:
Score:1
ID:3212
IsLast:False
Action:Completed
У меня есть 2 идеи о том, как это сделать, и мне нужна помощь, которая лучше или третий вариант лучше.
ВАРИАНТ 1:
Моя первая идея состоит в том, чтобы использовать столбец для значения в качестве строки, а затем создать справочную таблицу возможных типов данных, которые нужно использовать, когда значение необходимо преобразовать для использования.
value | dataType
-----------------------
"1" | int
"Completed" | string
Хотя отправляемые данные не генерируются пользователем, я знаю, что где-то в этом методе должна быть ошибка. Единственная причина для этого состоит в том, что мы не знаем, какой ключ: пара будет отправлена (вне даты и идентификатора) и пытаемся избежать нескольких столбцов.
ТАК Вопрос
Как обрабатывать неизвестный тип данных в одной таблице использует аналогичную идею.
ВАРИАНТ 2:
Другое решение - 140 столбцов - по одному на каждый ключ. Однако объем генерируемых данных очень велик (миллиарды строк), поэтому вызов этих данных будет недостаточно быстрым - я не думаю.
Технические данные:
Используется SQL Server 2008, а не R2 с DotNet C # и службами отчетов.
Я что-то здесь упускаю - как лучше создать эту таблицу для производительности?