powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / USE и SELECT в сети
6 сообщений из 6, страница 1 из 1
USE и SELECT в сети
    #32268461
Kozerog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несколько вопросов для понимания.

Ситуация: Таблица NameTabe.dbf лежит на C: компьютера A.

Компьютер В соеденен с компьютером A локальной сетью
(для него X - C: компьютера A).

Что происходит(какие манипуляции совершает FOX с исходной таблицей NameTabe.dbf )
когда в VFP на компьютере В выполняютя следующие команды:

1. USE X:\NameTabe.dbf SHARED

2. SELECT * FROM X:\NameTabe.dbf WHERE NameField=1 INTO TABLE C:\NameTabe.dbf

3. SELECT * FROM X:\NameTabe.dbf WHERE .T. INTO TABLE C:\NameTabe.dbf

4. USE X:\NameTabe.dbf SHARED - в FOX на компьютере A когда п1.
...
Рейтинг: 0 / 0
USE и SELECT в сети
    #32269280
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. USE X:\NameTabe.dbf SHARED

В FoxPro создается идентификатор (хендл, дескриптор) указанной таблицы. В FoxPro - этот идентификатор называется " рабочая область ". Собственно закачка данных произойдет, только когда они потребуются.

2. SELECT * FROM X:\NameTabe.dbf WHERE NameField=1 INTO TABLE C:\NameTabe.dbf

Если в данном случае есть Rushmore-оптимизация (как минимум, должен быть индекс по полю NameField), то на клиентскую машину закачивается соответсвующий индексный тэг. В нем отбираются указатели записи на записи со значением NameField=1. Затем с сервера вытягиваются только записи с найденными значениями указателя и формируется таблица C:\NameTable.dbf

Если оптимизации нет, то сначала качается ВСЯ таблица X:\NameTable и уже у клиента выполняется выборка и формирование итога.

Факт оптимизации можно проверить по функции SYS(3054,1). Должно быть как минимум "Partial".

3. SELECT * FROM X:\NameTabe.dbf WHERE .T. INTO TABLE C:\NameTabe.dbf

На клиентскую машину закачивается ВСЯ таблица X:\NameTable и уже у клиента выполняется выборка и формирование итога.

4. USE X:\NameTabe.dbf SHARED - в FOX на компьютере A когда п1.

Не понял? Что произойдет если открыть одну и ту же таблицу с разных компьютеров? Ничего страшного. Будут созданы идентификаторы этой таблицы на обоих компьютерах.
...
Рейтинг: 0 / 0
USE и SELECT в сети
    #32269693
Kozerog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
==> ВладимирМ

<2. SELECT * FROM X:\NameTabe.dbf WHERE NameField=1 INTO TABLE C:\NameTabe.dbf

Если в данном случае есть Rushmore-оптимизация (как минимум, должен быть индекс по полю NameField), то на клиентскую машину закачивается соответсвующий индексный тэг. В нем отбираются указатели записи на записи со значением NameField=1. Затем с сервера вытягиваются только записи с найденными значениями указателя и формируется таблица C:\NameTable.dbf >

А какой механизм этого "вытягивания"?

Если в процессе решения этой задачи на сервере добавили записей и соответственно перестроился индексный файл? Что новые записи в поиске не участвуют ?

Извините, третий вопрос правильно так:

3. SELECT * FROM X:\NameTabe.dbf WHERE .F. INTO TABLE C:\NameTabe.dbf
...
Рейтинг: 0 / 0
USE и SELECT в сети
    #32270178
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внутренний механизм реализации Rushmore-оптимизации - это коммерческая тайна Microsoft. Можно делать только некоторые опосредованные выводы.

Например, вывод о копировании только тега, а не целиком индексного файла был сделан на основе анализа сетевого трафика в момент выполнения запроса.

Насчет учитывания новых записей - это вопрос решает сам FoxPro. Предположительно, если была запись в момент выполнения запроса, то новая запись учтена не будет.


3. SELECT * FROM X:\NameTabe.dbf WHERE .F. INTO TABLE C:\NameTabe.dbf

Еще раз посмотрел, что именно качается с сервера при таком запросе. Судя по объемам и адресам прочитанной информации получается следующее:

Читается заголовок индексного файла в поисках тега, выражение которого совпадает с выражением, указанном в WHERE.

Поскольку вся информация, необходимая для вычисления выражения в WHERE находится у клиента, то она сразу же и вычисляется и с сервера берется сразу результат.

По крайней мере я не увидел перетягивания исходной таблицы на клиента. Да это и так чувствуется по скорости выполнения запроса.
...
Рейтинг: 0 / 0
USE и SELECT в сети
    #32270842
Kozerog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вопрос, вытекающий из ответов на 1 и 4:

Как в программе быстро узнать количество открытых рабочих областей и
их номера. Или только перебор по всем возможным 32767 значениям?
...
Рейтинг: 0 / 0
USE и SELECT в сети
    #32270844
Фотография Андрей Давыдов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AUSED(ArrayName [, nDataSessionNumber])
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / USE и SELECT в сети
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]