Нужны подсказки для оптимизации доступа к sybase через большую толстую трубу

Мне нужно получить доступ к базе данных sybase (12.5) из-за границы. Большая задержка - определенно проблема.

Я уже оптимизировал параметры подключения, чтобы лучше использовать сеть, и добился 20-кратного увеличения производительности, но этого все еще недостаточно: 1 минута, чтобы получить 3 МБ данных.

Для нашего приложения нам нужно еще 10- или 20-кратное увеличение.

Технические данные :

  • данные передаются через одно TCP-соединение с использованием протокола TDS
  • клиентское приложение - это таблица Excel с макросами, использующая драйвер Sybase по умолчанию
  • Корпоративная среда затрудняет внесение больших изменений в архитектуру, созданную более чем за 10 лет, поэтому решения должны быть наименее навязчивыми. Но о некоторых изменениях можно договориться из-за важности этого проекта.

Кто-нибудь может дать мне указатели?

Я уже думал о:

  • разделение SQL-запросов на несколько одновременных подключений к базе данных. Проблема заключается в согласованности данных: что, если записи изменяются одновременно, поскольку запросы не будут выполняться точно в одно и то же время? Есть ли существующий механизм для распределения запроса по нескольким вызовам по разным соединениям?
  • используя какой-то «кеш» базы данных или «локальную репликацию» за границей, но я не знаю, что возможно.

Спасибо.


person Offirmo    schedule 21.09.2011    source источник
comment
Только чтение или чтение-запись? Можете ли вы передать свой SQL на локальный (в базу данных) сервер и заставить его выполнить запрос, а затем, возможно, передать результаты обратно (в сжатом виде?)   -  person Tim Williams    schedule 21.09.2011
comment
чтение / запись (хотя в основном чтение). Сервер базы данных находится за границей. Вы можете уточнить свое предложение?   -  person Offirmo    schedule 22.09.2011
comment
Я имел в виду, что в зависимости от того, насколько болтливо ваше соединение с базой данных, может быть лучше отправить запрос (например) веб-сервису, сидящему на сервере, локальном для базы данных: который будет выполнять запрос и упаковывать (zip?) Результаты и отправьте их обратно. Вы уверены, что ваша текущая проблема связана с задержкой, а не с пропускной способностью?   -  person Tim Williams    schedule 25.09.2011
comment
@ Тим да, это тоже вариант. Для всех: я обновлю этот вопрос через несколько недель, когда у меня будет больше информации.   -  person Offirmo    schedule 28.09.2011


Ответы (2)


Попробуйте установить локальную базу данных (ASE или ASA) и синхронизировать эти базы данных с Sybase Mobilink (или Sybase Replication Server, если вам нужна небольшая задержка репликации и у вас много денег).

person kolchanov    schedule 22.09.2011

(Я знаю, что отвечаю на свой вопрос)

В конце концов, мы остановились на разработке собственного протокола удаленного доступа к базе данных. Это несложно, поскольку мы используем только базовое подмножество SQL (SELECT и UPDATE), и протокол в любом случае не должен понимать SQL.

Используя наш собственный протокол, мы сможем использовать сжатие, сделать так, чтобы клиент мог использовать несколько каналов TCP одновременно, максимизировать использование сети и добавить некоторое функциональное кэширование, специфичное для нашего приложения.

Клиент будет нашим приложением, а сервер будет «прокси» для реальной базы данных, сидящей рядом с ней (как @Tim, предложенный в комментариях).

Это не единственное решение, но мы считаем, что это хороший баланс между огромной стоимостью репликации, сложностью разработки и ожидаемыми преимуществами.

person Offirmo    schedule 20.10.2011