MonCaché — реализация MongoDB API на основе InterSystems Caché

image

ИДЕЯ

Идея проекта — попробовать реализовать базовые функции MongoDB API для поиска, сохранения, обновления и удаления документов так, чтобы можно было бы не меняя клиентский код вместо MongoDB использовать InterSystems Caché.

МОТИВАЦИЯ

Возможно, если взять интерфейс MongoDB и в качестве хранилища данных использовать InterSystems Caché, то можно получить некоторый выигрыш в производительности.

Ну, а почему бы и нет?! ¯\_(ツ)_/¯
Читать далее

Школа Инноваций 2015 — что такое хакатон?

В этом году осенняя школа InterSystems слегка изменит формат. Да мы по-прежнему будем собираться в изолированном месте за пределами города, позволяющем максимально погрузиться в темы школы, да, мы по-прежнему будем чередовать теоретические лекции и практические упражнения, и по-прежнему это будет чисто техническое мероприятие. Но…

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

«Хакатон (англ. hackathon, от hack (см. хакер) и marathon — марафон) — форум разработчиков, во время которого специалисты из разных областей разработки программного обеспечения(программисты, дизайнеры, менеджеры) сообща работают над решением какой-либо проблемы. Сегодня хакатоны уже не относятся к хакерству, это просто марафоны программирования. Обычно хакатоны длятся от одного дня до недели.»

Источник <https://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%BA%D0%B0%D1%82%D0%BE%D0%BD>

У каждого из нас (надеюсь) есть несколько идей проектов, которые хорошо бы было когда-нибудь сделать, но никогда не доходили руки. И вот хакатон на школе будет таким шансом. У вас будет целых 24 часа (что равно 1440 минут) чтобы в команде с коллегами максимально продвинуться в любом из направлений. Не обязательно пытаться завершить проект за эти первые сутки активного развития, но опыт показывает, что при правильной концентрации и при достаточном количестве ресурсов, за первые сутки можно сделать максимальное количество ошибок, и вырулить на наиболее правильное направление развития, продвинувшись максимально далеко. Чем если бы вы делали самостоятельно и в свободное от работы время.

(Т.е. разброс сроков тут может быть такой: или два человека и сутки работы, или пару часов в течение полугода)

Real path to success

Источник http://www.businessinsider.com/success-drawing-2012-10

Как это будет происходить?

Перед началом хакатона, будущие лидеры команд выходят и за пару минут пытаются «продать» идею другим (есть такая идея, нужны программисты с такой-то экспертизой, и художники с такой экспертизой). Если идея привлекла и команда сформирована, то они начинают суточный марафон, если его идея не стрельнула, и никто не вызвался помогать, то есть несколько альтернатив: автор продолжает в одиночку, он присоединяется к какой другой достойной команде, или организаторы формируют команду волюнтаристcки. (В конце-концов, куда вы денетесь из пансионата за городом? ;) )

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

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

За пару часов до конца марафона, организаторы проводят тренировочную защиту проектов, и лидеры команд учатся правильно и быстро продавать текущий (или будущий) успех проекта. По завершении марафона все лидеры команд выступают перед аудиторией и организаторами и «за пару минут» выступления пытаются теперь уже всех убедить, что их проект самый полезный и крутой. По завершении докладов команд организаторы совещаются и выбирают победителей/распределяют призы. В настоящий момент предполагается что будут 3 приза от InterSystems, и один приз зрительских симпатий.

Какие темы проектов можно использовать?

Любые, в которых используются технологии платформы InterSystems (Caché, Ensemble, DeepSee, iKnow, whatever). Главным критерием в успехе хакатона всегда, всегда была хорошая идея (ну и правильные люди, собравшиеся в нужном месте). Мы открыты любой идее, если она релевантна InterSystems. Но даже если у вас нет ничего подходящего, у нас есть список тем, которые вы можете использовать для начала работ:

Вы можете выбрать любую из предложенных тем, и скооперировавшись с авторами этих проектов (большинство из которых будет на школе), продвинуть их максимально далеко за заданное время.

P.S.

Персонально я бы обратил ваше внимание на запросы по расширению Atom-COS-Studio, CPM, или cache-map-reduce :)

Но вы, конечно же, вольны выбрать любую тему, даже не из названных списков. Главное, чтобы вам было интересно.

Прямой доступ к классам Caché через REST, на примере DHTMLX Grid

С выходом новой версии InterSystems Caché появилась возможность использовать технологию REST и строить приложения, с помощью различных Javascript UI библиотек, в то время как сервер Caché выступает в роли сервера данных. В данной статье будет рассмотрен очень простой пример доступа к хранимым классам Caché с помощью технологии REST.
Читать далее

InterSystems Caché и технологии NoSQL

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

Интернет проекты с высокой нагрузкой и приложения класса XTP (extreme transaction processing) изменили требования к технологиям СУБД. Приоритетными требованиями стали простота разработки, возможность специализации технологии хранимых данных для конкретного проекта, поддержка постоянного времени реакции системы при увеличении нагрузки, обеспечение низкой стоимости масштабирования и стоимости обработки больших объемов данных.

В качестве ответа на новые потребности возникло движение NoSQL — новый класс баз данных, который обещает разработчикам высокую скорость внесения изменений в приложения, низкие затраты на масштабирование и обработку/хранение больших объемов данных, высокую скорость работы на относительно недорогом железе — ценности, которые всегда были важны и для технологий компании InterSystems. Практически всегда NoSQL базы реализуют отличную от привычной парадигму работы приложений с базами данных — переход от концепции интегрирующей СУБД для нескольких приложений к концепции СУБД для одного приложения или одного проекта и больше — отдельной специфичной задачи в рамках проекта.
Читать далее

GlobalsDB — универсальная NoSQL база данных. Часть 2

GlobalsDBЧасть 1.

Моделируем 4 вида NoSQL-баз с помощью GlobalsDB

Будем реализовывать схемы хранения как в Redis, memcached, Cassandra, Neo4, SimpleDB, MongoDB

Перед тем как мы начнём моделировать различные виды NoSQL-баз, давайте взглянем на глобалы чуть более детально и определим некоторые термины, которые будем использовать позднее.
Читать далее

GlobalsDB — универсальная NoSQL база данных. Часть 1

GlobalsDB

От переводчика

На мой взгляд на Хабре мало информации о бесплатной NoSQL-базе GlobalsDB. Оригинальная статья написана в августе 2011 года и ещё актуальна. Перед вами первая часть. Во второй части будет рассказано как с помощью GlobalsDB моделировать различные типы NoSQL-баз.

Роб Твид (Rob Tweed)

Введение

GlobalsDB — бесплатная база данных, которая использует для сохранения данных механизм Глобальных Постояннохранимых Переменных (Global Persistent Variables), т.е. переменных значения которых автоматически сохраняются на жёстком диске. Они представляют собой абстракцию над бинарными деревьями (B-trees) и могут быть использованы для хранения больших объёмов данных представленных как многомерные разреженные массивы.

С помощью Глобальных Постояннохранимых Переменных (обычно называемых «глобалами», поэтому и база называется GlobalsDB) можно выразительно и высокоэффективно решать все обычные задачи, для которых принято сегодня использовать различные NoSQL-базы.
Читать далее

СУБД Caché. Деревообработка — SQL доступ к многомерным структурам данных

Деревообработка«Caché предоставляет программистам свободу в выборе способа хранения и доступа к данным через объекты, SQL, либо путем прямого доступа к многомерным структурам данных. Независимо от способа доступа, все данные в базах данных Caché хранятся в многомерных массивах.»
Технологический справочник Caché

«Глобалы (глобальные хранимые переменные) – абстракция B-tree структур, используемых в MUMPS для хранения больших объемов данных.»
A Universal NoSQL Engine, Using a Tried and Tested Technology

В статье — пара примеров создания SQL проекций на различные структуры глобалов.
sql them all

Bitmap-индексы в Caché на глобалах

В объектной СУБД Caché поддерживаются bitmap- и bitslice-индексы. Их очень просто использовать в классах Caché: достаточно в описании индекса указать признак Bitmap или Bitslice, и производительность некоторых SQL-запросов улучшается кардинально. Но как это работает?
В этой статье раскрывается, как устроены bitmap-индексы, как создать bitmap-индекс на произвольной структуре глобалов, как применять функции битовой логики и как эффективно их использовать при NoSQL работе в Caché.
Читать далее

Версионное хранение данных в Persistent-классах Caché

В стандартных хранимых классах Caché при модификации записи прежние значения свойств исчезают безвозвратно. Но бывают случаи, когда это нежелательно, когда «все ходы должны быть записаны». В первую очередь, конечно, такое требование возникает при разработке приложений для материально ответственных лиц, для которых критична возможность, например, отменить ошибочное действие и восстановить состояние документа на заданное время, или, что ещё важнее, провести расследование инцидента с попыткой злоумышленника «замести следы» в базе.
В этой статье демонстрируется, как реализовать хранение и восстановление версий для объектов Caché.
Читать далее

БД. Справочники. Примеры на MUMPS (Caché Object Script) 2

В прошлой статье мы рассмотрели пример справочника на MUMPS (Caché Object Script). Были разобраны структуры глобалов и метод retrieve. Мы научились простейшей операции — получению имени элемента по известному идентификатору. Рассматриваемые структуры были одноуровневыми. Опросы и комментарии, после статьи, показали, что тема в целом интересна. Сегодня рассмотрим примеры построения индексов для справочников. Все коды/идентификаторы/имена глобалов — настоящие. Основная идея данных статей — обмен знаниями/опытом разработки и проектирования живых баз данных.

Вкратце напомню основные моменты первой части:

  • cправочник это медленно меняющаяся информация;
  • retrieve — быстрая операция;
  • название элемента справочника меняется в одном месте;
  • Глобал имеет вид: ^ГлобальнаяПеременная(«индекс1»,«индекс2»,…,«индексN»)=«значение»

В примерах будут публиковаться полные версии команд. (write вместо w и т.д.)

Освежим в памяти имеющиеся глобалы с данными:

^Dictionary("Vehicle","TransmissionType",1,0,"UpdateTime")="62086,66625"
^Dictionary("Vehicle","TransmissionType",1,0,"uid")=888
^Dictionary("Vehicle","TransmissionType",2,0,"UpdateTime")="62086,66625"
^Dictionary("Vehicle","TransmissionType",2,0,"uid")=888

^NameDictionaryElement(1,"partUri",0)="akp"
^NameDictionaryElement(1,"partUri",0,"UpdateTime")="62086,66625"
^NameDictionaryElement(1,"ru",0)="АКП"
^NameDictionaryElement(1,"ru",0,"UpdateTime")="62086,66625"
^NameDictionaryElement(2,"partUri",0)="meh"
^NameDictionaryElement(2,"partUri",0,"UpdateTime")="62086,66625"
^NameDictionaryElement(2,"ru",0)="МЕХ"
^NameDictionaryElement(2,"ru",0,"UpdateTime")="62086,66625"

Глобал ^Dictionary — содержит все элементы справочников и их свойства, глобал ^NameDictionaryElement — содержит названия элементов справочников на всех языках.

Команда set — задаёт значение переменной (локальной или глобальной).

А теперь посмотрим как может быть устроен индекс справочника, и разберёмся для чего он нужен.
Читать далее