powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как лучше организовать реалтайм данные?
14 сообщений из 14, страница 1 из 1
Как лучше организовать реалтайм данные?
    #39610943
Boltushko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача такая.
Каждые 10 секунд поступают данные (цены на бирже). К примеру 50 записей по 5 акциям, а всего акций 1000. Так как сервер из интернета может не всегда отвечать на запрос быстро, а поток у меня один, решил сделать отдельную программу, которая скачивает данные из интернета в базу данных, а пользовательская программа , может только читать эти данные и показывать пользователю.
Пока программа была одна, открывал эксклюзивно и перед поступлением новых данных делал delete+PACK. Но в системе из двух программ эксклюзивно не получается.
Вопрос, как стирать ненужные данные?
Можно, наверно, их перезаписывать, но хочется простое решение найти.
...
Рейтинг: 0 / 0
Как лучше организовать реалтайм данные?
    #39610970
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В расшаренном режиме невозможно физическое удаление, возможна только пометка на удаление. Можно повторно писать в ненужные записи.

Другой вариант писать целыми файлами, т.е. пишешь как раньше монопольно и периодически создаешь копию в отдельный файл. Файл каждый раз с новым именем. Читатель просто открывает самый свежий файл и с ним работает.
...
Рейтинг: 0 / 0
Как лучше организовать реалтайм данные?
    #39611024
Boltushko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Буду писать в старые данные. А так не хотелось !
...
Рейтинг: 0 / 0
Как лучше организовать реалтайм данные?
    #39611034
Boltushko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С благодарностью выслушаю другие варианты.
...
Рейтинг: 0 / 0
Как лучше организовать реалтайм данные?
    #39611049
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Других вариантов не будет.
По команде PACK в реальности происходит следующее: создается временный файл xxx.tmp, туда копируются все не помеченные на удаление, затем исходная DBF удаляется, а xxx.tmp переименовывается в исходную DBF.
В случае многопользовательской работы удалить исходную DBF не получится.
...
Рейтинг: 0 / 0
Как лучше организовать реалтайм данные?
    #39611052
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем вы вообще данные в постоянную таблицу-то записываете? Бессмысленно как-то каждые 10 секунд полностью обновлять содержимое. Записывайте результат выборки в курсор (временную таблицу).

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

Тогда это второй из предложенных Димой вариантов. Организовать "стек" файлов

Т.е. каждый раз при очередном скачивании, Вы сохраняете результате не в том же самом файле DBF, а в новом файле. Соответственно, программы чтения будут выбирать самый "свежий" файл и из него просматривать данные.

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

1. Программа загрузки из интернета скачивает данные и сохраняет их в новом файле DBF. С новым уникальным именем.
2. Если скачивание и сохранение прошло успешно, то в настроечной таблице делается обновление поля, хранящего имя актуального файла DBF
3. Программа чтения смотрит в эту настроечную таблицу и открывает указанный там файл DBF с фиксированным алиасом, который далее и используется в программе

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

Если скачивание раз в 10 секунд, то за сутки это 10*6*60*24 = 86 400 файлов. Терпимо, в общем...
...
Рейтинг: 0 / 0
Как лучше организовать реалтайм данные?
    #39611522
Boltushko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TДругих вариантов не будет.
Имелись ввиду, варианты не как запаковать, а как организовать. Я просто многопользовательских приложений не писал, поэтому подумал, вдруг велосипед изобретаю.
...
Рейтинг: 0 / 0
Как лучше организовать реалтайм данные?
    #39611528
Boltushko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TДругой вариант писать целыми файлами, т.е. пишешь как раньше монопольно и периодически создаешь копию в отдельный файл. Файл каждый раз с новым именем. Читатель просто открывает самый свежий файл и с ним работает.
Это немного не то, что нужно. Пользователь особо не работает с новыми данными. Точнее работает с одним набором из 100, остальные 99 просмотрел и забыл. Ну это к примеру цена доллара в рублях в последние 10 секунд. Старые данные совсем не нужны.
...
Рейтинг: 0 / 0
Как лучше организовать реалтайм данные?
    #39611537
Boltushko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Примерно так получается
П1 - программа, которая скачивает из интернета и записывает в dbf. записываем поверх старых данных. Если не влезают - append.
П2 - смотрит на данные, и может дать команду для П1 обновить что-то.
П1 сообщает в П2 , какие данные обновлены. П2 это сообщение или пропускает или обновляет экран.

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

Сообщения между программами я передаю файлами.
...
Рейтинг: 0 / 0
Как лучше организовать реалтайм данные?
    #39611539
Boltushko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Появился еще один вопрос. Если я добавляю в проект базу данных, и другие программы с ней работают. При открытии проекта появляется ругань про базу данных. Это я что то не так делаю, или все норм, надо терпеть ?
...
Рейтинг: 0 / 0
Как лучше организовать реалтайм данные?
    #39611547
Boltushko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМТ.е. каждый раз при очередном скачивании, Вы сохраняете результате не в том же самом файле DBF, а в новом файле. Соответственно, программы чтения будут выбирать самый "свежий" файл и из него просматривать данные.

Немного структура данных посложнее. У меня нужно показывать 20 цен по одному из по 1000 товаров. Так что получится 1000 хороших файлов. и 1000 строк в dbf со ссылками на эти файлы.
Получается слишком сложно, но иногда пойдет и так.

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

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

Спасибо за подробное описание .
...
Рейтинг: 0 / 0
Как лучше организовать реалтайм данные?
    #39611604
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoltushkoПоявился еще один вопрос. Если я добавляю в проект базу данных, и другие программы с ней работают. При открытии проекта появляется ругань про базу данных. Это я что то не так делаю, или все норм, надо терпеть ?
Сообщение об ошибке покажи.

PS Ctrl+C копирует сообщение об ошибке в буфер обмена.
...
Рейтинг: 0 / 0
Как лучше организовать реалтайм данные?
    #39612098
Boltushko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TBoltushkoПоявился еще один вопрос. Если я добавляю в проект базу данных, и другие программы с ней работают. При открытии проекта появляется ругань про базу данных. Это я что то не так делаю, или все норм, надо терпеть ?
Сообщение об ошибке покажи.

Это у меня, похоже, временный глюк был. Повторить не смог, слава богу! Спасибо!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как лучше организовать реалтайм данные?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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