|
Как лучше организовать реалтайм данные?
|
|||
---|---|---|---|
#18+
Задача такая. Каждые 10 секунд поступают данные (цены на бирже). К примеру 50 записей по 5 акциям, а всего акций 1000. Так как сервер из интернета может не всегда отвечать на запрос быстро, а поток у меня один, решил сделать отдельную программу, которая скачивает данные из интернета в базу данных, а пользовательская программа , может только читать эти данные и показывать пользователю. Пока программа была одна, открывал эксклюзивно и перед поступлением новых данных делал delete+PACK. Но в системе из двух программ эксклюзивно не получается. Вопрос, как стирать ненужные данные? Можно, наверно, их перезаписывать, но хочется простое решение найти. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2018, 02:25 |
|
Как лучше организовать реалтайм данные?
|
|||
---|---|---|---|
#18+
В расшаренном режиме невозможно физическое удаление, возможна только пометка на удаление. Можно повторно писать в ненужные записи. Другой вариант писать целыми файлами, т.е. пишешь как раньше монопольно и периодически создаешь копию в отдельный файл. Файл каждый раз с новым именем. Читатель просто открывает самый свежий файл и с ним работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2018, 07:17 |
|
Как лучше организовать реалтайм данные?
|
|||
---|---|---|---|
#18+
Спасибо. Буду писать в старые данные. А так не хотелось ! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2018, 09:36 |
|
Как лучше организовать реалтайм данные?
|
|||
---|---|---|---|
#18+
С благодарностью выслушаю другие варианты. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2018, 09:53 |
|
Как лучше организовать реалтайм данные?
|
|||
---|---|---|---|
#18+
Других вариантов не будет. По команде PACK в реальности происходит следующее: создается временный файл xxx.tmp, туда копируются все не помеченные на удаление, затем исходная DBF удаляется, а xxx.tmp переименовывается в исходную DBF. В случае многопользовательской работы удалить исходную DBF не получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2018, 10:28 |
|
Как лучше организовать реалтайм данные?
|
|||
---|---|---|---|
#18+
А зачем вы вообще данные в постоянную таблицу-то записываете? Бессмысленно как-то каждые 10 секунд полностью обновлять содержимое. Записывайте результат выборки в курсор (временную таблицу). Как следствие, каждый пользователь будет работать со своим набором данных и никак не влиять на работу другого пользователя ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2018, 10:33 |
|
Как лучше организовать реалтайм данные?
|
|||
---|---|---|---|
#18+
А, дошло. У Вас отдельная программа скачивает данные, а другая программа показывает результат этого скачивания. Тогда это второй из предложенных Димой вариантов. Организовать "стек" файлов Т.е. каждый раз при очередном скачивании, Вы сохраняете результате не в том же самом файле DBF, а в новом файле. Соответственно, программы чтения будут выбирать самый "свежий" файл и из него просматривать данные. Т.е. создаете настроечную таблицу из одной записи, где будет хранится имя той таблицы DBF в которой в настоящее время самые свежие данные. Там же можно организовать и некий счетчик для генерации уникального имени файла. Далее работа выглядит так 1. Программа загрузки из интернета скачивает данные и сохраняет их в новом файле DBF. С новым уникальным именем. 2. Если скачивание и сохранение прошло успешно, то в настроечной таблице делается обновление поля, хранящего имя актуального файла DBF 3. Программа чтения смотрит в эту настроечную таблицу и открывает указанный там файл DBF с фиксированным алиасом, который далее и используется в программе Удалять "архивные" файлы DBF сразу после скачивания нельзя, поскольку с ними в этот момент может работать пользователь. Поэтому процедура удаления "архивных" файлов перекладывается на операционную систему, которая с некоторой периодичностью (например, раз в сутки) удаляет все лишнее. Это будет делать третья программа Если скачивание раз в 10 секунд, то за сутки это 10*6*60*24 = 86 400 файлов. Терпимо, в общем... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2018, 10:53 |
|
Как лучше организовать реалтайм данные?
|
|||
---|---|---|---|
#18+
Dima TДругих вариантов не будет. Имелись ввиду, варианты не как запаковать, а как организовать. Я просто многопользовательских приложений не писал, поэтому подумал, вдруг велосипед изобретаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2018, 21:50 |
|
Как лучше организовать реалтайм данные?
|
|||
---|---|---|---|
#18+
Dima TДругой вариант писать целыми файлами, т.е. пишешь как раньше монопольно и периодически создаешь копию в отдельный файл. Файл каждый раз с новым именем. Читатель просто открывает самый свежий файл и с ним работает. Это немного не то, что нужно. Пользователь особо не работает с новыми данными. Точнее работает с одним набором из 100, остальные 99 просмотрел и забыл. Ну это к примеру цена доллара в рублях в последние 10 секунд. Старые данные совсем не нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2018, 21:57 |
|
Как лучше организовать реалтайм данные?
|
|||
---|---|---|---|
#18+
Примерно так получается П1 - программа, которая скачивает из интернета и записывает в dbf. записываем поверх старых данных. Если не влезают - append. П2 - смотрит на данные, и может дать команду для П1 обновить что-то. П1 сообщает в П2 , какие данные обновлены. П2 это сообщение или пропускает или обновляет экран. Записывать поверх старых данных - оказалось не сложно. есть два варианта в зависимости от типа данных. - стереть все - это когда как в обменнике нужно показывать текущие цены по 10 валютам - писать последнюю запись поверх самой старой ( это оказалось с индексами очень простым делом :). Это когда храним историю последних 100 цен, а приходят они по 10 штук. Сообщения между программами я передаю файлами. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2018, 22:11 |
|
Как лучше организовать реалтайм данные?
|
|||
---|---|---|---|
#18+
Появился еще один вопрос. Если я добавляю в проект базу данных, и другие программы с ней работают. При открытии проекта появляется ругань про базу данных. Это я что то не так делаю, или все норм, надо терпеть ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2018, 22:15 |
|
Как лучше организовать реалтайм данные?
|
|||
---|---|---|---|
#18+
ВладимирМТ.е. каждый раз при очередном скачивании, Вы сохраняете результате не в том же самом файле DBF, а в новом файле. Соответственно, программы чтения будут выбирать самый "свежий" файл и из него просматривать данные. Немного структура данных посложнее. У меня нужно показывать 20 цен по одному из по 1000 товаров. Так что получится 1000 хороших файлов. и 1000 строк в dbf со ссылками на эти файлы. Получается слишком сложно, но иногда пойдет и так. Т.е. создаете настроечную таблицу из одной записи, где будет хранится имя той таблицы DBF в которой в настоящее время самые свежие данные. Там же можно организовать и некий счетчик для генерации уникального имени файла. Без счетчика тут не обойтись. Удалять "архивные" файлы DBF сразу после скачивания нельзя, поскольку с ними в этот момент может работать пользователь. Поэтому процедура удаления "архивных" файлов перекладывается на операционную систему, которая с некоторой периодичностью (например, раз в сутки) удаляет все лишнее. Это будет делать третья программа Третья программа - не проблема, но если смотрелка одна, то она и сама может стирать ненужные ей файлы. а несколько смотрелок могут помечать на удаление информацию. и мочить, если все согласны. Спасибо за подробное описание . ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2018, 22:43 |
|
Как лучше организовать реалтайм данные?
|
|||
---|---|---|---|
#18+
BoltushkoПоявился еще один вопрос. Если я добавляю в проект базу данных, и другие программы с ней работают. При открытии проекта появляется ругань про базу данных. Это я что то не так делаю, или все норм, надо терпеть ? Сообщение об ошибке покажи. PS Ctrl+C копирует сообщение об ошибке в буфер обмена. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 07:24 |
|
Как лучше организовать реалтайм данные?
|
|||
---|---|---|---|
#18+
Dima TBoltushkoПоявился еще один вопрос. Если я добавляю в проект базу данных, и другие программы с ней работают. При открытии проекта появляется ругань про базу данных. Это я что то не так делаю, или все норм, надо терпеть ? Сообщение об ошибке покажи. Это у меня, похоже, временный глюк был. Повторить не смог, слава богу! Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2018, 23:31 |
|
|
start [/forum/topic.php?fid=41&msg=39611537&tid=1581815]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
24ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 129ms |
0 / 0 |