Абсолютно быстрый способ передачи табличных данных из SQL через HTTP с помощью WebHttpBinding - PullRequest
2 голосов
/ 12 июля 2011

Какой самый быстрый способ передачи табличных данных SQL по HTTP с использованием конечных точек WCF?

Сейчас я запрашиваю Entity Framework с помощью ESQL, а затем сериализую результат DataTable в байт [] и просто отправляю егозакончен, затем десериализуется на другом конце, что кажется медленнымВ настоящее время размер сериализованных данных составляет около 4000 байтов для 15000+ строк.Я также экспериментировал со службами OData, но это также было довольно медленно.

В отличие от JSON, который, я думаю, будет самым быстрым - файл JSON, содержащий только 1048 строк SQL, занимает почти 200000 байтов.Существует ли прямая зависимость между размером данных и скоростью их передачи по HTTP?(кажется интуитивно понятным, но я не уверен).

Какой формат будет самым быстрым?Я думаю о переходе с SQLDataReader на JSON и отправке JSON, что, я думаю, должно работать хорошо, но я не уверен.Это будет сделано только для синхронизации данных.

Спасибо.

РЕДАКТИРОВАТЬ Сделал еще несколько трассировок, похоже, что некоторые из моих первоначальных измерений были неправильными.Смотрите ниже соответствующие методы в миллисекундах.

6: 42: 23 PM Понедельник, 11 июля 2011 г.:: Длительность функции «Десериализация».Прошло: 481 мс

6: 42: 23 вечера Понедельник, 11 июля 2011 г.:: Длительность функции HttpRequest.Прошло: 4776 мс

6: 42: 22 вечера Понедельник, 11 июля 2011 г.:: Длина таблицы данных (в байтах) = 13047247 байт

Ссылка на таблицу выше, содержащая ~ 7000 строк, кажется крутой,право?

1 Ответ

1 голос
/ 12 июля 2011

SqlDataReader - самый быстрый способ получения данных из базы данных, да.Проблема, с которой вы столкнетесь, заключается в том, что вам нужно будет полностью собрать свой результат перед отправкой по HTTP.Вы не можете просто передать результат, так как он читается из базы данных.JSON - достаточно строгий способ представления данных, но, поскольку вам придется повторять имена столбцов снова и снова, вам будет гораздо лучше использовать простой файл значений, разделенный табуляцией.Установите для вас Content-type = text / plain и удалите все вкладки из ваших данных, когда вы получите их из SqlDataReader.Вы также можете подумать о том, чтобы распечатать свой результат - в зависимости от скорости вашей сети в зависимости от вычислительной мощности вашего веб-сервера.

- РЕДАКТИРОВАТЬ -

Как правильно указал Шон, простой текстопция не является решением WCF.

...