Невозможно вставить массив байтов 250 МБ на удаленный сервер SQL - PullRequest
1 голос
/ 21 марта 2012

Я генерирую массив байтов размером около 250 МБ. Затем он вставляется в таблицу на удаленном сервере Microsoft SQL Server с использованием стандартного кода JDBC в приложении Java.

Моя первая настройка - приложение, работающее на одном экземпляре Amazon EC2, Microsoft SQL Server, работающее на отдельном экземпляре Amazon EC2. В этом случае оператор INSERT работает - pass .

Моя вторая настройка - приложение, работающее локально на моем ноутбуке, база данных размещена на экземпляре Amazon EC2. Здесь соединение установлено правильно, но на линии
pstmt.executeQuery (1, byteArray);
программа продолжает работать без остановки даже после, скажем, получаса - fail .

Чтобы проверить, что я действительно могу получить доступ и вставить данные в удаленную БД с моего локального компьютера, я написал тривиальное приложение для вставки одного целого числа в таблицу - pass .

Я подозреваю, что, поскольку у меня нет очень быстрого интернет-соединения, моя загрузка данных не удалась. Есть ли в любом случае ускорить передачу данных из JDBC в удаленную базу данных SQL Server.

Я думал об увеличении размера пакета на SQL Server - но я не уверен, что это правильный путь, поскольку он работает при использовании другого экземпляра Amazon EC2 для запуска того же приложения - только не при запуске из локального экземпляра приложения. Запускать инстансы Amazon EC2 для каждого разработчика в команде - дорогое предложение.

Ответы [ 2 ]

1 голос
/ 21 марта 2012

Первая мысль здесь.Я бы не советовал пытаться вставить столько данных непосредственно в SQL Server через удаленное соединение.Быстрое предложение.

Возможно ли, что вы загрузите массив 250 МБ (я подозреваю, что это файл / изображение / видео / некоторая резервная копия) в виде файла (обычная загрузка файла ..ajax или обычный POST) наудаленная файловая система Amazon Instance, а затем запуск процесса-демона на том же компьютере, который затем берет файл на локальном диске и помещает его в экземпляр SQL.

Преимущества.

  1. Загрузка файла будет определенно быстрее.
  2. ОТСУТСТВИЕ зависимости от адаптера JDBC для сохранения и надежной загрузки файла.

Я постараюсь вернуться с лучшим решениембольше подходит для вашего прямого подхода.

0 голосов
/ 23 марта 2012

Ваша проблема - задержка сети, а не сама база данных.

Подумайте, как можно оптимизировать передачу файла в экземпляр EC2. Отправка файла 250 МБ в режиме синхронизации никогда не бывает хорошим способом. Это всегда будет вызывать проблемы. Загрузка файла и вставка его в базу данных - это две разные вещи. Не смешивайте их,

То, что вы должны сделать:

  1. сжать файл как можно больше, а затем отправить его. И
  2. Используйте ftp или http (с той же производительностью) и загрузите файл на сервер. Затем делайте то, что вы хотите с этим файлом на сервере. (например, вставив его в базу данных)

OR

  1. Другой супер-замечательный способ передачи большого файла по сети: разделить файл на куски (после сжатия), отправить их асинхронно (например: twister в python или nio в java) и, наконец, объединить все файлы в на стороне сервера (используйте контрольную сумму для проверки целостности файла).
...