Персональные инструменты
 

NoSQL-практикум: Промышленная автоматизированая измерительная система на CouchDB (Артур Орлов, ADD-2011)

Материал из CustisWiki

Версия от 12:38, 25 мая 2011; StasFomin (обсуждение | вклад) (Видео)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Это снимок страницы. Он включает старые, но не удалённые версии шаблонов и изображений.
Перейти к: навигация, поиск

Аннотация

Докладчик
Артур Орлов

Опыт создания системы учета электроэнергии с примением CouchDB.


  • Вводная часть.
    • Немного об истории разработки и специфика задачи. Основные требования к системе учета.
    • Архитектура системы учета и место CouchDB в ней.
    • Очень кратко о возможностях CouchDB.
  • Основная часть.
    • CouchDB как база данных для системы учета; задачи, решаемые ею.
    • Проектирование БД на основе CouchDB.
    • Расширение возможностей: создание модулей расширения для CouchDB на Erlang.
    • Итоги: «за» и «против», сравнение с аналогичными решениями на основе SQL-БД.
    • Практические рекоммендации разработчикам, основанные на опыте эксплуатации внедренной системы учета электроэнергии на базовых станциях в одном из филиалов оператора сотовой связи «МТС-Узбекистан».

Видео

Видео в HD-качестве, смотрите в полноэкранном режиме.

HTML-код включения <iframe src="http://player.vimeo.com/video/24186153?byline=0&portrait=0" width="720" height="405" frameborder="0"></iframe>

Скачать
http://ftp.linux.kiev.ua/pub/conference/peers/addconf/2011/1b9-nosql-practice-couchdb-orlov.avs.avi


Для этого доклада нужен подкаст (аудиозапись)?

  •  Да, многое понятно и без видео части, есть смысл его прослушать.
  •  Нет, аудиозапись бесполезна (не понять без видео или вообще мало смысла в докладе).


Примечания и отзывы

Тоже очень интересный доклад. Перед выступающим стояла задача автоматизировать сбор данных с электро-счетчиков через GPRS. Прототип они писали на Python + Postgres, но в итоге решение получилось очень элегантное.

CouchDB по сути сама может выступать как сервер приложений с выполнением JavaScript-кода. Например, может отдавать HTML. Соответственно если логики обработки данных мало, то можно обойтись без сервера приложений вообще. Вроде бы это тот же PL/SQL, только в профиль. Но JS как язык все-таки поинтереснее. Я его недолюбливаю, но это связано с поддержкой браузерами, в БД же все должно быть стабильнее.

Итого, отрекламировал CouchDB докладчик отлично. Осталось ощущение крутоты технологии. Тоже советую доклад в записи посмотреть.

Докладчик — с одной стороны, Капитан Очевидность, видимо не так давно открывший для себя базы данных. Создавайте индексы, смотрите планы запросов. O_o

Но зато рассказал про реализацию системы учёта показаний электросчётчиков на CouchDB — ещё одной NoSQL-базе. CouchDB — это не просто NoSQL-база данных, написанная на Erlang’е, она также содержит внутри себя сервер приложений, который может выполнять javascript, и благодаря этому оно простое и быстрое. Интерфейс к CouchDB — HTTP-запросы (методы GET, PUT, POST, DELETE). Правда, это вам не Mongo и масштабирование — не её сильная сторона — всё масштабирование сводится к мастер-мастер репликации. Но они и не масштабировались, по оценкам им надолго текущей архитектуры хватит.

Кратенько: там есть документы (просто хэш/словарь, какой термин кто больше любит), и дизайн-документы, которые представляют из себя какой-то код, который может, например, что-то агрегировать с помощью map-reduce (получится как бы «view»). Хранит всю историю изменений, вся БД в одном файле, который только растёт вперёд и его нужно время от времени перепаковывать — привет, ACID и MVCC (да, таки оно и есть), PostgreSQL и VACUUM. Есть индексы, правда, их заполнение происходит по требованию и поэтому если накапливается много обновлений — первый запрос будет подтормаживать. Это решается, по-видимому, просто регулярным дёрганьем view по расписанию. Ещё есть простой интерфейс типа «запросить все изменения с момента заданного sequence number», что позволяет легко делать всякие онлайн-обновляемые твиттеры-странички.

Прикольная штука, короче.

  • NoSQL-практикум: Промышленная автоматизированая измерительная система на CouchDB (Артур Орлов, ADD-2011)

Система учета электроэнергии собирает данных с измерительных приборов (в простонародье «счетчики»). Изначально система была вн РСУБД + python. Потом решили использовать CouchDB (почему? по-моему, их заели репликации, а тут значительно проще) В общем, рассказывал, что такое и как делать для него приложения. Очень симпатично: написана на Erlang, включает web-сервер, логика пишется на JavaScript и хранится особыми документами в БД, работа через REST API. Захотелось попробовать.

Артур Орлов, независимый разработчик, кажется, из Узбекистана, рассказывал про систему, собирающую данные со счетчиков электроэнергии в домах и промышленных предприятиях.

Задача

Couchdb example.png

Если коротко, система выглядит так:

  • Имеются разнообразные счетчики потребление электроэнергии, способные замерять некоторые параметры (количество потребленной энергии, мощность, силу тока и т. д.). Счетчики разные, протоколы общения тоже разные.
  • Все они подключены тем или иным проводным протоколом к УСПД — программируемому (на Java2ME) устройству, которое способно накапливать данные.
  • УСПД время от времени (стандартно — раз в день, но зависит от разных обстоятельств, включая наличие связи) передает данные на центральный сервер. Передача происходит по сетям сотовой связи, Data over GSM или GPRS.

Особенности:

  • Много записей, редкие чтение
  • Разные, нестабильные каналы связи
  • Многократное дублирование данных (в самих счетчиках, в УСПД, на сервере)
  • Постоянная модернизация (новые счетчики, новые параметры измерений и т. д.)

Система

Первый вариант системы был построен на стандартной трехзвенной архитектуре и был вполне рабочим.

  • База данных MySQL
  • Сервер приложений (python)
  • Веб-интерфейс пользователя (HTML+CSS+JavaScript)

Второй вариант сделали на CouchDB, которая сразу совмещает все 3 функции:

  • NoSQL хранилище (документ-ориентированная)
  • JavaScript сервер приложений (логика хранится в самой БД, в специальных документах)
  • Веб-сервер

Что это дало по утверждению автора?

  • Высокую скорость разработки:
    • Один язык для всего — JavaScript
    • Документ-ориентированная схема хранения намного легче изменяется (нет всех этих alter table)
    • Масштабируемость из коробки
  • Легкость развертывания (нужно развернуть только CouchDB и положить туда документы с логикой)

CouchDB

CouchDB написан на Erlang, к ней, кстати, можно писать плагины на этом языке. Как работает же CouchDB?

  • Язык общения — REST
  • Формат общения — JSON. Поле добавляется в БД просто добавлением поля к документу
  • Есть мастер-мастер репликация
  • Есть транзакции, она же пакетная обработка (можно отправить одним запросом сразу несколько документов, они будут обработаны пакетом)
  • MapReduce
  • Append-only. Все пишется в один файл.
    • Автоматическая историчность
    • Но за все надо платить — БД занимает больше места

Резюме

Слушать было очень интересно — удачный выбор специфического инструмента это всегда ценно. Задумался о том, что в маленьких домашних проектах нужно расширять кругозор, пытаться искать что-то специальное, что поможет решить ту или иную задачу быстрее и эффективнее, чем написание программы на языке общего назначение/стандартной архитектуры.

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


Призыв к зрителям!

Мы призываем всех зрителей видеозаписей докладов давать хоть какой-нибудь, желательно конструктивный feedback.

Где? — неважно. В блогах, в форумах, в комментах — пофиг, лишь бы можно было найти, например, поиском по блогам, по ключевому слову «ADD-2011» (ну и/или по названию доклада).

Что-то побольше твиттер-вскрика, хотя бы пару абзацев. Да, иногда краткая характеристика бывает достаточной («маркетинговый булшит», «унылый самопиар» — обычно в адрес «спонсорских докладов»), но это очень, очень редко, а так хочется прочитать что-то большее, чем «сижу на XXX, говорят о YYY».

Что писать? Что хорошо, что плохо («плохо» неудачное слово, скажем, «неправильно на ваш взгляд»), как вы поняли то, что рассказано, как это спроецировалось конкретно на вас — все это фантастически важно и полезно:

  • Другим потенциальным зрителям (смотреть/не смотреть, «правильно ли я понял»).
  • И докладчикам:
    • «Правильно ли меня поняли»,
    • «Что я делал правильно, а что улучшить»
    • Даже критический отзыв лучше, чем никакого!
    • Плюс — это мотивация, это награда за немалый труд многие готовятся долго, раскрывают свой опыт, старательно делают слайды, репетируют выступление — и ради чего? двадцать минут театра перед парой десятков зритетелей и все?
  • Организаторам конференций (этой и других) — они внимательно следят за отзывами, и пытаются понять, кого имеет смысл звать («рубит фишку и жжет!»), а к кому отнестись скептически, и если брать, то, например, «прокачать в части выступлений» — мы, например, старались это делать, итеративно рецензировали слайды, рассылали подборку литературы о правильных слайдах и искусстве выступлений.
  • Безотносительно лично докладчиков — важно понять, исчерпала себя тема или для народа еще остаются откровениями то, что для более пресыщенных инфопотоками людей (а организаторы обычно такие) уже выглядит как «аццкий боян». Ну и вообще — что еще интересно, и что было бы интересно услышать-увидеть-пообщаться на тему о…
  • Ну и кстати, мне тоже важно — вообще имел ли смысл весь этот сыр-бор с сьемкой, видеомонтажем и обработкой и публикацией (это, вообще-то дорогая работа, расценки профессионалов в этой области весьма недетские, при том, что до этого уровня монтажа им, как правило очень далеко), или кроме участников конференции эти темы никому не интересны. Может есть какие-то косяки в видео? или предложения как сделать лучше? — связывайтесь со мной, возможно это можно будет исправить (или хотя бы вырезать). Это кстати относится и к докладчикам — если есть какие-то позорные неудачные моменты, или что-то не нравится — это можно убрать.


Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion».


Репликация: База Знаний «Заказных Информ Систем» → «NoSQL-практикум: Промышленная автоматизированая измерительная система на CouchDB (Артур Орлов, ADD-2011)»