|
|
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
Прошу помочь со следующей задачей. Есть система, в которую поступают телеметрические данные (по сути это одна табличка в БД с полями id, value и еще несколькими служебными). И есть несколько потребителей этих данных, которые преобразуют их в какой-то формат и пересылают дальше по собственному алгоритму. Мне необходимо отслеживать статус каждой записи - передана/не передана. В случае, когда потребитель данных был один, решалось всё простым добавлением поля status, в которое я записывал некоторое значение в случае успешной передачи. Когда же потребителей несколько, каждый из них должен вести собственный учет переданных данных, причем энергонезависимо, т.е. в БД. Первое, что приходит в голову - это добавить в таблицу несколько полей status, и каждый из потребителей использует свое поле. Но такое решение мне не нравится, т.к. теряется гибкость (ограничение кол-ва потребителей). Подскажите, пожалуйста, как правильно решается такая проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 13:03 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
Pavel V., через дополнительную табличку статусов по потребителям и внешние ключи с транзакционностью операций по всей куче таблиц. В чём проблема? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 13:07 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
создай таблицу id_записи, id_потребителя, status ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 13:08 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
Ребят, спасибо! Примерно так себе и представлял, но не мог до конца в голове оформить :) Получается, на стадии приема данных надо создавать помимо основной записи соответствующие записи в таблице статусов для каждого потребителя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 13:21 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
не обязательно. лучше когда что-то сделаешь с записью тогда и записать в табл. статусов ее состояние ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 13:30 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
Pavel V.Прошу помочь со следующей задачей. Есть система, в которую поступают телеметрические данные (по сути это одна табличка в БД с полями id, value и еще несколькими служебными). И есть несколько потребителей этих данных, которые преобразуют их в какой-то формат и пересылают дальше по собственному алгоритму. Мне необходимо отслеживать статус каждой записи - передана/не передана. В случае, когда потребитель данных был один, решалось всё простым добавлением поля status, в которое я записывал некоторое значение в случае успешной передачи. Когда же потребителей несколько, каждый из них должен вести собственный учет переданных данных, причем энергонезависимо, т.е. в БД. Первое, что приходит в голову - это добавить в таблицу несколько полей status, и каждый из потребителей использует свое поле. Но такое решение мне не нравится, т.к. теряется гибкость (ограничение кол-ва потребителей). Подскажите, пожалуйста, как правильно решается такая проблема? Решается путем ясной формулировки задачи. Ее пока нет. Если речь об одном признаке, который Вы назвали status, то достаточно просто объявить связь между двумя типами сущностей Измерение и Потребитель. Приходится еще раз всем, и, в первую очередь, модераторам предложить: переименуйте раздел в "Проектирование реляционных БД". Потому что, все здесь мыслят исключительно "табличками")) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 13:31 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
шмне обязательно. лучше когда что-то сделаешь с записью тогда и записать в табл. статусов ее состояние А как тогда будет выглядеть запрос со стороны потребителя к базе данных для получения всех записей, которые не были обработаны этим потребителем? БредятинаРешается путем ясной формулировки задачи. Ее пока нет. Вроде постарался подробно описать задачу, что именно не понятно? БредятинаЕсли речь об одном признаке, который Вы назвали status, то достаточно просто объявить связь между двумя типами сущностей Измерение и Потребитель. Да, признак один. Потребитель здесь скорее не сущность, а некая программа. Т.е. упрощенно можно представить так: одна программа принимает данные и складывает в базу, и несколько других программ подключается к той же базе и забирает эти данные для последующей обработки. И должна помечать уже обработанные. БредятинаПриходится еще раз всем, и, в первую очередь, модераторам предложить: переименуйте раздел в "Проектирование реляционных БД". Потому что, все здесь мыслят исключительно "табличками")) Прошу не сердиться, я хоть и программист, но с базами приходится иметь дело редко и пока нет возможности разобраться в этом вопросе, т.к. других заморочек хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 13:49 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
Pavel V.шмне обязательно. лучше когда что-то сделаешь с записью тогда и записать в табл. статусов ее состояние А как тогда будет выглядеть запрос со стороны потребителя к базе данных для получения всех записей, которые не были обработаны этим потребителем? Как выглядеть - с left join'ом ;) Не создавать связи сразу - это Вам правильно советуют. Иначе генератор данных должен "знать", сколько и каких потребителей данных будет - а это совершенно не его дело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 14:26 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
Pavel V.шмне обязательно. лучше когда что-то сделаешь с записью тогда и записать в табл. статусов ее состояние А как тогда будет выглядеть запрос со стороны потребителя к базе данных для получения всех записей, которые не были обработаны этим потребителем? Вы начали формулировать задачу, постепенно. И один из пунктов гласит: n. Каждое измерение должно быть обработано каждым потребителем. Pavel V.БредятинаРешается путем ясной формулировки задачи. Ее пока нет.Вроде постарался подробно описать задачу, что именно не понятно? См. выше, и это, по всей вероятности, не все. Pavel V.БредятинаЕсли речь об одном признаке, который Вы назвали status, то достаточно просто объявить связь между двумя типами сущностей Измерение и Потребитель. Да, признак один. Потребитель здесь скорее не сущность, а некая программа. Нет. Вы хотите сказать что тип сущности Потребитель - это программа. Можно назвать этот тип сущности Программа-потребитель, например. Pavel V.Т.е. упрощенно можно представить так: одна программа принимает данные и складывает в базу, и несколько других программ подключается к той же базе и забирает эти данные для последующей обработки. И должна помечать уже обработанные. Опять не формально) n. Каждое Измерение должно быть обработано каждой Программой-потребителем. Вероятно, пока, так. Pavel V.БредятинаПриходится еще раз всем, и, в первую очередь, модераторам предложить: переименуйте раздел в "Проектирование реляционных БД". Потому что, все здесь мыслят исключительно "табличками")) Прошу не сердиться, я хоть и программист, но с базами приходится иметь дело редко и пока нет возможности разобраться в этом вопросе, т.к. других заморочек хватает. Я написал модератору) Зачем мне сердиться?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 15:22 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
шмсоздай таблицу id_записи, id_потребителя, statusЕсли статус - передано/не передано, то этот столбец не нужен. Сам факт наличия в этой таблице записи уже должен говорить о том, что запись передана. (пояснения наверное больше для ТС :-) Соответственно этот вопрос отпадает: Pavel V.Получается, на стадии приема данных надо создавать помимо основной записи соответствующие записи в таблице статусов для каждого потребителя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 15:24 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
Pavel V.А как тогда будет выглядеть запрос со стороны потребителя к базе данных для получения всех записей, которые не были обработаны этим потребителем? В текущей постановке такой запрос не нужен. Так же не нужен и тип сущности Обработка измерений, который Вы хотите моделировать с помощью третьей таблицы. При создании Измерения создается связь со всеми Программами-потребителями. При успешной обработке связь удаляется:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 15:31 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
БредятинаОпять не формально) n. Каждое Измерение должно быть обработано каждой Программой-потребителем. Вероятно, пока, так. Хм... А откуда это следует? Из описания задачи не выводится, что каждый Потребитель обрабатывает каждое Изменение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 15:53 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
Попробую описать еще раз задачу. 1. Данные приходят и попадают в БД, после этого они не изменяются никогда - это результаты измерений с кучи однотипных приборов. 2. Есть несколько (пока не известно сколько) обработчиков этих данных. Каждый обработчик должен периодически забирать новые (после последнего запроса) данные и обрабатывать их, каким-то образом запоминая какие он уже обработал. Пока писал родилась идея. Если все измерения попадают в таблицу с автоматически инкрементирующимся идентификатором, то можно просто в каждом обработчике запоминать последний обработанный id. В этом случае, правда, с исходными данными только линейно работать получится... В случае использования дополнительной таблицы можно произвольные выборки делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 16:28 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
> несколько (пока не известно сколько) обработчиков этих данных Вы, наверное, хотели написать "подписчиков"? > в каждом обработчике запоминать последний обработанный id Совершенно верно. Подписчик, время последнего сеанса, последний отданный идентификатор. > с исходными данными только линейно работать получится В смысле "линейно работать"? Отдать больше, чем есть в базе данных, вы не можете. Что с этими данными дальше будет делать подписчик - не ваша забота, насколько я понимаю. > можно произвольные выборки делать Вам и сейчас никто этого делать не запрещает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 16:54 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
474БредятинаОпять не формально) n. Каждое Измерение должно быть обработано каждой Программой-потребителем. Вероятно, пока, так. Хм... А откуда это следует? Из описания задачи не выводится, что каждый Потребитель обрабатывает каждое Изменение. Описания задачи нет, и это может следовать только из того, что говорит в разных сообщениях автор:) Я предложил ему гипотетический n-ый пункт из будущего описания задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 17:37 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
Pavel V.Попробую описать еще раз задачу. 1. Данные приходят и попадают в БД, после этого они не изменяются никогда - это результаты измерений с кучи однотипных приборов. Слова "куча", "однотипны" и "приборы" вносят серьезную путаницу. Подтвердите, что Вы погорячились, и приборы и их типы учитывать никак не нужно . Pavel V.2. Есть несколько (пока не известно сколько) обработчиков этих данных. Каждый обработчик должен периодически забирать новые (после последнего запроса) данные и обрабатывать их, каким-то образом запоминая какие он уже обработал. Пока писал родилась идея. Если все измерения попадают в таблицу с автоматически инкрементирующимся идентификатором, то можно просто в каждом обработчике запоминать последний обработанный id. Неверная идея. Поскольку не определено, что значит "последний обработанный". Ведь ДО этого УСПЕШНО обработанного могут быть НЕ УСПЕШНО ОБРАБОТАННЫЕ:) Или не могут? Это тоже нигде не сформулировано. Pavel V.В случае использования дополнительной таблицы можно произвольные выборки делать. Опять неверно говорите. Вы хотите сказать, что хотели бы использовать и тип сущности Обработка измерений. Это имеет смысл, если предполагаются какие-то свойства этого типа сущности хранить в БД. До сих пор эти свойства не определены. И каких-либо запросов просто не может быть. Вероятно, Вы предполагаете, что свойства этого типа сущности, все-таки, нужны в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 17:47 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
1. Приборы учитывать не надо. Можно считать, что это показания термометра за окном раз в минуту. 2. Данные сейчас обрабатываются последовательно, т.е. пока не обработаем какую-то порцию, к новой не переходим. 3. Свойство нужно только одно - обработано показание или нет. По поводу линейной/не линейной работы я имел в виду возможность сделать произвольную выборку необработанных обработчиком показаний данных (например, с 10-00 по 12-00) и отметить их обработанными. После этого я бы мог взять показания с 8-00 до 9-00. В этом случае вариант с идентификатором не пройдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 18:02 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
Pavel V.1. Приборы учитывать не надо. Можно считать, что это показания термометра за окном раз в минуту. 2. Данные сейчас обрабатываются последовательно, т.е. пока не обработаем какую-то порцию, к новой не переходим. 3. Свойство нужно только одно - обработано показание или нет. По поводу линейной/не линейной работы я имел в виду возможность сделать произвольную выборку необработанных обработчиком показаний данных (например, с 10-00 по 12-00) и отметить их обработанными. После этого я бы мог взять показания с 8-00 до 9-00. В этом случае вариант с идентификатором не пройдет. 13862531 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 20:03 |
|
||
|
Один источник данных и несколько потребителей с доп. атрибутами к данным
|
|||
|---|---|---|---|
|
#18+
> линейной/не линейной работы Дружище, у вас жуткая каша в голове. В одном случае вы говорите о пакетной обработке, в другом - об обработке каждого элемента пакета. Вы понимаете, что это взаимоисключающие определения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2013, 22:27 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38134162&tid=1541390]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 326ms |

| 0 / 0 |
