Приложение Windows Forms извлекает записи из представления на SQL Server через ADO.NET и веб-службу SOAP, отображая их в сетке данных. У нас было несколько случаев с ~ 25 000 строк, что работает относительно гладко, но потенциальный клиент должен иметь много раз больше в одном списке.
Чтобы выяснить, насколько хорошо мы сейчас масштабируемся и как (и насколько) мы можем реально улучшить, я хотел бы реализовать симуляцию: вместо отображения фактических данных SQL Server отправляет вымышленные, случайные данные. Клиентская и транспортная сторона будут в основном одинаковыми; представление (или, по крайней мере, базовая таблица), конечно, будет работать по-другому. Пользователь указывает количество вымышленных строк (например, 100 000).
Пока я просто хочу знать, сколько времени потребуется клиенту для извлечения и обработки данных, и он почти готов к их отображению.
Что я пытаюсь выяснить, так это: как заставить SQL Server отправлять такие данные?
Должен ли я:
- Создать хранимую процедуру, которую нужно запустить заранее, чтобы заполнить фактическую таблицу?
- Создать функцию, на которую я указываю, чтобы сервер генерировал данные «вживую»?
- Каким образом реплицировать и / или рандомизировать существующие данные?
Первый вариант звучит для меня так, как будто бы он дал результаты, наиболее близкие к реальному миру. Поскольку данные на самом деле «физически присутствуют», запрос SELECT
будет по производительности схож с запросом к реальным данным. Тем не менее, это облагает сервер ошибкой. Поддельные данные также будут сохранены, так как они будут храниться в одной и той же базе данных - если, конечно, я не удаляю данные после каждого запуска теста.
Второй и третий вариант облагают налогом сервер , в то время как выполняет фактическое моделирование, что потенциально дает нереально медленные результаты.
Кроме того, я не уверен, как создавать эти строки, если не использовать цикл или курсор. Я могу использовать SELECT top <n> random1(), random2(), […] FROM foo
, если foo
действительно содержит <n>
записей, но в противном случае (очевидно) я получу только столько строк, сколько в foo
. GROUP BY newid()
или аналогичный, похоже, не сработает.