Система на CursorAdapter | |
---|---|
sphinx Автор Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Друзья, всем привет!
Вот такой вопрос. Сейчас у меня есть приложение, которое написал на связке VFP + PostrgreSQL. Основная таблица не большая, летает. Но подход. Коллега (он больше по Джаве спец, причем крутой товарищ, почти все рисует с закрытыми глазами). Он говорит, что забирать все данные с сервера - плохо. Согласен. На больших объемах будут тормоза (там еще и машины есть слабые, есть еще и фильтры-сортировки и прочее..). Так вот. Может хоть на пальцах, как лучше организовать тот же курсор-адаптер, чтобы он все данные не выкачивал на локальную машину. Код я привести могу, но он на работе, мне не на чем его принести сегодня. Мне может вполне хватит идеологии, может с небольшим примером, кому не трудно. ------------------ "Veni, vidi, vici!"(с) |
Re: Система на CursorAdapter | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Лучше брать только необходимое,из БД. Но часто бывает что, по тексту ЯП, ТЗ,брать надо всё ) Крутись
Доб. > может с небольшим примером, кому не трудно извлекаеш, например, ФИО, зная только ИО, индекса (по ИО) нет. Фокс просто читает весь файл таблицы в поиске... Доб. > чтобы он все данные не выкачивал на локальную машину Фокс именно "выкачивает" (сохраняя 5-минутную актуальность копии) CDX на локальную машину... Это сложнейший инструментальный прибор фокса, многопользовательский... Исправлено 2 раз(а). Последнее : of63, 15.02.19 23:22 |
Re: Система на CursorAdapter | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
В selectcmd адаптера можно написать не только select * from table, но и select <список только нужных полей> from table1 inner\left join table2 ... where filed1 = 'что-то' and field2 = ?Thisform._FilterValue Почти выдранный из рабочей проги пример. Непонятно какие сложности ты нашел в отборе только нужных данных. ------------------ Лень - это неосознанная мудрость. |
Re: Система на CursorAdapter | |
---|---|
sphinx Автор Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Алексеич! Да я редко пишу SELECT * FROM, как то в большинстве случаев (если это не временно в недрах проекта) все поля добросовестно перечисляю, и в грид подставляются ( который якобы универсальный, жрет все на входе, ибо умеет сам с типом данных разобраться).
Может я идеологию Ка не очень понял в свое время? Хорошо, готов учиться заново, мне не стыдно, не зазорно, я вышел из школьного возраста насмешек. Итак. Делаю примерно следующее. В главном модуле вызываю конструктор КАДа, он выкачивает данные (все поля, которые нужны для ИД, и для грида, чтобы потом не перечитывать) на локальную машину. Режим оптимистики=3 (иначе не взлетает сортировка по столбцам в базовом классе - может это и ересь, я не спорю, я давно спиритов и Вадика не вызывал ). При каждом обновлении - пока-то быстро, универсально, даже мальчика могу обучить, чтобы слез не полил - но потом все посыпется, боюсь. Сергей, Как КАД правильно организовать? При учете, что сортировки по любым полям (правда работает же FOXOBJ Вади - правда там одну маненькую-маненькую строчку надо добавить в конце процедуры, а то некрасиво получается.. Кинь свой пример работы с кадом - учебно-промывающий.. Я буду благодарен, это понятно. ------------------ "Veni, vidi, vici!"(с) |
Re: Система на CursorAdapter | |
---|---|
sphinx Автор Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Так, увлекся. ФоксОбж - это выгрузка почти любых данных из грида в отчет. Тестировал - работает отлично. Вадик про проблемы писал в описании - мне понятны, но когда дойдут руки или начальство.
А класс универсального грида с сортировкой по столбцам позаимствовал у гуру Фокса - Рика Страля (один из перцев в Вест-Винд). Работает, хотя что-то в дочерних приходится докручивать, но это уже точно не тонны коды. ------------------ "Veni, vidi, vici!"(с) |
Re: Система на CursorAdapter | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
Зачем? Почему в главном, а не там, где нужно? Цитата:Саня, ты ТАК сильно отстал от жизни? Давным-давно придумано
Цитата:Это вообще не понял о чем ты. Цитата:Руками и головой. Цитата:И опять в огороде бузина, а в Киеве дядька... Цитата:Пример чего? Запроса в КАД? И что он тебе даст? Давай ка ты лучше расскажешь что конкретно ты не понимаешь? Как заполнять свойства КАД? Как обновлять весь курсор или только его часть? Как загонять данные на сервер? Что-то еше? ------------------ Лень - это неосознанная мудрость. Исправлено 1 раз(а). Последнее : ssa, 16.02.19 11:27 |
Re: Система на CursorAdapter | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Если ТЗ говно (типа "показывать полный список граждан РФ с возможностью сортировки по полям ... и быстрого перехода к записи по условию ..."), то и результат будет именно таким. Если же разумно прописать что надо "брать только необходимое,из БД" то всё будет ок. Нет, конечно. Целиком фокс файлы не читает - ни dbf ни cdx - только нужные их части. А уж что именно окажется "нужным" - целиком и полностью от запроса зависит. Будет там написано Select * from OneGbTable WHERE Id = ?NeededId и он считает буквально пару килобайт данных - и из dbf и из cdx. Фоксу, кстати, по барабану писать SELECT * FROM ... или SELECT oneField FROM ... - он в любом случае физически из таблицы считывает всю запись целиком, не отдельные её поля - ну может за исклюбчением memo, которые и физически отдельно хранятся - но тут я не уверен - надо проверять. Для "больших" СУБД, конечно же лучше только необходимые поля указывать в запросе - но это чуть менее важно по сравнению с WHERE условия_отбора - именно эти условия и есть ключевое для "ускорения". ------------------ WBR, Igor |
Re: Система на CursorAdapter | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> и он считает буквально пару килобайт данных - и из dbf и из cdx.
Возможно, вернее, конечно, часть файла DBF, и CDX-а тоже часть. Точнее фокс обращается к удаленному файлу (на файл-сервере) через ОС, а уж что читает ОС... тоже не видно, как и то, что читает сам фокс. В принципе без разницы кто там что читает, лишь бы поменьше лишнего ). Но к чему это говорю, что иногда на файл-сервере одна машина добавит запись, а вторая машина это замечает минут через 5, причем третья машина может заметить это добавление сразу... И никакие FLUSH, и SYS(1104) (?), не помогают. Что-то с этими чтениями сетевых файлов не так. |
Re: Система на CursorAdapter | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Что читает ОС вполне себе видно через FileMon - какие куски файлов. Понятно, что "физически" считывается сектор целиком, а в современных HDD их встроенное ПО (firmware) может в порядке кэширования сразу несколько соседних секторов считать (всё одно голову куда надо уже выставили, так чего ж не считать всю дорожку целиком - расходы на позиционирование и ожидание доворота диска всяко больше чем потери от забивания кэша потенциально ненужной инфой).
Тут надо понимать всю систему кэширования - от фокса (чем вполне можно управлять, хотя есть и свои подводные камни или, скорее, багофичи в фоксе - типа необходимости передвигать указатель текущей записи для того чтобы таки заставить его "освежить" данные) до ОС (где уже возможности повлиять на кэш чутка поменьше - хотя указанные команды также влияют и на кэш ОС - но сама ОС, особенно серверная, если она ещё и не-виндовая, может "мешать"). В добавок SET REFRESH надо упомянуть - он (его 2 параметр) тоже влияет на то как быстро фокс увидит изменения... ------------------ WBR, Igor |
Re: Система на CursorAdapter | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
() ИК, настройки всех этих 3-4х деталей типовые. SET REFRESH - умолчательный (5 сек), я проверил. Дело не в этом. Дело в фоксе+ОС, обе косые немного. Надо пользоваться "взрослыми БД". Возможно. Пока не "сьеден" сам фокс. ...Смотрю на БК-шку, она в Оракле типа, но все фокс, да фокс... )
|
Re: Система на CursorAdapter | |
---|---|
Божья_коровка Сообщений: 25720 Дата регистрации: 23.08.2001 |
У меня "морда" частично на фоксе, и что? ------------------ Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается... Исправлено 1 раз(а). Последнее : Божья_коровка, 19.02.19 10:59 |
Re: Система на CursorAdapter | |
---|---|
doktor Сообщений: 269 Дата регистрации: 03.09.2002 |
В CAD имеется такое чудесное свойство как MaxRecords. Указывает максимальное количество строк для выборки, когда после команды возвращается набор данных.
Я туда записываю 50000,с таким количеством все летает. И сделал возможным пользователю изменять это значение. Но на практике этого достаточно,для уменьшения количества срок используются фильтры. |
Re: Система на CursorAdapter | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
При правильном использовании фильтров (т.е. когда условия почти всегда дают выборку с значительно меньшим количеством записей) нет нужды использовать MaxRecords. Да и в плане оптимизации запроса может быть эффективнее прямо в запрсе указывать TOP N или его аналог, а не посылать на сервер "полный" запрос, а вынимать из него лишь первые N записей. Кстати 50К это очень, нет ОЧЕНЬ много - нормальный человек в любом случае не может эффективно оперировать таким объёмом данных.
Задавать ограничение по количеству выбираемых записей вообще безотносительно условий отбора - спорное решение. Хотя, если задать order и где-нить ещё написать явно жирными красными буквами что "товарищ, ты видишь только первые хххх записей - на самом деле их, возможно, гораздо больше, уточняй критерии поиска" - ну может и норм быть. ------------------ WBR, Igor |
Re: Система на CursorAdapter | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Какая скука (фрекен Бок)
|
Re: Система на CursorAdapter | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Тебе в соседнюю тему, там настоящая веселуха. Не знаю сколько я смогу сдерживаться чтобы не сказать всё что думаю по поводу приведенного кода
------------------ WBR, Igor |
Re: Система на CursorAdapter | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Не пугай. Сдержиаваемыми. Это уже болше психика, здоолроавая, или гн здороая...Пьяный я....лучшн свою психику коннтролтоать независимо от ... врачей )
> Не знаю сколько я смогу сдерживаться чтобы не сказать всё что думаю по поводу приведенного кода Конечно скажи Исправлено 1 раз(а). Последнее : of63, 23.02.19 01:38 |
Re: Система на CursorAdapter | |
---|---|
sphinx Автор Сообщений: 31166 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
По двум причинам. Во-первых, пользователи просили, чтобы основная форма сразу разворачивалась на экране. Во-вторых, при относительно больших данных если будет наполняться курсор-адаптер во время каждого клика мышкой на той форме, которая (с данными) нужна пользователю - все время вычитывать? Да пользователи меня проклянут за издевательство над ними.
Это я знаю. Просто с базовом классе КАДа стоит 5-я буфферизация, каждый раз для сортировки придется переходить в 3-ю. И такое пробовал, что-то у меня не получилось, а время поджимало. Может быть просто допинать надо было, не спорю.
Просто пример, как на 100 тыс. строк данных не надо КАДом вычитывать все данные при каждом открытии формы. Порциями для грида? Как отслеживать, какие данные ушли вверх (вниз) и какие надо запросить в нужный момент времени? ------------------ "Veni, vidi, vici!"(с) |
Re: Система на CursorAdapter | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
У меня в одной форме всегда выбиралось TOP 10001. И если выходило больше 10000 записей, появлялся label "в выборке больше 10000 записей, уточните критерии поиска". Все. Никакого больше кодирования.
|
Re: Система на CursorAdapter | |
---|---|
Sawradym Сообщений: 2244 Откуда: Винница Дата регистрации: 15.05.2007 |
В свое время хотел добиться чтобы данные тянулись с сервера по мере надобности. Игрался с FetchAsNeed и FetchSize, ничего не вышло.
Сейчас, благодаря самописному КА удалось добиться желаемого. Данные подтягиваются по мере прокрутки грида. До тех пор пока все данные не будут вытащены на клиента в статусбаре светится сообщение о том что выборка не полная. В первом варианте докачка данных происходила при перемещении указателя на последнюю загруженную запись. Летом заморочился и переделал чтобы пустые строчки не были видны до тех пор пока есть что тащить с сервера. Получилось не идеально (механизм скрола у фоксового грида не очень однозначный), но достаточно удобно. |
Re: Система на CursorAdapter | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
У меня в некоторых, огромных справочниках реализовано так.
Выбираю что то, показываю (ск. не тормозит пусть 10000), а дальше все равно юзер начинает поиск. И тут делаю перевыборку, по ясному критерию, введенному юзером. Поиск интерактивный. Потому, как то незаметно все для юзера. Есть поиск договоров, и там они не знают точное название. Потому в текстбокс вводят что то, жмут поиск. Перевыбираю по Like Без када, своя обертка над sqlexec. Но думаю это не принципиально, главное подход найти. |
© 2000-2024 Fox Club  |