2014-11-18 2 views
2

В настоящее время я разрабатываю проект и исследую наилучший способ извлечения данных от промышленных заводских датчиков, подключенных к ПЛК (контроллер оборудования на заводе, например, управляющие двигатели, скорости, переключатели ...).Временная серия Cassandra для промышленных датчиков данных

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

  1. У меня есть несколько программируемых логических контроллеров, которые дают мне много различных значений. (Многие из этих значений являются только булевыми, а другие являются аналоговыми значениями, например, для реального типа.)

  2. У меня будет более 10.000 датчиков на всей фабрике.

  3. Я хочу получать данные, по крайней мере, каждую секунду для аналоговых значений (например, двигатель rmp, температура, влажность ...).

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

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

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

метки времени, sensor1, sensor2, sensor3, sensor4

и грести и сгруппируйте его по частям на заводе-изготовителе или лучше, что

каждый датчик имеет свою собственную таблицу

?

Вся система будет разработана на Java и предоставит данные для внешней компании для ее анализа.

+0

Любые обновления с тех пор, как вы разместили этот вопрос о том, как вы создали проблему? –

ответ

3

Непонятно, каков ваш запрос. Вы указываете «Я хочу получать данные, по крайней мере, каждую секунду для аналоговых значений (например, мотор rmp, температура, влажность ...)».

Означает ли это, что вы запрашиваете каждую секунду для всех датчиков 10K? Или для конкретного датчика или для группы датчиков? В cassandra важно знать, каков ваш запрос, прежде чем смотреть на модели данных. Если вы ищете 1-секундную граничность, одним из вариантов может быть подача входящих потоков данных в Spark Streaming и сохранение кода Spark Streaming в таблицу Cassandra, которая подходит к тому, что вы хотите запросить.

Что касается вариантов, которые вы упомянули, трудно сказать, не зная точной природы ваших запросов. Наличие одного ключа, совпадающего со вторым, может быть опцией - это означает, что для каждого раздела будет иметь значение 10K или около того, при условии, что скорость передачи данных или 1/с на датчик. Наличие таблицы на датчик будет странным, но у вас может быть раздел на датчик с отметками времени для каждой записи. Это зависит от вашего запроса.

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

+0

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

+0

Боюсь, вам нужно немного узнать о ваших запросах. Вы упомянули, что вы укажете время, день и месяц ... будете ли вы также определять датчики или коллекцию датчиков? Какова зернистость времени? Если это второе, и вы не ожидаете 100 тысяч событий в 2-секундном окне, то ((день, час, секунда), sensor_id) * может * быть хорошим первичным ключом. Бу снова, не зная вопросов, мы бросаем в темноту. Я бы действительно проанализировал требования, чтобы увидеть, какие запросы необходимы. Моделирование, управляемое запросами, - это смещение ума, но оно жизненно важно для кассандры. – ashic

+0

спасибо ashic, как мы сказали в испании, как построить дом с крыши. Мне нужно изменить свое мнение, а позже я смогу создать для этого правильную систему. Но я столкнулся с проблемой того, что мы не знаем, какие данные будут использоваться позже, и это вызывает у меня проблему для разработки db на Cassandra – Guel135

3

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

Некоторые вероятными таблицы можно было бы написать это:

CREATE TABLE factory_status (
    date timestamp, 
    hour int, 
    minute int, 
    second int, 
    sensor_status_map map<uuid, float> 
    PRIMARY KEY ((date, hour, minute, second)) 
) 

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

CREATE TABLE sensor_status (
    sensor_id uuid, 
    date timestamp, 
    time timestamp, 
    sensor_val float, 
    PRIMARY KEY ((sensor_id, date), time) 
) 

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

Если у вас возникли проблемы с проектированием «с крыши вниз», не стесняйтесь использовать итеративный подход и добавлять новые таблицы, поскольку вы найдете новый запрос, который вам нужно выполнить, который не соответствует форме старых запросов ,

+0

прежде всего за этот интересный ответ. Теперь я хочу сказать. Один вопрос - есть ли какой-либо предел при снижении производительности, например, в количестве колоний? или, как я вижу в вас первый подход, размещение карты в строке будет более легким подходом, а также настолько гибким для меня (это нормально, чтобы добавлять новые данные датчика). – Guel135

+0

Кассандра эффективно обрабатывает широкие ряды. Количество столбцов не сильно повлияет на скорость. Выполнение запроса подмножества столбцов также эффективно. Есть некоторые потоковые проблемы, когда необработанное количество запрошенных данных становится очень большим (более 2 МБ).Предполагая одно значение или даже небольшое количество значений для каждого датчика, я был бы удивлен, если бы вы столкнулись с этой проблемой с 10 000 датчиков (при 100 000 это могло бы быть более опасным). – mildewey