powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Какой вариант лучше ?
16 сообщений из 41, страница 2 из 2
Какой вариант лучше ?
    #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
16 сообщений из 41, страница 2 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Какой вариант лучше ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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