Конференция "Базы" » Выборка BLOB [D7, MSSQL]
 
  • Amir (15.08.12 16:24) [0]
    имеется таблица в 3000 записей


    create table Docs
    (
     UID       INT                   -- ID записи
     Object    IMAGE              -- документ word
     SH        IMAGE               -- скриншот документа  
     Misc      VARCHAR(1024)  -- коментарий
    )



    Задача - отобразить список документов и их скриншоты, а  
           также иметь возможность открытия документов

    используемый в приложении запрос  


     SELECT UID, Object, SH, Comment
       FROM Docs



    выполняется более 3 мин,

    а такой запрос


     SELECT UID, Comment
       FROM Docs  



    выполняется менее 1 сек.    

    Вопрос: Как оптимизировать выборку данных BLOB на клиент ?

    Неужели придется по событию  onAfterScroll постоянно выгружать из БД 1 документ
    по его ID?
    Какая техника работы в этой ситуации?

    Установку индекса на поля Object и SH не предлагать (собственно и нельзя)

    Нашел 1 способ  "убыстрения" выборки - установить серверный курсор в TADOConnection, но это не есть хорошо, поскольку такой курсор отбирает ресурсы сервера,  да и  набор даннных невелик.
  • Anatoly Podgoretsky © (15.08.12 16:34) [1]
    > Amir  (15.08.2012 16:24:00)  [0]

    Не надо onAfterScroll, достаточно например загружать по двойному щелчку для
    просмотра и редактирования.
    То есть совсем не загружать Object и возможно SH пока он не нужен, то есть
    второй вариант ззапроса
  • Inovet © (15.08.12 16:42) [2]
    > [0] Amir   (15.08.12 16:24)
    > Установку индекса на поля Object и SH не предлагать (собственно и нельзя)

    Собственно он и не помог бы ничем.
  • Inovet © (15.08.12 16:43) [3]
    Зачам на клменте все скриншоты сразу? Загружай по мере необходимости, как сказали.
  • Amir (15.08.12 16:55) [4]

    >
    > Inovet ©   (15.08.12 16:43) [3]
    >
    > Зачам на клменте все скриншоты сразу? Загружай по мере необходимости,
    >  как сказали.

    Но база то на сервере - когда 1 узер загрузил рекордсет на клиент и пытается считать данные по двойному клику  данные  рекорсета могут быть неактуальны - другие узеры могут удалить эту запись
  • AV © (15.08.12 17:02) [5]

    > Amir   (15.08.12 16:55) [4]

    А лучше будет, если он узнает об этом после просмотра превьюшки?
  • Inovet © (15.08.12 17:04) [6]
    > [4] Amir   (15.08.12 16:55)
    > данные  рекорсета могут быть неактуальны

    На то есть транзакции. А по такой логике толку на клиенте от удалённой записи?
  • Amir (15.08.12 17:12) [7]

    > Inovet ©   (15.08.12 17:04) [6]
    > На то есть транзакции. А по такой логике толку на клиенте
    > от удалённой записи?

    Я  предполагал загрузить всю информацию из таблицы на клиент
    и работать с ней до того, как узер нажмет кнопку "перечитать БД"
  • Inovet © (15.08.12 17:46) [8]
    > [7] Amir   (15.08.12 17:12)
    >  предполагал загрузить всю информацию из таблицы на клиент

    Это неправильный подход. Загружать надо только то, что надо. У тебя юзер сразу все 3000 скриншотов будет смотреть? Память не треснет?
  • Медвежонок Пятачок © (15.08.12 21:50) [9]
    а вот зачем вордовому документу скриншот?
    типа посмотреть картинку со словами из первой страницы?
    а не проще ли иметь не картинку слов, а сами слова?
    объем меньше, и возможность поиска появляется.

    нахрена там скриншот?
    что именно делает(должен делать) юзер, когда видит скриншот?
    оценивает красоту гарнитуры и верстки, или он семантику курит?
  • Amir (16.08.12 10:52) [10]

    > Inovet ©   (15.08.12 17:46) [8]
    > Это неправильный подход. Загружать надо только то, что надо.


    А отображение в гриде одних реквизитов записи,
    а по двойному клику как сказано в [1], в случае если другой юзер изменил данные поля object, sh и (или) остальные реквизиты - отбражение других
    реквизитов
    - разве это правильный подход?
  • Inovet © (16.08.12 12:06) [11]
    > [10] Amir   (16.08.12 10:52)
    > - разве это правильный подход?

    Я же тебе уже сказал про транзакции, настрайвай так, как надо. А в твоём подходе смысла нет, вот отредактировал юзер запись или открыть захочет, а её кто-то удалил. И так постоянно, а ты ему, - Это я такой подход придумал, нравится?. Юзер тебя будет долго вспоминать, возможно ногами.
  • Anatoly Podgoretsky © (16.08.12 13:48) [12]
    > Inovet  (16.08.2012 12:06:11)  [11]

    В редактирование, кто последний тот и прав.
  • Ega23 © (16.08.12 17:09) [13]

    > а по двойному клику как сказано в [1], в случае если другой
    > юзер изменил данные поля object, sh и (или) остальные реквизиты
    > - отбражение других
    > реквизитов
    > - разве это правильный подход?


    Ты пришёл в библиотеку. И сказал им: дайте мне каталог литературы. Унёс его домой. Сидел там с ним, думал, плевал в потолок. И наконец выбрал себе "Марсельские тайны" расового французского писателя Эмиля Золя.
    Приходишь в библиотеку и говоришь - хочу вот это вот. А тебе там: во-первых, этой книги уже нет, её Розыч забрал почитать. А во-вторых, мы старую уже вообще сожгли, а эта нового издания. Адаптированная, в комиксах.
    И вот ты думаешь: нафига я мучился с огромным каталогом, пёр его домой из библиотеки (5 км зимой, хоть и под гору) в авоське, а потом просматривал его, если инфа уже устарела?
  • MsGuns © (17.08.12 13:05) [14]
    >(5 км зимой, хоть и под гору)

    А назад-то было очень даже в гору, хоть и летом :)
 
Конференция "Базы" » Выборка BLOB [D7, MSSQL]
Есть новые Нет новых   [134430   +2][b:0][p:0.002]