powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Какой вариант лучше ?
41 сообщений из 41, показаны все 2 страниц
Какой вариант лучше ?
    #33070107
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока я обдумываю клиента для MySql.

Выборка. На сервере 2 таблицы: 1 справочник товаров + 1 таблица товаров.

Варианты
1.Храню обе на сервере. По select получаю свежую версию данных. Минус по сети гоню повторяющиеся данные.(справочник товаров)

2.Храню сервере данные а справочник на клиенте. По select получаю -=не=- свежую версию данных. Обновляю 1 - ... ? в день. Плюс не гоню по сети повторяющиеся данные.(справочник товаров)

Какой вариант лучше ?

если можно напишите ответ и/или скажите где найти ответ на подобные воросы.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33070204
Серж-1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мона так, при старте клиента делать запрос на сервак и если таблицы разные она сама проверяет то заменяем их.
xcopy "\\server1\data\*.dbf" "c:\full6\data\*.dbf" /c/q/d/e/i/y
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33070257
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну не очень хороший вариант. Программа запускается в 8:00 а выключается в 17:00. Значит любые изменения не будут видны в течении дня. Вот если запрашивать сервер раз в час, есть ли изменения. Наверно лучше. Может быть да, а может нет.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33070276
Фотография Vladimir M Sklyar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранить все на сервере, адназначна.

PS почему ты решил разделить ?

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33070294
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там еще много полезного...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
 VFP Online Documentation
  - Developer's Guide
    - Creating Client/Server Solutions 
...
 Locating Data on the Optimal Platform 
You get maximum performance when you store data and other attributes of your database on the optimal platform. The best platform for a particular element depends on how the element is accessed and updated. For example, you might want to store a local copy of a server table such as a postal code directory that is used as a lookup table, and refresh the local copy only when the back-end table changes.
The following table lists some common application elements and examples of where to locate them for optimal performance.
 Locating Elements by Platform 

Element		Location	Type	Notes

Tables		Local	Local copies of server lookup tables; small, infrequently changed tables	Use a time stamp, if supported by your remote server, to compare and optionally refresh the local table to match any changes to the back-end source table.
	 	Remote 	Large or frequently changing tables	

Rules		Local 	Rules on remote views 	You can use DBSETPROP( ) to store field- and record-level rules on a remote view. Your application can use these local rules to check the validity of data before sending the data to the back-end as an update to remote tables.
		Remote 	Row-level and column-level rules on remote base tables	

Stored proc	Local 	Visual FoxPro stored procedures	
		Remote 	Back-end server stored procedures	Use the SQL pass-through SQLEXEC( ) function to call server stored procedures.

Transactions	Local 	Visual FoxPro transactions	
		Remote	Server transactions	

Triggers	Local views	No triggers on views	
		Remote	Server triggers	

To reduce network traffic during lookups, you can choose to store not only infrequently-changing but also frequently-changing lookup tables locally. For example, you can download your company’s customer list and refresh it only when customer information changes.
To accomplish this, you can program your application to compare the time stamp on the local copy of the table with the time stamp on back-end data (if your remote server supports time stamps) and update the local copy only if the server table has changed. You can also add a command button to your form that forces an immediate download of the table, allowing users to refresh their copy of the local table on demand.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33070313
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir M Sklyar
Хранить все на сервере, адназначна.
PS почему ты решил разделить ?


Справочник изменяется редко гонять данные постоянно по сети нет смысла. Но при обновлении - обновление должно отобразится быстро.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33070323
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey TsТам еще много полезного...
Код: plaintext
1.
2.
3.
 VFP Online Documentation
  - Developer's Guide
    - Creating Client/Server Solutions 


Там это где ?
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33070364
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГенГрумПока я обдумываю клиента для MySql.
Выборка. На сервере 2 таблицы: 1 справочник товаров + 1 таблица товаров.
Варианты
1.Храню обе на сервере. По select получаю свежую версию данных. Минус по сети гоню повторяющиеся данные.(справочник товаров)
2.Храню сервере данные а справочник на клиенте. По select получаю -=не=- свежую версию данных. Обновляю 1 - ... ? в день. Плюс не гоню по сети повторяющиеся данные.(справочник товаров)
Если рассмотреть вариант 2 и поговорить о минусах.
Сколько клиентов? Пусть два. Кто пополняет справочник? Пусть первый пополнил. Но тогда он пополнит только у себя. И пошла морока. Второй тоже пополнил справочник. Какой справочник брать завтра?
Это пока сейчас у Вас пополняется 1 раз в день, а завтра еще ничего не известно. По моему 1 вариант предпочтительнее.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071137
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГенГрум Andrey TsТам еще много полезного...
Код: plaintext
1.
2.
3.
 VFP Online Documentation
  - Developer's Guide
    - Creating Client/Server Solutions 


Там это где ?
Где в инете - не знаю. У меня лицензионный VFP5 c этой документацией (v 1.0) на CD
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071160
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир САЕсли рассмотреть вариант 2 и поговорить о минусах.
Сколько клиентов? Пусть два. Кто пополняет справочник? Пусть первый пополнил. Но тогда он пополнит только у себя. И пошла морока. Второй тоже пополнил справочник. Какой справочник брать завтра?
Это пока сейчас у Вас пополняется 1 раз в день, а завтра еще ничего не известно. По моему 1 вариант предпочтительнее.

Пусть первый пополнил.
Он же сразу запищет на сервер. Вопрос в том когда брать. Например когда в локальном справочнике нет данных - брать сразу. Иначе раз в час или день.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071166
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey Ts Где в инете - не знаю. У меня лицензионный VFP5 c этой документацией (v 1.0) на CD
Вы имеете ввиду MSDN ? Справка которая постовляется с фоксом ?
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071211
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На мой взгляд обе предложнные идеологии имеют право на существование, надо только определиться для каких задач использовать конкретный подход.

Вариант 1 подходит для рабочих мест с периодическим циклом работы (например с 9.00 до 18.00).

Вариант 2 часто бывает необходим для круглосуточной работы, причем административными мерами регламентируется процес пополнения справочников и процесс их обновления, как правило этого достаточно для корректной работы.

По поводу таскания всего справочника на клиента при первом варианте, здесь надо изменить идеологию приложения, те на клиенте формируется запрос с определенными условиями выборки (например накладные за промежуток времени), в форме нам товары пока не нужны, затем пользователь хотел посмотреть что в конкретной накладной бралось (формируем инструкцию серверу собрать отгрузку по этой накладной в выборку и отдать клиенту, как видим справочник товаров был подцеплен на сервере и на клиенте получен только результат).
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071224
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГенГрум Andrey Ts Где в инете - не знаю. У меня лицензионный VFP5 c этой документацией (v 1.0) на CD
Вы имеете ввиду MSDN ? Справка которая постовляется с фоксом ?
Это не просто справка типа HLP. Это еще 130 МБ разной информации для пользователя, разработчика, и кучи еще всякого. Может она и входит в MSDN, я не знаю
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071241
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так она выглядит:
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071326
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Andrey Ts попробую найти в инете.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071361
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist
По поводу таскания всего справочника на клиента при первом варианте, здесь надо изменить идеологию приложения, те на клиенте формируется запрос с определенными условиями выборки (например накладные за промежуток времени), в форме нам товары пока не нужны, затем пользователь хотел посмотреть что в конкретной накладной бралось (формируем инструкцию серверу собрать отгрузку по этой накладной в выборку и отдать клиенту, как видим справочник товаров был подцеплен на сервере и на клиенте получен только результат).

Вопрос возник не спроста. Например в первом варианте получим наименование (charter 50 ) количество (int)(4) х 1000 строк. Лишняя информация 50*1000=50 000 байт по сравнению со вторым вариантом. Недостаток второго варианта мы можем получить пустые наименования для новых товаров.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071505
nfp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nfp
Гость
Я не работал с клиент- серверными приложениями , поэтому не ругаете если мое предложение не подойдет.
А может есть такая возможность перед обращением к справочнику сравнить время последнего изменения справочника на клиенте и на сервере и если сервер обновлялся позднее ,то сначала скинуть новые данные, а затем продолжить работу?
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071530
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nfpЯ не работал с клиент- серверными приложениями , поэтому не ругаете если мое предложение не подойдет.
А может есть такая возможность перед обращением к справочнику сравнить время последнего изменения справочника на клиенте и на сервере и если сервер обновлялся позднее ,то сначала скинуть новые данные, а затем продолжить работу?

Наверное это лучший вариант, но немного неудобно делать 2 запроса вместо одного. 1 запрос - есть ли изменения. 2 сам запрос.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071550
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГенГрум PaulWist
По поводу таскания всего справочника на клиента при первом варианте, здесь надо изменить идеологию приложения, те на клиенте формируется запрос с определенными условиями выборки (например накладные за промежуток времени), в форме нам товары пока не нужны, затем пользователь хотел посмотреть что в конкретной накладной бралось (формируем инструкцию серверу собрать отгрузку по этой накладной в выборку и отдать клиенту, как видим справочник товаров был подцеплен на сервере и на клиенте получен только результат).

Вопрос возник не спроста. Например в первом варианте получим наименование (charter 50 ) количество (int)(4) х 1000 строк. Лишняя информация 50*1000=50 000 байт по сравнению со вторым вариантом. Недостаток второго варианта мы можем получить пустые наименования для новых товаров.

Наверное я плохо написал.

Ответьте на такой вопрос для какой цели тащить на клиента всь справочник в 1000 строк если необходимо показать 20 товаров. Вы конечно можете возразить - дык у меня выписывается 500 документов и в каждом по 20 товаров, тогда считаем 500*20 = 1000 строк надо перегнать из справочника и это равносильно одной загрузке всего справочника в начале дня, а если надо обновить справочник на клиенте 3 раза в день, тогда получается, что эквивалент документов должен быть равен 1500 документов. Мы взяли с Вами тестовый пример с 1000 строками справочника, а на самом деле этих строк может быть значительно больше, те выигрыш даже здесь уже илюзорен, на самом деле к справочнику продукции должны существовать справочники дополнительных измерений, которые в Вашем случае тоже должны тащиться на клиента.

Вот такие на первый взгляд соображения.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071693
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist
Наверное я плохо написал.

Ответьте на такой вопрос для какой цели тащить на клиента всь справочник в 1000 строк если необходимо показать 20 товаров. Вы конечно можете возразить - дык у меня выписывается 500 документов и в каждом по 20 товаров, тогда считаем 500*20 = 1000 строк надо перегнать из справочника и это равносильно одной загрузке всего справочника в начале дня, а если надо обновить справочник на клиенте 3 раза в день, тогда получается, что эквивалент документов должен быть равен 1500 документов. Мы взяли с Вами тестовый пример с 1000 строками справочника, а на самом деле этих строк может быть значительно больше, те выигрыш даже здесь уже илюзорен, на самом деле к справочнику продукции должны существовать справочники дополнительных измерений, которые в Вашем случае тоже должны тащиться на клиента.

Вот такие на первый взгляд соображения.

Наверное я не правельно пояснил задачу.
1 вариант

Код: plaintext
1.
сервер
select spr.name,data.count form spr,data where spr.id=data.id into cursor Rez

например получим 1000 строк где наименование (spr.name = charter 50 ) количество (data.count = int)(4) х 1000 строк. Лишняя информация 50*1000=50 000 байт. На даннном запросе.

2 вариант
Код: plaintext
1.
2.
3.
4.
сервер
select data.id,data.count form spr,data where spr.id=data.id into cursor RezA
клиент
select SprLocal.name,RezA.count form SprLocal,RezA where SprLocal.id=RezA.id into cursor Rez
Выигрыш меньше информации по сети. Недостаток - могут быть накладки с версией справочника. Можно ввести просмотр обновлений раз в час.

3 вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
сервер
 1 .запрос к справочнику изменений есть ли изменения.
 2 .если есть то запросить справочник
 3 .select data.id,data.count form spr,data where spr.id=data.id into cursor RezA
клиент
select SprLocal.name,RezA.count form SprLocal,RezA where SprLocal.id=RezA.id into cursor Rez
Средний вариант между 1 и 2. Наверное он лучший. Все команды на фоксе. Переводить на раз еще не могу. Если есть предложения прошу ...
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071715
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
простите вместо
Код: plaintext
form
читать
Код: plaintext
from
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071792
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, стало понятнее.

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

Те все предложенные варианты реализуемы, в конечном итоге выбор остается за Вами.

Думаю ребята укажут на другие тонкие моменты (нарушение парадигмы к-с итд...)
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33071942
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWistАга, стало понятнее.

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

Те все предложенные варианты реализуемы, в конечном итоге выбор остается за Вами.

Думаю ребята укажут на другие тонкие моменты (нарушение парадигмы к-с итд...)

Но если создать класс(может быть прогу) , то не надо создавать отдельный проект. При обращении к классу (или prg) указывать, что надо проверить на сервере. Пишется 1 раз - работает всегда.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33072007
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы меня немного не поняли, конечно для реализации такого функционала надо создать класс + ХП на сервере + обработчик ошибок + алгоритмы выхода из тупиковых ситуаций. Говоря о двойном проекте я имел ввиду, что кода будет написано как на 2 проекта.

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

PS я не настаиваю на своем мнении, но похожую задачу приходилось делать она была осложнена ещё и возможностью работы в локальном режиме при обрыве сети или недоступности сервера, но это была узко специфичная задача с загрузками, синхронизацией данных итп.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33072140
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В начале я написал что обдумываю клиента для MySqlЭто только идеалогия построения. Естественное она распространяется на все данные. Идея в том , что бы хранить на сервере всю информацию + на клиенте все справочники и обновлять по мере необходимости. А вот необходимость - когда она наступает?
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33072233
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дерзайте, пробуйте.

Мне кажется, что принципы построения фс или кс уже обкатаны и вполне жизнеспособны.

Пишите о трудностях с которыми столкнетесь, обсудим пути решения.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33072257
Фотография Vladimir M Sklyar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То ГенГрум - на какие каналы по скорости вы заклыдываетесь ?

Если это локальная сеть (даже 10Мб), я не думаю, что 50кб это тот объем данных который может посадить сеть.
Если это некая выделенка, медленная (<1Мб), то тогда да стоит подумать о кешировании справочников (др часто используемой ин-ции) или посмотреть в сторону другого подхода к организации приложения (3х-звенка например)

Ксати, никто не задумывался про оптимизацию работы сервера при наличии справочника на сервере и вне его ? Что будет быстрее. Если справочник лежит локально, ведь придеться увязывать курсор (который запросили с сервера) со справочником дополнительным запросом или еще как-нибуть, а это дополнительное время или сразу получить готовый курсор для работы с сервера.

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33073428
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Если вернулись к избитой теме, значит она еще не добита" (с)

Тут уже пытались обратить внимание на некоторые скользкие моменты твоей идеологии, но видимо слишком "прозрачно".

Предположим скачал ты справочник на клиента. Как ты себе представляешь процесс его редактирования? Чисто технически. Напомню, что именно тебе надо сделать:

-) Изменить данные на сервере
-) Изменить данные на том клиенте, который вносил эти изменения (во временной таблице)

Зачем надо еще и на клиенте менять? А ты представляешь реакцию пользователя? Я данные изменил, а они не изменились! И объясни ему, что это разные таблицы!

А если другой пользователь удалил запись из справочника? А первый, не зная об этом, попытался привязаться к этой записи?

Далее, у тебя какое-то странное представление о том, что такое "много" применительно к клиент-сервеному приложению и как вообще организуется работа в клиент-серверной технологии.

Во-первых, ты исходишь из предположения, что справочник в несколько тысяч позиций - линейный. Т.е. это просто список, никак внутренне не разделенный на подразделы. И для того, чтобы выбрать элемент такого справочника надо закачать на клиента весь список позиций (хотя бы код и название позиции).

Для начала, оценим объем данных, которые надо скачать. Ты уже писал, что минимальная длина одной записи 54 байта (4 байта - код, 50 байт - название). На 1 тысячу записей - примерно 50КБ. Это много или мало?

В абсолютных величинах так сразу и не скажешь.

Тогда поставь вопрос по другому: для чего нужен этот справочник в данном месте? Т.е. какой именно документ мы создаем (изменяем)? А теперь посмотри, какой объем данных (без собственно справочника) надо закачать с сервера, чтобы отобразить этот самый документ? Как этот объем соотноситься с объемом справочника? Подозреваю, что эти величины окажуться сопоставимы.

Кроме всего прочего, такие большие справочники (несколько тысяч записей), как правило, структурируют. Т.е. создают некую древовидную структуру. Хотя бы 2...3 уровня. Просто чтобы проще было найти нужную запись в такой "немерянной" куче. Или же организуют специальные фильтры (хотя бы по первой букве), чтобы закачивать не весь справочник, а только нужный пользователю фрагмент.

И это есть "во вторых". Сама идеология клиент-серверных приложений предполагает, что ты тянешь с сервера не вообще все данные, какие там есть (в данном случае - весь справочник), а только то, что нужно в данный момент.

Понятно, что из справочника довольно тяжело вытащить именно то, что нужно "в данный момент". Но вовсе не потому, почему ты думаешь. Вспомни, как ты вытаскиваешь нужный документ (для просмотра или редактирования)? Неужели скачиваешь вообще все документы какие есть, а пользователь потом тупо листает всю эту кучу ища то, что нужно?

Скорее всего, ты даешь какую-то формочку для задания критериев поиска, какие именно документы нужно отобразить. А уже по этим критериям отображаешь список найденных документов. Почему не распространить ту же идеологию на такие огромные справочники (в несколько тысяч записей)?

Ведь по любому для выбора из такого справочника невозможно использовать ComboBox. Точнее, можно, но сколько "добрых" слов ты услышишь от пользователей, словами не передать . Т.е. для выбора элемента такого справочника нужна отдельная форма. Ну и в чем проблема сделать фильтр в этой форме, чтобы отображать (читай - скачать с сервера) "за раз" небольшой фрагмент справочника?
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33074425
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To ВладимирМ

Идеология программы превыше правильного кода.

Попробую изложить идеологию, как я её вижу. Если я не прав или есть скользкие места прошу написать. Изложение 3-го варианта.
Сервер содержит справочники + данные + таблицу изменений (стоит true в строке с именем справочника, который изменялся).
Клиент копию справочников + таблица локальных изменений.
Справочники содержат 3 даты:
-дата-время_с
-дата-время_изменения
-дата-время_по
Из справочника не удаляются строки, а только закрываются (по полю дата_по). Естественно справочники имеют id_записи и id_под записи.

Стандартный запрос при вызове из текста программы.
Метод ( строка ”select …. ” запроса к серверу, имя курсора данных с сервера)
В методе запрашивается
1. Выбрать все строки с true в таблице изменений.
- есть - обновляются все измененные справочники.
2. Непосредственно сам запрос.

Стандартное сохранение изменений происходит по кнопке сохранить.
1.Сохраняются изменения в локальный справочник. Локальный справочник имеет 2 дополнительных колонки строка изменялась + время изменения.
2.Попытка сохранить измененные данные на сервере.
- да = локальный справочник = колонка строка изменялась = False
-нет = месага –нет сети- ожидание сети – деле по ветке да.
При сохранении на сервере сохраняются только измененные строки.

Возможно придется ввести опрос раз в минуту таблицу изменений. И если есть изменения
1. Есть изменения на сервере
1.1 Нет локальных изменений – отобразить все изменения на экране
1.2 Есть локальные изменения – отобразить все изменения на экране для не редактированных строк и на запрашивать оператора показать изменения для остальных строк.

Если взять в качестве примера справочник сотрудников, который изменяется раз в полгода – год. Так зачем таскать лишние данные по сети в течении года? Повторяю это чисто теоретические выводы. Я еще только обдумываю следующий проект.

Самое тяжелое в программировании – написать описание к программе.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33074812
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый скользкий момент:

ГенГрумЕсли взять в качестве примера справочник сотрудников, который изменяется раз в полгода – год.
Я не знаю, в какой именно конторе ты работаешь, но у нас принимают на работу/увольняют по несколько человек каждый месяц . Но даже если предположить, что в данный момент твой справочник действительно относительно статичен, то почему ты настолько уверен, что через пол-года - год ситуация не измениться самым кардинальным образом и у вас начнется бешенная текучка кадров?

Далее, ты просто вынужден будешь сделать регулярный опрос сервера на предмет ввода изменений в справочник.

Представь простую ситуацию: Один пользователь ввел новый элемент в справочник и создал документ с этим элементом. Далее другой пользователь открывает этот документ и не может найти элемент справочника. В его локальной копии такого нет.

Или обратная ситуация: один пользователь удалил элемент справочника, а другой - создал документ с его использованием. И что делать потом с таким документом?

Не окажется ли такой постоянный опрос сервера в сумме дороже разовых операций скачивания справочника?

И еще раз. Ты как-то совсем упустил из вида основной вопрос: А когда именно нужен весь справочник полностью? В какой момент?

Не окажется так, что полный справочник нужен крайне редко, а ты уже затратишь огромное количество времени и сил на синхронизацию локальных копий и серверного оригинала. Т.е. куча усилий на задачу, которая реально и не нужна вовсе.

ГенГрумСамое тяжелое в программировании – написать описание к программе
Нет, это второе по сложности. На первом месте - это тех.задание к программе. Именно с ним у тебя сейчас большие проблемы.

Прежде чем выдумывать различные решения оцени круг задач для которых это решение необходимо. Точнее, сопоставь усилия, необходимые для ее реализации и актуальность и востребованность этой задачи. Возможно, дешевле (во всех смыслах) работать без этих наворотов.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33075095
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё один момент.

Ответь на вопрос каким образом в такой распределенной системе будут присваиваться первичные ключи, возьмем для примера классический NewID, где и как должна быть организована таблица ключей и в каким образом её синхронизировать.

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

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

Ещё возникает не слабая задача слить то что наделали на разных рабочих
местах в основную БД, те вопрос первый как добавлять/удалять/модифицировать и что принимать за истинные данные, об этом уже упомянул ВладимирМ говоря, что кто-то что-то удалил, а другой с этим что-то модифицировал - это тоже программно не решается.

Для начала попробуй реализовать хотя бы простой пример логики на бумаге и расписать алгоритм решения, думаю получится блок схема на лист формата А2.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33075211
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМЯ не знаю, в какой именно конторе ты работаешь, но у нас принимают на работу/увольняют по несколько человек каждый месяц . Но даже если предположить, что в данный момент твой справочник действительно относительно статичен, то почему ты настолько уверен, что через пол-года - год ситуация не измениться самым кардинальным образом и у вас начнется бешенная текучка кадров?

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


Далее, ты просто вынужден будешь сделать регулярный опрос сервера на предмет ввода изменений в справочник..
Только перед запросом(есть ли изменения в таблице изменений) - в ответ максимум байт 0-100. Копии всех справочников постоянно есть на клиенте.


Представь простую ситуацию: Один пользователь ввел новый элемент в справочник
Код: plaintext
и сохранил локально и на сервере
и создал документ с этим элементом
Код: plaintext
и сохранил
. Далее другой пользователь открывает этот документ и не может найти элемент справочника. В его локальной копии такого нет.
Код: plaintext
перед запросом идет запрос есть ли изменения и если есть скачивается справочник
Или обратная ситуация: один пользователь удалил элемент справочника, а другой - создал документ с его использованием. И что делать потом с таким документом?

Не удаляется, а закрывается по полю дата_по.



Не окажется ли такой постоянный опрос сервера в сумме дороже разовых операций скачивания справочника?
Постоянный опрос идет только если Вы зашли в редактирование справочников(по теме есть ли изменения). И то я не настаиваю на постояном опросе. Можно запретить редактирование справочника другими на время моего редактирования .


И еще раз. Ты как-то совсем упустил из вида основной вопрос: А когда именно нужен весь справочник полностью? В какой момент?
Он постоянно находится на клиенте.


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


Прежде чем выдумывать различные решения оцени круг задач для которых это решение необходимо. Точнее, сопоставь усилия, необходимые для ее реализации и актуальность и востребованность этой задачи. Возможно, дешевле (во всех смыслах) работать без этих наворотов.
Возможно, возможно дешевле (во всех смыслах) работать без этих наворотов.
Но этот принцип я буду использовать во всех моих приложения клиент-сервер.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33075440
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWistЕщё один момент.

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

В такой системе синхронизация, например, справочников решается административным путем (как правильно сам заметил - на локальной станции ничего не удаляется, а только приводится в неактивный режим, как впрочем и в серверной части,
Код: plaintext
неактивный режим - это как? Если нет изменений на сервере всегда работаем с локальным справчником
что бы потом можно было найти концы,
Код: plaintext
можно ввести подпись строки(кто ввел редактировал строку)
более того с локальными данными ничего нельзя сделать - здесь приходиться писать разграничение доступа, правда иногда надо отступать от этих правил, например манагер ошибся в наименовании организации, а клиент приехал за товаром и видит, что название не совпадает, что делать? необходимо отредактировать ),
Код: plaintext
надо обдумать
несмотря на такие ухищрения всё равно возникают коллизии соответствия (но это уже нарушение регламента работы пользователей и программно это не решается).
При коллизии справочников прав тот у кого дата редакции (модификации) больше. У кого меньше(for user) месяга данные Вашего справочника устарели.


Ещё возникает не слабая задача слить то что наделали на разных рабочих
местах в основную БД, те вопрос первый как добавлять/удалять/модифицировать и что принимать за истинные данные, об этом уже упомянул ВладимирМ говоря, что кто-то что-то удалил, а другой с этим что-то модифицировал - это тоже программно не решается.

Все решается программно.


Для начала попробуй реализовать хотя бы простой пример логики на бумаге и расписать алгоритм решения, думаю получится блок схема на лист формата А2.
Да работенка еще та.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33075454
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При копировании фильма РС на РС по локалке 10 Мбит/сек скорость 500-700 кбайт/сек. Лишние 50 кбайт - это 1/10 секунды. Т.е. прога уже будет объективно медленее работать.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33075487
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то я видимо плохо объясняю.

Как работает клиент-сервер: Тебе нужно получить один документ и одну запись из справочника. Ты посылаешь запрос на сервер и он предоставляет тебе эту одну запись.

Все! В данном случае ВЕСЬ справочник НЕ НУЖЕН. Т.е. нет необходимости качать на клиента ВЕСЬ справочник.

Я все пытаюсь получить от тебя ответ, когда же реально на клиенте возникнет необходимость просканировать (отобразить) ВЕСЬ справочник. Иначе какой смысл держать его на клиенте? Уж скачивание одной-то записи справочника никак не перегрузит трафик.

Учти, что отображать несколько тысяч записей через ComboBox в принципе можно, но, боюсь, пользователи тебя прибьют за такой интерфейс.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33075647
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял. Мы говорим о разных вещах. Ты о форме запроса, а я представлении ответа от сервера.

В форме запроса действительно необязатель иметь весь справочник. А в форме
представления ответа от сервера (грид) я получу те лишние 50 кбайт. Запрос например все движения товара с даты по дату.

Извини если я не внимательно читал.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33075695
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, ты опять не о том.

Когда тебе надо получить запрос "все движения товара с даты по дату", то надо понимать, что это некий "отчет". Т.е. относительно редкая задача (запрос). Сильно сомневаюсь, что он выполняется хотя бы несколько раз в день. Скорее, раз в неделю, а может и реже.

Более того, пользователь воспримет с пониманием, если подобный запрос будет выполняться относительно медленно.

Опираться на такие задачи как аргумент раздельного хранения данных крайне неразумно!

Насколько я понимаю, твоя конечная цель хранения справочника на клиенте это:

Уменьшение трафика

Ускорение отклика системы

Обе цели весьма сомнительны.

Прежде чем оценивать выигрыш по данным целям, надо прикинуть, когда именно и что скачивается с сервера при запросах так или иначе использующих справочник.

Для меня запросы к серверу деляться на 2 группы:


Когда пользователь с пониманием отнесется к задержке (спокойно подождет)

Когда пользователь не может ждать (начнет звонить и требовать подать сюда того программиста)

К первой группе относяться все задачи формирования отчетов (то, что ты привел в качестве примера) и, до некоторой степени, поиск нужных документов. И здесь +/- пару минут особой роли не играет.

Так что нет смысла экономить трафик только ради ускорения времени отклика. Причем еще не факт, что время уменьшиться, ведь надо еще "подвязать" полученную выборку к локальному справочнику.

Экономия трафика есть, но тоже весьма сомнительная - запрос выполняется относительно редко, но ты вынужден на синхронизацию твоей системе вести регулярный обмен с сервером по ВСЕМ запросам так или иначе затрагивающим справочник. Т.е. весь день качать по несколько лишних байт на каждый запрос.

Ко второй группе отосятся задачи ввода текущих документов. Пользователь должен получить отклик практически мгновенно, когда он нажал кнопку выбора из справочника.

Вот применительно ко второй группе задач я и рассматривал твою постановку. И тоже не нахожу особого выигрыша в экономии трафика и времени отклика.

Т.е. на время отклика системы локальное расположение справочника практически не повлияет. А вот создать тебе глобальные проблемы поддержки такой системы в актуальном состоянии - создаст.
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33076008
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi ВладимирМ!

Оставь его :) Он сейчас упёрся, и ничего кроме своей "идеальной системы" не видит и видеть не хочет. Судя по всему он даже не удосужился почитать хоть какую-нить простецкую книжку по тому что же такое клиент-сервер, и основополагающих принципов не видит и видеть не желает...
В принципе реализовать можно сколь угодно кривую и даже иногда безумную систему :) - да, набьёт себе кучу шишек, да, будет постоянно бороться с проблемами какие сам себе и создал - но это его право :) Фанатика бесполезно переубеждать - возможно потыкавшись немного в стенку лбом со своей системой, он станет более спокойно смотреть на вещи, перечитает все сообщения данной ветки и напишет в итоге нормальную, "классическую" клиент-серверную систему... А возможно что нет - что он таки доведёт свою идею до логического завершения и напишет приличную систему репликации данных - хотя в одиночку и за ограниченное время - это вряд ли... Тем паче что для таких целей и объёмов - просто смешно наворачивать репликацию IMHO...

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33076290
ФКЬЩкф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ
Учти, что отображать несколько тысяч записей через ComboBox в принципе можно, но, боюсь, пользователи тебя прибьют за такой интерфейс.

Владимир - это НЕ факт.. вот например у нас Оракловы программы - выводится список клиентов, человек так 50
1 - НЕ в алфавитном порядке!!!
2 - ВЕСЬ СПИСОК = чтобы найти нужного в конце надо скролл крутить и крутить :-)
3 - отсортированно ИМХО по времени внесения клиента...
4 - писала достаточно крупная и известная софтконтора :-)
5 - бухгалтера матюкаются конечно, но разработчик далеко и ему по барабану :-)

(Это я так к примеру привел - сам бы им натянул за такое сами знаете что-на-что... :-) )
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33076320
Фотография ГенГрум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi ВладимирМ
У Вас есть дар объяснять доходчиво простые истины. Когда захотите. Спасибо. Вам бы стать Учителем с большой буквы. (значок снимаю шляпу). Но им мало платят. Пойду по стандартному пути.

Hi Igor Korolyov.

Никогда не навешивайте ни на кого ярлыки. Вам же с ними и придется бороться (с ярлыками). Люди не столь однозначны как состояние бита да - нет. Если все многие используют стандартные подходы - это не значит что я не могу обсудить (даже не попробовать, а обсудить) иные методы. И еще если такой большой знаток простых книг назовите на раз книгу, где расписывают технологию клиент-сервер как и почему стандартный подход заведомо лучше все остальных. А то ведь SQL SQL и начинаю описывать операторы, а о технологии ни слова или вскользь. Очень желательно на русском и не раритет. Как Вам select ...
...
Рейтинг: 0 / 0
Какой вариант лучше ?
    #33078887
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi ГенГрум!

Боже меня упаси навешивать ярлыки :) Внимательно перечитай и подумай насчёт второй ветви - я же написал или-или :)
Если бы я мог порекомендовать хорошую книгу, да ещё и на русском, то именно так бы и сделал. Увы, то что я видел либо не очень качественно, либо настолько сложно написано что нельзя рекомендовать :( Приходится как говорится по крупицам информацию извлекать. Хотя собственно КС подход достаточно прост.
Если прочитать название темы, то становится непонятно почему ты так яростно отрицаешь то что тебе советуют. Или тебя интересуют не варианты реализации КС а варианты какими можно сделать систему репликации?
Но тогда уточни вопрос - скажи ЯВНО что тебе не нужен классический КС, что подход ты уже выбрал и менять не будешь, а интересуют тебя тонкости именно этой, вполне определённой системы. Хотя я сомневаюсь что тут найдётся хоть сколько-нибудь много специалистов, серьёзно занимавшихся проблемами репликации, тем паче гетерогенной - между серверной СУБД не поддерживающей хранимых процедур (и вообще мало что поддерживающей) и фоксовой базой.

P.S. Вообще говорить об этих 2-х подходах с позиции "какой лучше" бессмысленно - это как детский спор - кто сильнее слон или тигр или кит... Только в КОНКРЕТНОМ применении можно сказать что-то более-менее определённое, ты же конкретики мало сказал - тебе говорят что НЕ НАДО гнать списки целиком, а ты начинаешь какие-то байтики считать, не обращая внимания на саму идею :(

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Какой вариант лучше ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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