Рубрики
Caché

Собственные типы индексов в СУБД Caché

imageВ объектной и реляционной моделях данных СУБД Caché есть три типа индексов — обычные, bitmap и bitslice. Если по каким-то причинам этих индексов не хватает, начиная с версии 2013.1 программист может определить свой тип индексов и использовать его в любых классах.

Подробности под катом (если вас не пугают слова типа метод-генератор).

Рубрики
Caché

Развёртывание приложений в InterSystems Caché

image

Введение

Итак, вы разработали своё приложение на технологиях InterSystems. Теперь его надо развернуть у клиента и часто не один раз. В процессе разработки у вас появилась инструкция по установке – потому что недостаточно просто импортировать классы, нужно ещё и доработать систему напильником провести тонкую настройку среды под ваши нужды.

Для решения этих задач существует утилита %Installer. Эта статья о ней.

Рубрики
Caché

Удалённое выполнение кода в InterSystems Caché (RCE)

image

Введение

В том случае, если вы управляете более чем одним сервером Caché может возникнуть задача выполнения произвольного кода из одного сервера Caché на другом. Кроме того, может потребоваться выполнение произвольного кода на удалённом сервере Caché, например, для нужд сисадмина.. Для решения этих задач была разработана утилита RCE.

Какие вообще есть варианты решения подобных задач, и что предлагает RCE (Remote Code Execution) – под катом.

Рубрики
Caché

Блоки. Внутреннее устройство файла базы данных Caché. Часть 3

Как и в двух предыдущих частях (часть 1, часть 2), я продолжаю знакомить вас с внутренним устройством баз данных Caché. На этот раз я расскажу о том, что еще можно узнать, и в чем может помочь мой проект Caché Blocks Explorer.

image

Рубрики
Caché

Блоки. Внутреннее устройство файла базы данных Caché. Часть 2

Эта публикация – продолжение моей статьи, в которой я рассказал, как устроена база данных Caché изнутри. В ней я описал типы блоков, как они связаны, какое отношение имеют к глобалам. В той статье была теория. Я создал проект, позволяющий визуализировать дерево блоков – и в этой статье вы всё это увидите. Добро пожаловать под кат.

image

Рубрики
Caché

Глобалы — мечи-кладенцы для хранения данных. Разреженные массивы. Часть 3

imageВ прошлых частях (1, 2) мы говорили о глобалах как о деревьях, в этой мы рассмотрим глобалы как разреженные массивы.

Разреженный массив – это разновидность массива, в котором большинство значений принимает одинаковое значение.

На практике часто встречаются настолько огромные разреженные массивы, что нет никакого смысла занимать память одинаковыми элементами. Поэтому есть смысл разреженные массивы реализовывать так, чтобы память не расходовалась на хранение одинаковых значений.
В некоторых языках программирования разреженные массивы входят в сам язык, например в J, MATLAB. В других языках программирования есть специальные библиотеки, которые позволяют реализовать их. Для С++ – Eigen и др.

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

Рубрики
Caché

Блоки. Внутреннее устройство файла базы данных Caché

Блоки. Внутреннее устройство файла базы данных Caché

Не так давно на хабре в блоге InterSystems были выложены статьи о том, что собой представляет глобал в Caché, с чем его готовят и как подают (часть 1 и часть 2). Это всё, конечно, интересно, удобство работы с любыми моделями данных, какие только пожелает разработчик. Но что обеспечивает хорошую скорость обращения с этими глобалами?

image

Рубрики
Caché

В поисках аналога функций первого порядка в СУБД Caché

Пост написан в дополнение к статье Декларативная разработка на Caché.

 
[2, 3, 5, 7, 11, 13, 17].forEach(function(i) {
  console.log(i);
});

Как делать такое в Caché с помощью COS?
Под катом несколько упражнений на заданную тему.

Рубрики
Caché

Глобалы — мечи-кладенцы для хранения данных. Деревья. Часть 2

imageНачало – см. часть 1.

3. Варианты структур при использовании глобалов

Такая структура как упорядоченное дерево имеет разные частные случаи. Рассмотрим те, которые имеют практическую ценность при работе с глобалами.

3.1 Частный случай 1. Один узел без ветвей

Рубрики
Caché

Глобалы — мечи-кладенцы для хранения данных. Деревья. Часть 1

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

Если использовать глобалы в решении тех задач, в которых они действительно хороши, то можно добиться выдающихся результатов. Либо в производительности, либо в упрощении решения задачи (1, 2).

Глобалы – это специальный способ хранения и обработки данных, совершенно другой, чем таблицы в SQL. Они появились в 1966 году в языке M(UMPS) (эволюционное развитие – Caché ObjectScript, далее COS) в медицинских БД и до сих пор там активно используются, а также проникли в некоторые другие области, где требуется надёжность и высокая производительность: финансы, трейдинг и т.д.

Глобалы в современных СУБД поддерживают транзакции, журналирование, репликацию, партиционирование. Т.е. на них можно строить современные, надёжные, распределённые и быстрые системы.

Глобалы не ограничивают вас пределами реляционной модели. Они дают свободу для разработки структур данных, оптимизированных под конкретные задачи. Для многих приложений разумное использование глобалов может быть поистине секретным оружием, обеспечивая производительность, о которой разработчики реляционных приложений могут только мечтать.

Глобалы как способ хранения данных можно использовать во многих современных языках программирования, как высокоуровневых, так и низкоуровневых. Поэтому в этой статье я сфокусируюсь именно на глобалах, а не на языке, из которого они когда-то вышли.