2016-04-27 9 views
0

Я использую базу данных SQL CE (4.0) как локальный кеш для записей из определенного вида на главном SQL Server (Express 2014). Каждая итерация моего алгоритма я хочу проверить локальный кеш и обновить его с необходимыми записями с основного сервера.Быстрая передача строк между базами данных

Мои текущие решения сериализуют DataTable, содержащий строки (используя суррогат SyncFramework), и переносят его через WCF для десериализации и вставки в кеш. Причиной тому был только один порт для открытия WCF. Проблема в том, что это слишком медленно для моих целей.

Если я ослаблю требование одного порта, могу ли я получить лучшую производительность от другого метода?

+0

Веб-интерфейс API с JSON и использование SqlCeBulkCopy для вставки быстрого или TableDirect ADO api на клиенте. – ErikEJ

ответ

0

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

Некоторые вещи, которые вы можете сделать, чтобы улучшить производительность обмена данными между клиентом и сервером:

  • использовать гораздо быстрее связывания: Как NetTcpBinding или NetNamedPipeBinding.
  • Сжатие данных перед отправкой на сервер, чтобы передавать меньше информации от клиента на сервер. (Использование DataTable может быть не лучшей стратегией).
  • Сделать асинхронный вызов службы. Поэтому вы не ждете ответа сервера, чтобы продолжить работу на стороне клиента.
  • Точная настройка WCF, чтобы принимать больше подключений параллельно.
  • Используйте услуги самообслуживания, чтобы избежать накладных расходов IIS, если они вам не нужны.
+0

Извините, я не думаю, что я был совершенно ясен. Я согласен, мне нужен только один порт. Я ищу принципиально разные решения. Могу ли я сделать прямо ADO по сети? Это полностью обойдется сериализации WCF. – bbush

+0

Вы можете сделать прямой ADO, и производительность будет расти точно. Но это зависит от ваших архитектурных решений и зависит от ваших нефункциональных требований. Одна вещь, которую я полностью рекомендую, - это абстрагировать уровень кэширования, отделяющий стратегию кэширования от бизнес-правил. Таким образом, вы можете позже переключить его на более быстрое или масштабируемое решение в соответствии с вашими потребностями. –