Delphi 2010 Datasnap - запрос дизайна - PullRequest
5 голосов
/ 13 мая 2010

Я изучаю вопрос о переносе приложения Delphi для толстого клиента на SQL на многоуровневых тонких клиентах и ​​рассматривал возможность использования Datasnap в Delphi 2010. Я изучил Белую книгу, написанную Бобом Свартом, и расширил ее.

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

Спасибо Matt

1 Ответ

1 голос
/ 20 августа 2010

Вы должны решить в своем дизайне:

  • (Mid-Server) Управляет сеансом или клиент будет идентифицировать свой сеанс при каждом соединении (с состоянием и без состояния)

  • (Mid-Server) Сколько кэшированных данных вы хотите иметь. Вы можете кэшировать только некоторые раздражающие очень стабильные таблицы и запрашивать их только тогда, когда они изменяются (если все изменения выполняются через промежуточный сервер, если нет, вам нужно что-то вроде произвольной метки - GUID, счетчик - на таблице, чтобы соответствовать, если данные изменено).

  • (Клиент / Mid-Server) Если ваш клиент всегда получит полную коллекцию данных или только фрагменты коллекции. (напр .: у продукта может быть столбец categoryId, который является FK для таблицы категорий. Вы можете отправлять как все время, так и клиент может запрашивать только данные о продукте).

  • (Mid-Server / RDBMS) Возможно, вам придется предоставить какую-то форму пользовательского поиска. Если у вас есть подсказка о наиболее часто используемых условиях поиска, вы можете предоставить (если необходимо) индексное покрытие, чтобы сделать это.

  • (Mid-Server / RDBMS) Не передавайте большие наборы данных на mid-server, если только вы не планируете выполнять агрессивное кэширование данных и / или не сможете их эффективно использовать. Mid-Server - это просто еще одно клиентское приложение для СУБД - если оба находятся на одном компьютере, вы можете вступить в соревнование памяти / ЦП / ввода-вывода с СУБД.

  • (Mid-Server / RDBMS) Выполните ваши бизнес-правила на Mid-Server, это мантра многих пуристов. Для меня равновесие является ключевым. Допустим, в СУБД имеется 2000 хранимых процедур (я не преувеличиваю, с таким количеством SP есть реальный бизнес), и ваш Mid-Server может отлично справиться с 1500 из 2000 проблем, решенных SP, GREAT, и делать это. Но если последние 500 могут измениться к худшему, оставьте их в покое. Это может быть больше хлопот, чем 1500. Так что смешайте два и сделайте эти 500 программным проектом для другой версии.

  • (Mid-Server / RDBMS) То, что я сказал для хранимых процедур, также может быть применено к триггерам и другим функциям сервера RDBMS любого другого типа, которые могут упростить вашу жизнь.

  • (Mid-Server / DataSnap) Большинство грубых деталей можно передать провайдеру данных. Но научитесь использовать событие OnBeforeUpdateRecord для выполнения пользовательской обработки при необходимости.

  • (Mid-Server / DataSnap) Вы знаете, что вы можете создать ClientDataset только с измененными данными с помощью этот код ниже? Вы не представляете, насколько это может быть полезно ...: -)

    Cds_New.Data: = Cds_Updated.Delta;

...