Caché

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 21:04, 14 мая 2018.
Caché
IScache logo.jpg
Разработчики: InterSystems
Предыдущий выпуск: 2017.2 / October 5, 2017
Операционная система: UNIX, Linux, Windows/NT, Mac OS X, OpenVMS
Веб-сайт www.intersystems.com/ru/

Содержание

Описание

InterSystems Caché - это высокопроизводительная база данных, которая поддерживает приложения обработки транзакций по всему миру. Оно используется для всего, от того, чтобы отображать миллиарды звезды в Млечном Пути, обрабатывать миллиарды акций в день, управлять интеллектуальными энергетическими сетями. [Источник 1]

Что есть Caché

Уникальная архитектура

Caché сильна своей уникальной в своем представлении архитектурой. В основе ядра базы данных Caché лежит большой функционал, включая хранение данных, управление параллелизмом, транзакции и управление процессами, необходимые для создания сложных систем управления базами данных. Движок Caché является мощным инструментом по работе с базами данных. Используя этот инструментарий, Caché реализует полную систему управления объектами и реляционными базами данных. Преимущества этой архитектуры многообразны:[Источник 2]

  • Объектная и реляционная базы данных напрямую связаны с движком базы данных для эффективной работы; нет объектно-реляционного промежуточного программного обеспечения или технологии соединения между объектами.
  • Логическое разделение базы данных от ее физической реализации позволяет радикально перенастроить развертывание приложений без изменения логики приложения.
  • Поскольку интерфейс ядра(движка) базы данных открыт, вы можете прямо использовать его возможности там, где это необходимо. Это может понадобиться при создании собственной настраиваемой системы управления базами данных, или вплоть для добавления целенаправленной оптимизации приложений с критическими характеристиками.
  • Платформа для будущего: архитектура Caché делает возможными будущие усовершенствования движка базы данных без влияния на существующие приложения. Например, Caché v4.1 представила совершенно новую структуру физических данных с резко улучшенной масштабируемостью и производительностью, которая не только не требовала изменений в существующих приложениях, но также не требовала изменений в объектах Caché или реляционных системах. По мере появления новых технологий Caché может добавить поддержку собственных высокопроизводительных компонентов, которые мало влияют на существующие приложения.

Высокопроизводительная база данных объектов - с реляционным доступом

Caché предназначен для преодоления ограничений реляционной модели, предоставляя эволюционный путь обновления для тысяч существующих приложений реляционных баз данных, а также поддержку многих инструментов отчетности на базе SQL на рынке. Caché также является полнофункциональной реляционной базой данных и является высокопроизводительной объектной базой данных. Все данные в базе данных Caché доступны как истинные реляционные таблицы и могут быть запрошены и изменены с использованием стандартного SQL с помощью методов ODBC, JDBC. Кроме того, Caché предлагает функции, выходящие за рамки реляционных баз данных, при этом поддерживая стандартное реляционное представление данных. Эти функции включают в себя:

  • Возможность моделировать данные как объекты (каждая из которых имеет автоматически созданное и синхронизированное собственное реляционное представление), одновременно устраняя несоответствие импеданса между базами данных и объектно-ориентированными средами приложений, а также уменьшая сложность реляционного моделирования.
  • Более простая модель параллелизма на основе объектов.
  • Пользовательские типы данных.
  • Возможность использовать методы и наследование, включая полиморфизм, в рамках механизма базы данных.
  • Расширения объектов для SQL для обработки идентичности объекта и отношений.
  • Возможность смешивать SQL и объектно-ориентированный доступ в одном приложении, используя каждый, для чего он лучше всего подходит.
  • Управление физическим расположением и кластеризацией, используемыми для хранения данных, чтобы обеспечить максимальную производительность приложений.

В то время как большинство баз данных с объектным и реляционным доступом обеспечивают одну форму доступа друг к другу, SQL и объектные аспекты Caché обеспечивают доступ к данным - так, чтобы пользователи пользовались преимуществами производительности любого подхода.

Широкий набор инструментов

Caché предлагает широкий набор инструментов, которые включают:

  • ObjectScript, язык, на котором написана большая часть Caché.
  • Собственные реализации SQL, MultiValue и Basic.
  • Хорошо разработанная, встроенная модель безопасности.
  • Набор технологий и инструментов, которые обеспечивают быструю разработку для баз данных и веб-приложений.
  • Поддержка родных, объектных XML и веб-сервисов.
  • Поддержка устройств (TCP/IP, принтеры).
  • Автоматическая интероперабельность через Java, JDBC, ActiveX, .NET, C++, ODBC, XML, SOAP, Perl, Python и другие.
  • Поддержка общих интернет-протоколов: POP3, SMTP, MIME, FTP и другие.
  • Поддержка анализа неструктурированных данных.
  • Поддержка бизнес-аналитики (BI).
  • Встроенные средства тестирования.

Caché в действии

Caché используется во всем мире для широкого спектра приложений, начиная от однопользовательских встроенных систем и заканчивая многосерверными установками на предприятиях с десятками тысяч одновременных пользователей, в масштабе штата (распространен на территории США) и в масштабе всей страны.[Источник 3] Небольшая выборка приложений, построенных с помощью Caché:

  • В качестве платформы приложений для большой сети здравоохранения работают сотни критически важных приложений. Сеть включает в себя набор систем Caché, действующих как серверы данных и приложений, и имеет более 30 000 клиентских машин.
  • Как сервер данных для системы обмена сообщениями на базе Java для крупных финансовых учреждений. Caché был выбран как для своей работы, так и для его возможности выполнять индивидуальные задачи, которые невозможно сделать в традиционной реляционной базе данных.
  • Как система OLTP (онлайн-обработка транзакций на основе SQL) для крупной правительственной организации с более чем 1400 параллельными пользователями. Caché был заменой (без изменений уже написанного приложения), когда другие реляционные продукты не могли предоставить гибкое решение.
  • В качестве базы данных объектов и веб-приложений для онлайн-образовательной системы, используемой ведущим техническим университетом. Caché был выбран для его быстрого развертывания (приложение должно было быть построено через три месяца), его объектных возможностей, а также его способности масштабироваться без повторной обработки приложения.
  • Как база данных объектов, используемая для отслеживания положения и скорости в реальном времени профессиональных спортсменов во время чемпионата мира. Caché был выбран по причине его производительности (по сравнению с ведущими объектными и реляционными базами данных) и его собственной поддержкой C++ - интерфейса.
  • Как распределенный механизм SQL-данных для крупного веб-сайта с миллионами пользователей. Этот сайт использует набор экономичных серверов на базе Linux и использует распределенное управление данными Caché для предоставления масштабируемого персонализированного сайта без промежуточного программного обеспечения или инфраструктуры сетевого кэширования. Стоимость аппаратного обеспечения этой системы (четыре готовых Linux-машины) составляла менее 10% от данных, цитируемых «ведущей базой данных для интернет-приложений».

Движок (ядро) базы данных Caché

В основе Caché лежит ядро Caché Database Engine. Ядро базы данных сильно оптимизировано для наилучшей производительности, параллелизма, масштабируемости и надежности. Для достижения максимальной производительности, на каждой поддерживаемой платформе были проделаны колоссальные работы по оптимизации.

Caché - полнофункциональная система баз данных; она включает в себя все функции, необходимые для запуска критически важных приложений (включая журналирование, резервное копирование и восстановление, а также средства администрирования системы). Чтобы сократить эксплуатационные расходы, Caché спроектирован таким образом, чтобы требовать значительно меньше администрирования баз данных, чем другие базы данных. Большинство развернутых систем Caché не имеют администраторов баз данных.

Транзакционное многомерное хранилище

Все данные в Caché хранятся в разреженных многомерных массивах. В отличие от многомерных массивов, используемых типичными продуктами OLAP (онлайн-аналитической обработки), Caché поддерживает операции обработки транзакций (вставки, обновления, блокировку, транзакции) в своих многомерных структурах. Кроме того, в отличие от большинства модулей OLAP эти многомерные структуры не ограничены по размеру доступной памяти. Вместо этого Caché включает в себя сложный и эффективный кеш данных. Поскольку данные Caché имеют по существу переменную длину и хранятся в разреженных массивах, Caché часто требует менее половины пространства, необходимого реляционной базе данных. В дополнение к уменьшению требований к дискам компактное хранилище данных повышает производительность, поскольку больше данных можно считывать или записывать с помощью одной операции ввода-вывода, а данные можно кэшировать более эффективно. Многомерные массивы предоставляют приложениям большую степень гибкости в том, как они хранят свои данные. Например, набор тесно связанных объектов, например объект-счетчик (Invoice) и его соответствующие объекты LineItem, можно легко настроить таким образом, чтобы объекты LineItem были физически сгруппированы с объектом Invoice для высокоэффективного доступа. Гибкость транзакционного многомерного хранилища дает Caché значительное преимущество над двумерной структурой, используемой традиционными реляционными базами данных: именно эта гибкость позволяет Caché быть высокопроизводительной SQL, объектной и XML-базой данных без компромиссов. Это также означает, что приложения Caché лучше подготовлены к будущим изменениям в технологии баз данных.

Сопоставление

Используя уникальную функцию, известную как сопоставление, вы можете указать, как данные в пределах одного или нескольких массивов (или частей массивов) сопоставляются с файлом физической базы данных. Такое сопоставление является задачей администрирования базы данных и не требует изменений в определениях классов/таблиц или логики приложения. Более того, отображение может выполняться в пределах определенного разреженного массива; вы можете сопоставить один диапазон значений с одним физическим местоположением при сопоставлении другого файла с другим файлом, диском или даже с другим сервером базы данных. Это позволяет с легкостью перенастроить приложения Caché (например, для масштабирования).

Управление процессом

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

Управление блокировкой

Для обеспечения одновременного доступа к базе данных Caché включает мощную систему управления блокировками. В системах с тысячами пользователей сокращение конфликтов между конкурирующими процессами имеет решающее значение для обеспечения высокой производительности. Один из самых больших конфликтов - между транзакциями, желающими получить доступ к тем же данным. Caché предлагает следующие функции для облегчения таких конфликтов:

  • Атомные операции. Чтобы устранить типичные "горячие" точки, Caché поддерживает ряд атомных операций, которые не требуют блокировки уровня приложения. Примером может быть атомарное выделение уникальных значений для идентификации объектов/строк (общее узкое место в реляционных приложениях).
  • Логические блокировки - Caché не блокирует целые страницы данных при выполнении обновлений. Поскольку большинство транзакций требуют частого доступа или изменений в небольших количествах данных, Caché поддерживает гранулированные логические блокировки, которые могут быть выведены на основе каждого объекта (строки).
  • Распределенные блокировки. В распределенных конфигурациях базы данных система автоматически поддерживает распределенные блокировки.

Управление распределенными данными

Одной из самых мощных функций Caché является способность связывать серверы вместе для формирования распределенной сети передачи данных. В такой сети машины, которые в основном обслуживают данные, известны как Серверы данных (Data Servers), тогда как те, которые в основном обрабатывают хосты, но практически не имеют данных, известны как Серверы приложений (Application Servers).[Источник 4]

Схема включения серверов Caché

Серверы могут совместно использовать данные (а также блокировки) с использованием Caché Enterprise Cache Protocol (ECP). ECP эффективен, поскольку данные транспортируются в пакетах. Когда информация запрашивается по сети, пакет данных ответа включает в себя требуемые данные, а также дополнительные связанные данные. Связи естественных данных, присущие объектам, и многомерная модель данных Caché позволяют идентифицировать и включать информацию, связанную с первоначально запрошенными данными. Эта «связанная» информация кэшируется локально либо на клиенте, либо на сервере приложений. Обычно последующие запросы данных могут быть удовлетворены из локального кеша, что позволяет избежать дополнительного трафика по сети. Если клиент изменяет любые данные, только обновления распространяются обратно на сервер базы данных. ECP позволяет приложениям поддерживать самые разнообразные конфигурации времени выполнения, включая многоуровневые и одноранговые.

Управление журналом

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

Переносимость базы данных

Caché работает и оптимизирован для самых разных аппаратных платформ и операционных систем. Можно легко переносить приложения, разработанные с помощью Caché, а также данные с одной платформы на другую. Это может быть так же просто, как установка Caché на новой платформе и перемещение файлов базы данных в новую систему. При перемещении между некоторыми системами вам может потребоваться запустить утилиту для преобразования данных (для преобразования одного представления файла в другое, имеется ввиду смена позиций байтов(endian)).

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

Caché поддерживает множество различных конфигураций времени выполнения, что обеспечивает максимальную гибкость при развертывании приложений. Вы можете переключаться между различными вариантами развертывания, изменяя системные настройки Caché; обычно нет необходимости менять логику приложения. Ниже перечислены некоторые основные варианты развертывания.

Основная конфигурация клиента/сервера

В простейшей конфигурации клиент/сервер один сервер данных Caché обслуживает несколько клиентов (от одной до нескольких тысяч, в зависимости от приложения и платформы).

Простейшая конфигурация

Клиентские системы могут быть любыми из следующих:

  • Отдельные настольные системы, в которых работает клиентское приложение, которое подключается через протокол клиент/сервер (например, ODBC, ActiveX, JDBC, Java).
  • Веб-сервер обрабатывает сообщения с Caché через Zen, CSP (серверные страницы Caché), SOAP или некоторые другие возможности подключения (такие как ODBC, JDBC). Каждый процесс веб-сервера может затем обслуживать несколько сеансов на основе браузера или между машинами.
  • Процессы промежуточного программного обеспечения (например, сервер приложений Enterprise Java Bean), которые подключаются к Caché через ODBC, JDBC.
  • Устройства, такие как терминалы или лабораторное оборудование, которые подключаются к Caché, используя один из многих поддерживаемых протоколов (включая TELNET и TCP/IP).
  • Некоторая комбинация из вышеперечисленного.

Конфигурация теневого сервера (Shadow Server)

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

Конфигурация теневого сервера

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

Многоуровневая конфигурация

Конфигурация многоуровневого уровня использует технологию распределенных баз данных Caché - протокол корпоративного кэша (ECP) - чтобы обеспечить большее число клиентов для подключения к системе.

Многоуровневая конфигурация

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

Объекты, SQL и унифицированная архитектура данных

Мощная и уникальная особенность Caché - уникальная унифицированная архитектура данных, которая обеспечивает одновременный высокопроизводительный объектный и реляционный доступ к данным, хранящимся в Caché.

Словарь унифицированных данных

Внутри Caché можно моделировать компоненты приложения как объекты. Объекты организованы классами, которые определяют данные (свойства) и поведение (методы) объекта.

Словарь унифицированных данных

Мета-информация или определение каждого класса хранится в общем репозитории, называемом словарем класса Caché. Словарь класса сам по себе является объектной базой данных, хранящейся в Caché, доступ к которой можно получить с помощью объектов. Словарь класса с помощью компилятора класса определяет структуру хранения, необходимую постоянным объектам, и преобразует определения классов в параллельные наборы исполняемого кода, которые обеспечивают как объект, так и реляционный доступ к этой структуре хранения. С помощью этой архитектуры пути объектов и реляционных кодов эффективны и автоматически синхронизируются друг с другом.[Источник 5] Определения классов могут быть добавлены в словарь классов несколькими способами:

  • Интерактивно, используя среду разработки Studio.
  • Реляционно, используя DDL. Caché принимает стандартные SQL DDL-операторы и автоматически создает соответствующие определения классов и таблиц.
  • Текстово, используя XML. Caché поддерживает внешнее XML-представление определений классов. Обычно это используется для управления исходным кодом, его развертывания, автоматической генерации кода и взаимодействия с другими инструментами.
  • Программно, используя объекты. Используя набор объектов класса Caché, вы можете создавать программы, которые напрямую взаимодействуют с словарем класса и создавать новые классы во время выполнения приложения.
  • Использование мастера XML Schema Wizard, входящего в состав Studio, который может создавать определения классов из большинства файлов схем XML.

Гибкое хранение

Объектная модель Caché отличается от модели языков программирования тем, что помимо свойств и методов вы можете указать поведение, связанное с хранением, такое как индексы, ограничения и структура хранилища. Структура хранилища, используемая постоянными объектами, не зависит от логического определения класса и достаточно гибкая: разработчики могут использовать структуры по умолчанию, предоставляемые компилятором класса, или они могут настраивать структуры для конкретных случаев.

Объекты

Caché включает полнофункциональную базу данных объектов нового поколения, специально разработанную для удовлетворения потребностей сложных, ориентированных на транзакции приложений. Объектная модель Caché включает в себя следующие функции:

  • Классы. Вы можете определить классы, которые представляют состояние (данные) и поведение (код) ваших компонентов приложения. Классы используются для создания экземпляров объектов как компонентов времени выполнения, так и элементов, хранящихся в базе данных.
  • Свойства. Классы могут включать свойства, которые определяют данные, связанные с каждым экземпляром объекта. Свойства могут быть простыми литералами (такими как строки или целые числа), определяемыми пользователем типами (определенными с использованием классов типов данных), сложными (или внедренными) объектами, коллекциями или ссылками на другие объекты.
  • Отношения. Классы могут определять, как экземпляры объектов связаны друг с другом. Система автоматически предоставляет навигационные методы для отношений, а также ссылочную целостность в базе данных.
  • Методы. Классы могут определять поведение с помощью методов: исполняемый код, связанный с объектом. Методы объектов запускаются в процессе сервера Caché (хотя они могут быть вызваны с удаленного клиента). Методы объектов могут быть написаны сценарием с использованием ObjectScript, SQL или их можно сгенерировать с помощью генераторов методов, которые представляют собой код, который автоматически создает настраиваемые методы в соответствии с определенными пользователем правилами.
  • Постоянство объектов. У постоянных объектов есть возможность автоматически сохранять и извлекать данные из базы данных. Поддержка постоянства включает в себя полную функциональность базы данных, включая автоматическое управление транзакциями, контроль параллелизма, обслуживание индексов и проверку данных. Постоянные объекты автоматически отображаются через SQL-запросы.
  • Наследование. Вывод новых классов из существующих, вы можете повторно использовать ранее написанный код, а также создавать специализированные версии классов.
  • Полиморфизм - Caché поддерживает полный полиморфизм объектов. Это означает, что приложения могут использовать четко определенный интерфейс (набор методов и свойств, предоставляемых суперклассом), и система автоматически выведет правильную реализацию интерфейса в зависимости от типа каждого объекта. Это значительно упрощает разработку гибких приложений баз данных.
  • Swizzling (также известная как «ленивая загрузка») - Caché автоматически "свизлит" (приносит в память с диска) любые связанные постоянные объекты, когда они ссылаются на другие объекты. Это значительно упрощает работу со сложными моделями данных.

Определение классов

Простейшим и наиболее распространенным способом определения классов в Caché является использование среды разработки Studio. Studio позволяет вам определять классы либо с использованием простого текстового формата в редакторе раскраски синтаксиса, либо с помощью графического интерфейса «точка-и-щелчок». Эти два вида взаимозаменяемы и автоматически синхронизируются.[Источник 6] Вот определение чрезвычайно простого постоянного объекта Component, как показано в среде разработки Studio:

Class MyApp.Component Extends %Persistent
{
Property TheName As %String;
Property TheValue As %Integer;
}

Этот класс определяется как постоянный класс (то есть он может хранить себя в базе данных). В этом случае Cache-предоставленный %Persistent class (имена системных классов начинаются с символа «%», чтобы отличить их от классов приложений) предоставляет весь необходимый код Persistent через наследование. Класс принадлежит пакету «MyApp». Пакеты объединяют классы, связанные друг с другом, и значительно упрощают разработку крупных приложений. Класс определяет два свойства: TheName, которое имеет строковое значение, и TheValue, который имеет целочисленное значение. Внутри кода ObjectScript, например внутри метода, вы можете использовать этот синтаксис объекта для управления экземплярами объекта Component:

 Set component = ##class(MyApp.Component).%New()
 Set component.TheName = "Widget"
 Set component.TheValue = 22
 Do component.%Save()

Используя Basic, вы можете определить способ управления экземплярами объекта Component:

component = New Component()
component.TheName = "Widget"
component.TheValue = 22
component.%Save()

На этом этапе новый экземпляр компонента хранится в базе данных с помощью уникального идентификатора объекта, присвоенного системой. Вы можете позже восстановить этот объект, открыв его (используя его идентификатор объекта):

component = OpenId Component(id)
component.TheValue = component.TheValue*2
component.%Save()

Вы можете выполнять одни и те же операции с использованием собственных Java, C++ или других привязок клиента Caché. Компилятор класса может генерировать и синхронизировать любой дополнительный код, необходимый для доступа к объектам извне. Например, если вы используете Caché с Java, вы можете указать, что компилятор класса автоматически генерирует и поддерживает классы прокси-класса Java, которые обеспечивают удаленный доступ к постоянным классам баз данных. В рамках программы Java вы можете использовать этот объект естественным образом:

component = (MyApp.Component)MyApp.Component._open(database, new Id(id));
System.out.println("Name: " + component.getTheName());
System.out.println("Value: " + component.getTheValue());

SQL

Caché SQL - полнофункциональный механизм реляционных баз данных, полностью интегрированный с объектной технологией Caché. В дополнение к стандартным функциям SQL-92 Caché SQL предлагает:[Источник 7]

  • Поддержку потоков (известных в SQL как двоичные большие объекты, или BLOBS).
  • Поддержку хранимых процедур (реализована как метод объекта).
  • Набор объектных расширений.
  • Определяемые пользователем типы данных.
  • Поддержку индексов транзакционных битмапов (Bitmap).

Индексы битмапов, обычно используемые в больших хранилищах данных и OLAP-системах, предлагают возможность выполнять высокоскоростные поиски на основе сложных комбинаций условий. Такие индексы битмапов не могут обновляться в режиме реального времени, однако, как правило, обновляются как пакетный процесс. Caché SQL поддерживает индексы битмапов, которые обеспечивают высокую производительность поиска в сочетании с потерей производительности вставки/обновления. Это дает приложениям обработки транзакций возможность выполнять запросы в стиле хранилища данных и дает приложениям хранилища данных возможность выполнять обновления в режиме реального времени.

Объектно-реляционное соединение

Все компоненты в словаре Caché определяются как классы. Компилятор класса автоматически проектирует постоянные классы как реляционные таблицы. Для каждого объекта есть соответствующий реляционный эквивалент, как показано в следующей таблице:

Реляционный вид объектов
Функция объекта Реляционный эквивалент
Пакет Схема
Класс Таблица
Экземпляр объекта Строка в таблице
Свойство Колонка
Отношение Внешний ключ
Встроенный объект Несколько столбцов
Метод Хранимая процедура
Индекс Индекс

Когда Caché загружает SQL DDL (Data Definition Language), он использует инверсию этой проекции для создания классов, соответствующих реляционным таблицам. Чтобы продемонстрировать объектно-реляционную проекцию, рассмотрим простой пример. Вот определение простого, постоянного класса Person (часть пакета под названием MyApp), содержащего два свойства: Name и Home:

Class MyApp.Person Extends %Persistent
{
Property Name As %String(MAXLEN=100);
Property Home As Address;
}

Класс Person получает свое постоянное поведение от %Persistent суперкласса (superclass), предоставляемого Caché. Свойство Name определяется как простая строка длиной до 100 символов. Свойство Home иллюстрирует использование сложных пользовательских типов данных, в этом случае класс Address, который определяется как:

Class MyApp.Address Extends %SerialObject
{
Property City As %String;
Property State As %String;
}

Класс Address получен из суперкласса %SerialObject. Этот класс предоставляет возможность сериализации (производит конвертирование себя в однострочное представление) и вставляет в другой содержащий класс (как и в классе Person). При просмотре через SQL класс Person имеет следующую структуру:

SQL Вид класса Person: SELECT * FROM Person
ID Name Home_City Home_State
1 Smith,John Cambridge MA
2 Doe,Jane Dallas TX

Обратите внимание, что идентификатор объекта отображается как столбец. Кроме того, поля встроенного объекта Address проектируются как отдельные поля. Этим полям присваиваются синтетические имена Home_City и Home_State и ведут себя точно так, как если бы они были определены как два отдельных поля.

Наследование и SQL

Наследование является важной особенностью в объектно-ориентированных системах и полностью отсутствует в реляционных базах данных. Caché SQL позволяет использовать силу наследования с использованием стандартных реляционных конструкций. Например, мы можем получить новый класс Employee из класса Person, используемого в предыдущем примере:

Class MyApp.Employee Extends Person
{
Property Salary As %Integer(MINVAL=0,MAXVAL=100000);
}

Этот новый класс расширяет класс Person, добавляя дополнительное свойство Salary. При просмотре через SQL класс Employee имеет следующую структуру:

SQL Вид класса Employee: SELECT * FROM Employee
ID Name Home_City Home_State Salary
3 Divad, Gino Irvine CA 22000

Обратите внимание, что все унаследованные свойства доступны в виде столбцов. Также обратите внимание, что включены только строки, которые являются фактическими экземплярами Employee. Если мы снова попросим все экземпляры Person:

Пересмотренный SQL-класс класса Person: SELECT * FROM Person
ID Name Home_City Home_State
1 Smith,John Cambridge MA
2 Doe,Jane Dallas TX
3 Divad, Gino Irvine CA

В этом случае мы видим, что все строки возвращаются, потому что каждый Employee определяется как экземпляр Person. В этом случае, однако, отображаются только свойства, определенные Person.

Расширения объектов для SQL

Чтобы упростить использование SQL в объектных приложениях, Caché включает в себя ряд расширений объектов для SQL. Одним из наиболее интересных из этих расширений является способность отслеживать ссылки на объекты с помощью ссылочного («->») оператора. Например, предположим, что у вас есть класс Vendor, который относится к двум другим классам: Contact и Region. Вы можете обратиться к свойствам связанных классов с помощью ссылочного оператора:

SELECT ID,Name,ContactInfo->Name
FROM Vendor
WHERE Vendor->Region->Name = 'Antarctica'

Конечно, вы также можете выразить тот же запрос, используя синтаксис SQL JOIN. Преимущество эталонного синтаксиса оператора заключается в том, что он краткий и понятный с первого взгляда.

Введение в программирование Caché

Введение

Caché - это высокопроизводительная объектная база данных с несколькими встроенными языками программирования общего назначения. Он поддерживает несколько процессов и обеспечивает контроль параллелизма. Каждый процесс имеет прямой и эффективный доступ к данным. В Caché вы можете писать подпрограммы, классы или их сочетание в соответствии с вашими предпочтениями. Программирование Caché имеет следующие функции:

  • Подпрограммы и классы могут использоваться взаимозаменяемо и могут быть написаны на нескольких языках.
  • Подпрограммы и классы могут вызывать друг друга.
  • Классы предоставляют объектно-ориентированные функции.
  • Хранилище базы данных является составной частью всех языков программирования Caché.
  • Классы могут сохранять данные таким образом, чтобы упростить программирование. Если вы используете постоянные классы, данные одновременно доступны как объекты, таблицы SQL и глобальные переменные.
  • Вы можете получить доступ к глобальным элементам непосредственно из подпрограмм или классов, что означает, что у вас есть возможность хранить и получать данные точно так, как вы хотите.

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

Подпрограммы

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

  • ObjectScript, который является надмножеством стандартного языка программирования ISO 11756-1999. Если вы программист на языке M, вы можете запускать свои существующие приложения M на Caché без каких-либо изменений.
    Это самый распространенный язык для подпрограмм Caché.
  • Caché MVBasic - это реализация MultiValue. Он включает в себя команды, функции и операторы, которые используются в различных реализациях MultiValue, и поддерживает несколько режимов эмуляции, чтобы вы могли использовать знакомый вам синтаксис.
  • Caché Basic - это реализация Basic.

Поскольку полезно посмотреть, как выглядят эти языки, следующее показывает часть подпрограммы, написанной в ObjectScript:

    SET text = ""
    FOR i=1:5:$LISTLENGTH(attrs)
    {
        IF ($ZCONVERT($LIST(attrs, (i + 1)), "U") = "XREFLABEL")
        {
            SET text = $LIST(attrs, (i + 4))
            QUIT
        }
    }
    
    IF (text = "")
    {
        QUIT $$$ERROR($$$GeneralError,$$$T("Missing xreflabel value"))
    }

Ниже показана часть процедуры, написанной в MVBasic:

#PRAGMA ROUTINENAME=ADDROUTINENAME
$OPTIONS CACHE
OPEN 'VOC' TO F.VOC ELSE STOP
BAD.LST = ''
IF SYSTEM(11) > 0 THEN
   NBR.PROG.FILES = SYSTEM(11)
END ELSE
   EXECUTE 'SELECT VOC WITH F6 LIKE B...' CAPTURING RES RETURNING NBR.PROG.FILES
END
IF NBR.PROG.FILES THEN
   CRT 'THERE ARE ':NBR.PROG.FILES:' PROGRAM FILES'
   EXECUTE 'SAVE-LIST PGM.FILES' PASSLIST
   READLIST ALL.PROG.FILES FROM 'PGM.FILES' ELSE STOP
   HOW.MANY = DCOUNT(ALL.PROG.FILES,@AM)
    FOR I = 1 TO HOW.MANY
       THIS.PROG.FILE = ALL.PROG.FILES<I>
       CRT
...

Ниже приведена часть, написанная на Caché Basic:

Option Explicit
dim id, name, phone, intdob, matches
 
public sub main()
        dim done
        do
                getsubmit(id, done)
                if id = 0 then continue do
                display(id, "table")
                edit(id)
        loop until done
end sub
 
private sub getsubmit(ByRef id as %Integer, ByRef done as %Boolean)
        dim submit   
        id = 0 : done = False
        println : input "Lookup: ", submit : println
        if (submit = "") then
                done = True
                exit sub 
        end if
        ...

Классы

Caché также поддерживает классы. Вы можете использовать системные классы, и вы можете определить свои собственные классы. В Caché класс может включать знакомые элементы класса, такие как свойства, методы и параметры (известные как константы на других языках). Он также может включать элементы, обычно не определенные в классах, включая триггеры, запросы и индексы. Ниже показано определение класса:

Class Sample.Employee Extends Person
{
Property Title As %String(MAXLEN = 50);
Property Salary As %Integer(MAXVAL = 100000, MINVAL = 0);
Property Notes As %Stream.GlobalCharacter;
Property Picture As %Stream.GlobalBinary;
Method PrintPerson() 
{
    Write !,"Name: ", ..Name, ?30, "Title: ", ..Title
    Quit
}
}

Для каждого метода вы можете указать язык программирования на котором он написан, хотя, как правило, все методы в классе используют один и тот же язык для простоты. По умолчанию используется ObjectScript. Другие варианты: Caché MVBasic, Caché Basic и Transact-SQL. (Есть дополнительные возможности для программирования на стороне клиента.) Вы можете использовать классы из подпрограмм. Например, следующий код показывает часть подпрограммы, в которой ссылаемся на класс Sample.Person:

showperson() public {
    set rand=$RANDOM(10)+1        ; rand is an integer in the range 1-10
    write "Your random number: "_rand
    set person=##class(Sample.Person).%OpenId(rand)  
    write !,"This person's name: "_person.Name
    write !,"This person's age: "_person.Age
    write !,"This person's home city: "_person.Home.City
    }

Аналогично, метод может вызывать метку в подпрограмме. Например:

Method DemoRoutineCall(input) as %String
{
    Set value=$$function^myroutine(input)
    Quit value
}

Введение в глобальные переменные

Caché поддерживает специальную переменную, которую редко используют на других языках программирования; это глобальная переменная, которую обычно называют global(глобал). В Caché термин global указывает, что эти данные доступны для всех процессов, обращающихся к этой базе данных. Это использование отличается от других языков программирования, в которых глобальные переменные «доступны для всего кода в этом модуле». Содержимое глобального хранилища хранится в базе данных Caché. На данный момент важно просто знать следующие моменты:

  • Глобал состоит из набора узлов (в некоторых случаях, только одного узла), идентифицируемых индексами. Каждый узел может содержать значение.
  • ObjectScript, Caché Basic и Caché MVBasic включают функции для итерации по узлам глобального и быстрого доступа.
  • Глобал автоматически сохраняется в базе данных. Когда вы присваиваете значение узлу глобальной переменной, данные немедленно записываются в базу данных.
  • Вы можете увидеть содержимое глобальной переменной через команду ObjectScript или через панель управления.

Способы доступа к данным

В Caché база данных содержит глобальные переменные и ничего больше; даже код хранится в глобалах. На самом низком уровне весь доступ к данным осуществляется через прямой глобальный доступ, то есть с помощью команд и функций, которые работают напрямую с глобальными переменными. Многие запущенные приложения были разработаны задолго до того, как Caché включил поддержку классов. Некоторые из этих приложений используют прямой глобальный доступ. Другие приложения используют пользовательские API, такие как FileMan, которые находятся в общем доступе. Эти API, конечно, внутренне используют прямой глобальный доступ. Когда вы используете постоянные классы вы можете создавать, изменять и удалять сохраненные данные одним из следующих способов:

  • Используя методы, такие как %New(), %Save(), %Open() и %Delete().
  • Используя Caché SQL.

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

Последствия использования глобальных переменных

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

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

Caché SQL

Как отмечалось ранее, Caché обеспечивает реализацию SQL, известного как Caché SQL. Вы можете использовать Caché SQL внутри подпрограмм и внутри методов. Чтобы использовать SQL в этих контекстах, вы можете использовать один или оба из следующих инструментов:

  • Динамический SQL (классы %SQL.Statement и %SQL.StatementResult), как в следующем примере:
 SET myquery = "SELECT TOP 5 Name,Home_City FROM Sample.Person ORDER BY Age"
 SET tStatement = ##class(%SQL.Statement).%New()
 SET tStatus = tStatement.%Prepare(myquery)
 SET rset = tStatement.%Execute()
 DO rset.%Display()
 WRITE !,"End of data"

Вы можете использовать динамический SQL в любом контексте.

  • Встроенный SQL, как в следующем примере:
 &sql(SELECT COUNT(*) INTO :myvar FROM Sample.Person)
 Write myvar

Первая строка - встроенный SQL, который выполняет запрос Caché SQL и записывает значение в переменную хоста myvar. Следующая строка - обычный ObjectScript; он просто записывает значение переменной myvar. Вы можете использовать встроенный SQL в подпрограммах ObjectScript и в методах, написанных в ObjectScript.

Макрос (Macros)

ObjectScript также поддерживает макросы, которые определяют подстановки. Определение может быть либо значением, целой строкой кода, либо (с директивой ##Continue) несколькими строками. Используйте макросы для обеспечения согласованности. Например:

 #define StringMacro "Hello, World!"
 write $$$StringMacro

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

 #define output1(%str,%lf,%indent) do output^%fm2class(%str,%lf,%indent,$$$display)

Этот макрос принимает аргумент, как и многие. Он также ссылается на другой макрос. Вы можете использовать макросы в подпрограммах, а также в классах. Некоторые из системных классов их широко используют.

Встроенные файлы

Вы можете определить макросы в подпрограмме и использовать их позже в той же самой процедуре. Чаще всего вы определяете их в центральном месте. Для этого вы создаете и используете включенные файлы. Встроенный файл определяет макросы и может включать в себя другие включенные файлы. Следующие части частей системы включают файл:

 #define OK                     1
 #define ISOK(%sc)              (+%sc)
 #define ISERR(%sc)             ('%sc)

Вот еще один файл include:

 #include %occCacheDirect
 #include %occExtent
 #include %occTransaction
 #include %occInclude
 #include %msql
 #include %cspInclude

Затем вы можете сделать следующее:

  • Включите включенный файл в начале любой процедуры. Эта процедура может ссылаться на макросы, определенные в этом файле.
  • Включите включенный файл в начале любого класса. Методы в этом классе могут ссылаться на макросы.
  • Включите включенный файл в начале любого метода. Этот метод может ссылаться на макросы.

Как эти элементы кода работают вместе

Полезно понять, как Caché использует элементы кода. Причина, по которой вы можете использовать сочетание ObjectScript, Caché SQL, Caché MVBasic, макросов, определений классов, подпрограмм. Состоит в том, что Caché напрямую не использует код, который вы пишете. Вместо этого, когда вы компилируете свой код, система генерирует код, который она использует, который является кодом OBJ, используемым виртуальной машиной Caché.

Отношение элементов кода.

Существует несколько этапов. Нет необходимости подробно знать эти шаги, но следует помнить о следующих моментах:

  • CSP-движок конвертирует файлы CSP в определения классов.
  • Компилятор класса использует определения классов и генерирует код INT, код Caché MVBasic и код Caché Basic, в зависимости от языков, используемых для определения методов в классах. В некоторых случаях компилятор сначала использует классы в качестве основы для генерации и сохранения дополнительных классов. Вы можете посмотреть эти классы в Studio, но не изменять их. Это происходит, например, при компиляции классов, которые определяют веб-службы и веб-клиенты. Компилятор класса также генерирует дескриптор класса для каждого класса. Системный код использует это во время выполнения.
  • Препроцессор (иногда называемый препроцессором макросов или MPP) использует включенные файлы (не показаны на рисунке) и заменяет макросы. Он также обрабатывает встроенный SQL в подпрограммах ObjectScript и подпрограммах MVBasic. Эти изменения происходят во временной рабочей области, и ваш код не изменяется.
  • Дополнительные компиляторы создают код INT для подпрограмм ObjectScript и кода MVI для подпрограмм MVBasic. Этот слой известен как промежуточный код. На этом уровне весь доступ к данным осуществляется через прямой глобальный доступ.
    И код INT, и код MVI компактны, но читаются человеком.
    Обратите внимание, что нет промежуточного кода для Caché Basic.
  • Код INT, MVI-код и Caché Basic используются для генерации кода OBJ.
    Виртуальная машина Caché использует этот код. После того как вы скомпилировали свой код, процедуры, код INT и код MVI больше не нужны для выполнения кода.
  • После компиляции ваших классов вы можете поместить их в развернутый режим. У Caché есть утилита, которая удаляет внутренние элементы класса и промежуточный код, для данного класса; вы можете использовать эту утилиту при развертывании приложения.

Если вы изучите системные классы Caché, вы можете обнаружить, что некоторые классы не видны, поскольку они находятся в развернутом режиме.

ObjectScript в приближении

Подпрограммы

В следующем примере показана примерная процедура с именем demoroutine, которая написана в ObjectScript. Этот пример дает нам возможность увидеть некоторые общие команды, операторы и функции и посмотреть, как код организован в рамках процедуры.[Источник 8]

 write "Use one of the following entry points:"
 write !,"random"
 write !,"input"
 write !,"interesting"
 quit 
random() public {
    set rand=$RANDOM(10)+1
    write "Your random number: "_rand
    set name=$$getnumbername(rand)
    write !, "Name of this number: "_name
 }
input() public {
    read "Enter a number from 1 to 10: ", input
    set name=$$getnumbername(input)
    write !, "Name of this number: "_name
 }
getnumbername(number) {
    set name=$CASE(number,1:"one",2:"two",3:"three",
        4:"four",5:"five",6:"six",7:"seven",8:"eight",
        9:"nine",10:"ten",:"other")
    quit name
}
interesting() public {
    write "Today's date: "_$ZDATE($HOROLOG,3)
    write !,"Your installed version: "_$ZVERSION
    write !,"Your username: "_$USERNAME
    write !,"Your security roles: "_$ROLES  
    }

Обратите внимание на следующие основные моменты:

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

Многие программисты включают имя подпрограммы в качестве комментария в начале процедуры или в качестве первой метки в подпрограмме.

  • В подпрограмме есть несколько меток: random, input, getnumbername, и interesting.

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

  • Random и input подпрограммы вызывают подпрограмму getnumbername.
  • WRITE, QUIT, SET и READ - это команды. Язык включает в себя другие команды для удаления переменных, команды для управления потоком программ, команды для управления устройствами ввода-вывода, команды для управления транзакциями (возможно, вложенные).
    Имена команд не чувствительны к регистру, хотя они отображаются в текущем тексте во всех верхних.
  • В выборку входят два оператора. Знак плюса (+) выполняет сложение, а подчеркивание (_) выполняет конкатенацию строк.
    ObjectScript предоставляет обычные операторы и некоторые специальные операторы, не встречающиеся на других языках.
  • $RANDOM, $CASE и $ZDATE являются функциями.
    Язык предоставляет функции для строковых операций, преобразований многих видов, операций форматирования, математических операций и других.
  • $HOROLOG, $ZVERSION, $USERNAME и $ROLES являются системными переменными (специальные переменными в Caché). Большинство специальных переменных содержат значения для аспектов операционной среды Caché, текущего состояния обработки.
  • ObjectScript поддерживает строки комментариев, блоковые комментарии и комментарии в конце инструкций.

Мы можем выполнить части этой процедуры в Терминале, как демонстрация работы. Во-первых, следующее показывает сеанс терминала, в котором мы запускаем процедуру. В этих примерах SAMPLES> представляет собой приглашение, показанное в терминале. Текст после приглашения в той же строке - введенная команда. Строки после этого показывают значения, которые система записывает в терминал в ответ.

SAMPLES>do ^demoroutine
Use one of the following entry points:
random
input
SAMPLES>

Когда мы запускаем процедуру, мы просто получаем справочную информацию, как можно заметить. Это не обязательно, для написания ваших подпрограмм, но этим часто пользуются. Обратите внимание, что подпрограмма включает QUIT перед первой меткой, чтобы гарантировать, что когда пользователь вызывает эту процедуру, обработка остановится перед этой меткой. Это также не обязательно, но распространено у разработчиков. Далее показано, как ведут себя пара подпрограмм:

SAMPLES>do input^demoroutine
Enter a number from 1 to 10: -7
Name of this number: other
SAMPLES>do interesting^demoroutine
Today's date: 2010-11-30
Your installed version: Cache for Windows (x86-32) 2010.2 (Build 454U) Sun Oct 24 2010 17:14:03 EDT
Your username: UnknownUser
Your security roles: %All
SAMPLES>

Процедуры, функции и подпрограммы

В рамках процедуры ObjectScript метка определяет начальную точку для одного из следующих единиц кода:

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

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

label(args) scopekeyword {
    zero or more lines of code 
    QUIT returnvalue
    }

Или

label(args) scopekeyword {
    zero or more lines of code 
    }

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

  • Public. Если вы укажете Public, процедура будет общедоступной и может быть вызвана вне самой процедуры.
  • Private (по умолчанию для процедур). Если вы укажете Private, процедура будет закрытой и может быть вызвана только другим кодом в той же самой процедуре. Если вы попытаетесь получить доступ к процедуре из другой процедуры, произойдет ошибка <NOLINE>.

returnvalue является необязательным, единственным значением для возврата. Чтобы вернуть значение, вы должны использовать команду QUIT. Если вы не хотите возвращать значение, вы можете опустить команду QUIT, потому что фигурные скобки указывают конец процедуры. Процедура может объявлять переменные как общедоступные переменные, хотя эта практика не считается современной. Для этого вы включаете список имен переменных, разделенных запятыми, в квадратных скобках непосредственно перед scopekeyword. Функция

label(args) scopekeyword
    zero or more lines of code 
    QUIT optionalreturnvalue

args - необязательный список аргументов, разделенных запятыми. Даже если аргументов нет, вы должны включить круглые скобки. Необязательное scopekeyword является либо Public (по умолчанию для функций), либо Private. Подпрограмма

label(args) scopekeyword
    zero or more lines of code 
    QUIT

args - необязательный список аргументов, разделенных запятыми. Если аргументов нет, скобки необязательны. Scopekeyword является либо Public (по умолчанию для подпрограмм), либо Private. В следующей таблице приведены различия между подпрограммами, подпрограммами, функциями и процедурами:

Различия между подпрограммами
Routine Subroutine Функция Процедура
Может принимать аргументы Нет Да Да Да
Может вернуть значение Нет Нет Да Да
Может вызываться вне процедуры
(по умолчанию)
Да Да Да Нет
Переменные, определенные в нем,
доступны после завершения
выполнения кода
Да Да Да Зависит от природы
переменной

Переменные

В ObjectScript существуют два типа переменных, которые классифицируются по хранению данные:

  • Локальные переменные, которые хранят данные в памяти.
    Локальные переменные могут быть Public или Private.
  • Глобальные переменные, которые хранят данные в базе данных. Они также называются глобалами. Все взаимодействия с глобалами немедленно влияют на базу данных. Например, когда вы изменяете значение глобальной переменной, это изменение немедленно влияет на то, что хранится; нет отдельного шага для хранения(буферизации) значений. Аналогично, когда вы удаляете глобальную переменную, данные немедленно удаляются из базы данных.

Имена переменных

Имена переменных следуют следующим правилам:

  • Для большинства локальных переменных первый символ - это буква, а остальные символы - буквы или цифры. Допустимые имена включают myvar и i
  • Для большинства глобальных переменных первый символ всегда является (^). Остальные символы - буквы, цифры или периоды. Допустимые имена: ^myvar и ^my.var
    Caché также поддерживает специальный вид переменной, называемый переменной процента; они менее распространены. Имя переменной процента начинается с символа процента (%). Процентные переменные являются особенными, поскольку они всегда являются публичными; то есть они видны для всего кода внутри процесса. Сюда входят все методы и все процедуры в стеке вызовов.
    Когда вы определяете переменные процента, используйте следующие правила:
  • Для локальной переменной процента имя %Z или %z. Другие имена зарезервированы для использования в системе.
  • Для глобальной переменной процента ^%Z или ^%z. Другие имена зарезервированы для использования в системе.

Переменные типы

Переменные в ObjectScript слабо динамически типизированы. Они динамически типизируются, потому что вам не нужно объявлять тип переменной, а переменные могут принимать любое значение - то есть любое значение литерала или любое выражение ObjectScript. Они слабо типизированы, потому что использование определяет, как они определяются. Значение логического литерала в ObjectScript имеет одну из следующих форм:

  • Числовой. Примеры: 100, 17.89 и 1e3
  • Строка в ковычках, которая представляет собой набор символов, содержащихся в сопоставленном наборе кавычек ("). Например: "my string"
    Чтобы включить символ двойной кавычки в строковый литерал, перед ним следует другой символ двойной кавычки. Например: "This string has ""quotes"" in it."

В зависимости от контекста, строка может рассматриваться как число и наоборот. Аналогичным образом, в некоторых контекстах значение может интерпретироваться как логическое (истинное или ложное) значение; все, что оценивается до нуля, рассматривается как ложное; все остальное считается истинным. При создании классов вы можете указать типы свойств, аргументы методов. Механизмы класса Caché применяют эти типы, как и следовало ожидать.

Переменная длина

Существует предел длины значения переменной. Если в вашей установке включены длинные строки(long strings), ограничение составляет 3641144 символов. Если длинные строки не включены, предел составляет 32 767 символов.

Существенные переменные

Обычно вы определяете переменную с помощью команды SET. Как отмечалось ранее, когда вы определяете глобальную переменную, это немедленно влияет на базу данных. Глобальная переменная становится неопределенной только тогда, когда вы ее убиваете (что означает удаление ее с помощью команды KILL). Это также немедленно влияет на базу данных. Локальная переменная может стать неопределенной(undefined) одним из трех способов:

  • Ее "убили"
  • Процесс (в котором она была определена) закрылся.
  • Она выходит за рамки этого процесса.

Чтобы понять, определена ли переменная, вы используете функцию $DATA. Например, следующие строки показывают использование этой функции:

SAMPLES>write $DATA(x)
0
SAMPLES>set x=5

SAMPLES>write $DATA(x)
1

На первом этапе мы используем $DATA, чтобы понять, определена ли переменная. Система отображает 0, что означает, что переменная не определена. Затем мы устанавливаем переменную равной 5 и повторяем команду. Теперь функция возвращает 1. В этом примере и в предыдущих примерах вы, возможно, заметили, что нет необходимости объявлять переменную каким-либо образом. Команда SET - это все, что вам нужно. Если вы попытаетесь получить доступ к неопределенной переменной, вы получите ошибку <UNDEFINED>. Например:

SAMPLES>WRITE testvar
 
WRITE testvar
^
<UNDEFINED> *testvar

Доступность переменных и их область действия

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

  • Пользователь вызывает процедуру, возможно, из пользовательского интерфейса.
  • Процедура выполняет некоторые операторы, а затем вызывает другую процедуру.
  • Процедура определяет локальные переменные A, B и C.
    Переменные A, B и C находятся в пределах этой процедуры. Они закрыты для этой процедуры.
    Процедура также определяет глобальную переменную ^D.
  • Вторая процедура завершается, и управление возвращается к первой процедуре.
  • Первая процедура возобновляет выполнение. Эта процедура не может использовать переменные A, B и C, которые больше не определены. Он может использовать ^D, потому что эта переменная была немедленно сохранена в базе данных.

Сводная информация об области переменных

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

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

В следующей таблице приведены сведения о доступных переменных:

Различия между подпрограммами
Переменная доступность,
разбитая по виду переменной ...
Вне единицы кода,
которая ее определяет
(но в том же процессе)
В других процессах
в том же пространстве имен
В других пространствах
имен внутри одного экземпляра Caché
Локальная переменная, private область Нет Нет Нет
Локальная переменная, public Да Нет Нет
Локальная переменная процента Да Нет Нет
Глобальная переменная (не процент) Да Да Если только глобальные
сопоставления не допускают этого
Глобальная переменная процента Да Да Да

Команда NEW

Caché предоставляет еще один механизм, позволяющий вам контролировать область действия переменной: команда NEW. Аргументом для этой команды является одно или несколько имен переменных в списке, разделенном запятыми. Переменные должны быть общедоступными и не могут быть глобальными. Эта команда устанавливает новый ограниченный контекст для переменной (которая может или не может существовать). Например, рассмотрим следующую процедуру:

 ; процедура demonew 
 NEW var2
 set var1="abc"
 set var2="def"
 quit

После запуска этой процедуры переменная var1 доступна, а переменная var2 - нет, как показано в следующем примере: сеанс терминала:

SAMPLES>do ^demonew
 
SAMPLES>write var1
abc
SAMPLES>write var2
 
write var2
^
<UNDEFINED> *var2

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

SAMPLES>set var2="hello world"
 
SAMPLES>do ^demonew
 
SAMPLES>write var2
hello world

Многомерные массивы

В ObjectScript любая переменная может быть многомерным массивом Caché (также называемым просто массивом). Многомерный массив обычно предназначен для хранения набора значений, которые каким-то образом связаны. ObjectScript предоставляет команды и функции, которые обеспечивают удобный и быстрый доступ к значениям.

Основы

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

 set myarray(1)="value A"
 set myarray(2)="value B"
 set myarray(3)="value C"
 zwrite myarray

В этом примере показан типичный массив. Заметки:

  • Этот массив имеет один индекс. В этом случае индексы являются целыми числами 1, 2 и 3.
  • Нет необходимости заранее объявлять структуру массива.
  • myarray - это имя самого массива.
  • ObjectScript предоставляет команды и функции, которые могут воздействовать на весь массив или на определенные узлы. Например:
 kill myarray
  • Следующая вариация устанавливает несколько подстрок глобального массива с именем ^myglobal; то есть эти значения записываются на диск:
 set ^myglobal(1)="value A"
 set ^myglobal(2)="value B"
 set ^myglobal(3)="value C"
  • Существует ограничение на возможную длину глобальной ссылки. Этот предел влияет на длину глобального имени и длину и количество любых индексов. Если вы превысите лимит, вы получите ошибку <SUBSCRIPT>.
  • Существует ограничение на длину значения узла. Если длинные строки не включены в вашей установке, предел составляет 32 767 символов. Если задействованы длинные строки, предел намного больше.

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

Изменяемые структуры

В предыдущих примерах показана общая форма массива. Обратите внимание на следующие возможные варианты:

  • У вас может быть любое количество индексов. Например:
 Set myarray(1,1,1)="grandchild of value A"
  • Подстрочный индекс может быть строкой. Например:
 set myarray("notes to self","2 Dec 2010")="hello world"

Использование заметок

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

Возможности переменных
Пример и примечания
Локальные Нет индексов Set MyVar = 10

Такие переменные довольно распространены.
Большинство переменных, которые вы видите,
могут быть такими.

Локальные Имеет индексы Set MyVar (1) = "alpha"

Set MyVar (2) = "beta" Set MyVar (3) = "гамма"
Локальный массив, подобный этому,
полезен, если вы хотите передать
набор связанных значений.

Глобальные Нет индексов Set ^MyVar = "сохраненная записка"

На практике глобалы обычно имеют индексы.

Глобальные Имеет индексы Set ^MyVar($USERNAME,"Preference 1")=42

Операторы

Знакомые операторы

ObjectScript предоставляет следующие операторы для общих действий:

  • Математические операторы: сложение (+), вычитание (-), деление (/), умножение (*), целочисленное деление (\), модуль (#) и экспоненциация (**)
  • Унарные операторы: положительные (+) и отрицательные (-)
  • Оператор конкатенации строк (_)
  • Операторы логического сравнения: равно (=), больше (>), больше или равно (> =), меньше (<), меньше или равно (<=)
  • Оператор логического дополнения (')
    Вы можете использовать это непосредственно перед любым логическим значением, а также непосредственно перед оператором логического сравнения.
  • Операторы для объединения логических значений: AND (&&), OR (||)
    Обратите внимание, что ObjectScript также поддерживает более старую, менее эффективную форму каждого из них: & является формой оператора && и ! является формой || оператор. Вы можете увидеть эти старые формы в существующем коде.

Незнакомые операторы

ObjectScript также включает операторы, которые не имеют эквивалента на некоторых языках. Наиболее важными из них являются:

  • Оператор соответствия шаблону (?) Проверяет, используют ли символы шаблон в левом операнде, в правом операнде. Вы можете указать количество раз, которое должен иметь шаблон, указать альтернативные шаблоны, указать вложенность шаблона.
    Например, следующее записывает значение 1 (true), если строка (testthis) отформатирована как номер социального страхования в США и, в противном случае, записывает 0.
 
 Set testthis="333-99-0000"
 Write testthis ?3N1"-"2N1"-"4N

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

  • В двоичном выражении оператор ([) возвращает 1 (true) или 0 (false) в зависимости от того, является ли последовательность символов в правильном операнде подстрокой левого операнда. Например:
 Set L="Steam Locomotive",S="Steam"
 Write L[S
  • Бинарный оператор (]) проверяет, попадают ли символы в левом операнде после символов в правом операнде в последовательности сортировки ASCII.
  • Двоичные сортировки после оператора (]]) проверяет, есть ли левый операнд после правого операнда в последовательности порядков индексов.
  • Оператор косвенности (@) позволяет выполнять динамическую замену во времени, части или всего аргумента команды, имени переменной, списка индексов или шаблона. Caché выполняет подстановку перед выполнением связанной команды.

Команды

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

Знакомые команды

ObjectScript предоставляет команды для выполнения знакомых задач, таких как:

  • Для определения переменных, используйте SET, как показано ранее.
  • Чтобы удалить переменные, используйте KILL, как показано ранее.
  • Чтобы управлять потоком логики, используйте следующие команды:
    • IF, ELSEIF и ELSE, которые используются вместе
    • FOR
    • WHILE, который можно использовать самостоятельно
    • DO и WHILE, которые могут использоваться вместе
    • QUIT, который возвращает значение.
      Существуют другие команды для управления потоком, но они используются реже.
  • Чтобы отлавливать ошибки, используйте TRY и CATCH, которые используются вместе.
  • Чтобы записать значение, используйте WRITE. Оно записывает значения в текущее устройство (например, терминал или файл).
    Используется без аргумента, эта команда записывает значения всех локальных переменных. Это особенно удобно в терминале.
    Эта команда может использовать небольшой набор символов кода управления форматом, которые позиционируют вывод. В существующем коде вы, скорее всего, увидите восклицательный знак, который перенесет на новую строку. Например:
 write "hello world",!,"another line"
  • Чтобы прочитать значение с текущего устройства (например, Терминал), используйте READ.
  • Для работы с устройствами, отличными от основного устройства, используйте следующие команды:
    • OPEN делает устройство доступным для использования.
    • USE указывает открытое устройство в качестве текущего устройства для использования WRITE и READ.
    • CLOSE делает устройство более недоступным для использования.
  • Для управления параллелизмом используйте LOCK. Обратите внимание, что система управления блокировкой Caché отличается от аналогичных систем на других языках. Важно рассмотреть, как это работает
    Вы используете эту команду в случаях, когда несколько процессов могут потенциально обращаться к одной и той же переменной или другому элементу.
  • Для управления транзакциями используйте команды TSTART, TCOMMIT, TROLLBACK и соответствующие команды.
  • Для отладки используйте ZBREAK и соответствующие команды.
  • Чтобы приостановить выполнение, используйте HANG.

Команды для использования с многомерными массивами

В ObjectScript вы можете работать с многомерными массивами следующими способами:

  • Чтобы определить узлы, используйте команду SET.
  • Чтобы удалить отдельные узлы или все узлы, используйте команду KILL.

Например, следующая строка удаляет весь многомерный массив:

 kill myarray

Напротив, следующая удаляет узел myarray ("2 Dec 2010") и все его дочерние элементы:

 kill myarray("2 Dec 2010")
  • Чтобы удалить глобал или глобальный узел, но ни один из его дочерних подузлов, используйте ZKILL.
  • Чтобы перебрать все узлы многомерного массива и записать их все, используйте ZWRITE. Это особенно удобно в терминале. Следующий пример сеанса терминала показывает, как выглядит вывод:
SAMPLES>ZWRITE ^myarray
^myarray(1)="value A"
^myarray(2)="value B"
^myarray(3)="value C"

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

  • Чтобы скопировать набор узлов из одного многомерного массива в другой, сохранив в нем существующие узлы, если это возможно, используйте MERGE. Например, следующая команда копирует весь массив в памяти (sourcearray) в новый глобальный (^mytestglobal):
 MERGE ^mytestglobal=sourcearray

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

Специальные переменные

В этом разделе представлены некоторые специальные переменные Caché. Имена этих переменных не чувствительны к регистру. Некоторые специальные переменные предоставляют информацию о среде, в которой работает код. К ним относятся следующие:

  • $HOROLOG, который содержит дату и время для текущего процесса, заданные операционной системой.
  • $USERNAME и $ROLES, которые содержат информацию о используемом пользователе в настоящее время, а также роли, к которым принадлежит этот пользователь.
 write "You are logged in as: ", $USERNAME, !, "And you belong to these roles: ",$ROLES
  • $ZVERSION, который содержит строку, которая идентифицирует текущую версию Caché.

А также $JOB, $ZTIMEZONE, $IO и $ZDEVICE. Другие переменные предоставляют информацию о состоянии обработки кода. К ним относятся $STACK, $TLEVEL, $NAMESPACE и $ZERROR.

$SYSTEM Специальная переменная

Специальная переменная $SYSTEM обеспечивает независимый от языка доступ к большому набору полезных методов. Специальная переменная $SYSTEM является псевдонимом для библиотеки %SYSTEM, который содержит классы, которые предоставляют методы класса, которые отвечают самым разнообразным потребностям. Обычным способом ссылаться на методы в %SYSTEM является создание ссылки, использующей переменную $SYSTEM. Например, следующая команда выполняет метод SetFlags() в классе %SYSTEM.OBJ:

 DO $SYSTEM.OBJ.SetFlags("ck")

Поскольку имена специальных переменных не чувствительны к регистру (в отличие от имен классов и их членов), следующие команды эквивалентны:

 DO ##class(%SYSTEM.OBJ).SetFlags("ck")
 DO $System.OBJ.SetFlags("ck")
 DO $SYSTEM.OBJ.SetFlags("ck")
 DO $system.OBJ.SetFlags("ck")

Все классы предоставляют метод Help(), который может печатать список доступных методов в классе. Например:

SAMPLES>d $system.OBJ.Help()
Methods of the class: %SYSTEM.OBJ

CloseObjects()
     Deprecated function, to close objects let them go out of scope.
 
Compile(classes,qspec,&errorlog,recurse)
     Compile a class.
 
CompileAll(qspec,&errorlog)
     Compile all classes within this namespace
....

Вы также можете использовать имя метода в качестве аргумента в Help(). Например:

SAMPLES>d $system.OBJ.Help("Compile")
Description of the method:class Compile:%SYSTEM.OBJ
 
Compile(classes:%String="",qspec:%String="",&errorlog:%String,recurse:%Boolean=0)
Compile a class.

Блокировка и контроль параллелизма

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

Основы

Основным механизмом блокировки является команда LOCK. Цель этой команды - отложить активность в одном процессе до тех пор, пока другой процесс не сообщит, что все в порядке. Важно понимать, что блокировка сама по себе не позволяет другим процессам модифицировать связанные данные; то есть, Caché не применяет одностороннюю блокировку. Блокировка работает только по соглашению: требуется, чтобы все конкурирующие процессы выполняли блокировку с теми же именами блокировок. Вы можете использовать команду LOCK для создания блокировок (заменяя все предыдущие блокировки процесса), добавлять блокировки, удалять определенные блокировки и удалять все блокировки, принадлежащие процессу. Команда LOCK использует следующие аргументы:

  • Имя блокировки. Имена блокировки произвольны, но по универсальному соглашению программисты используют имена блокировок, которые идентичны именам элемента, подлежащего блокировке. Обычно элемент, который нужно заблокировать, является глобальным или узлом глобального.
  • Дополнительный тип блокировки (для создания блокировки не по умолчанию). Существует несколько типов блокировки с разными поведением.
  • Необязательный аргумент тайм-аута, определяющий, как долго ждать, пока не произойдет время попытки блокировки. По умолчанию Caché ждет бесконечно.

Общая блокировка: процесс A выдает команду LOCK, а Caché пытается создать блокировку. Если процесс B уже имеет блокировку с данным именем блокировки, процесс A приостанавливается. В частности, команда LOCK в процессе A не возвращается, и никакие последующие строки кода не могут быть выполнены. Когда процесс B освобождает блокировку, команда LOCK в процессе A наконец возвращается и выполнение продолжается. Во многих случаях система автоматически использует команду LOCK, например, когда вы работаете с постоянными объектами или когда вы используете определенные команды Caché SQL.

Таблица блокировки

Caché поддерживает общесистемную таблицу в памяти, которая записывает все текущие блокировки и процессы, которые им принадлежат. Эта таблица - таблица блокировки - доступна через портал управления, где вы можете просмотреть блокировки и (в редких случаях, если необходимо) удалить их. Обратите внимание, что любой данный процесс может иметь несколько блокировок с разными именами блокировок (или даже с несколькими блокировками с тем же именем блокировки). Когда процесс завершается, система автоматически освобождает все блокировки, которыми владеет процесс. Таким образом, обычно нет необходимости удалять блокировки через портал управления, за исключением случая ошибки приложения. Таблица блокировки не может превышать фиксированный размер, который вы можете указать. Следовательно, таблица блокировки может быть заполнена, так что дальнейшие блокировки невозможны. Если это происходит, Caché записывает следующее сообщение в файл cconsole.log:

LOCK TABLE FULL

Заполнение таблицы блокировки обычно не считается ошибкой приложения; Caché также предоставляет очередь блокировки, и процессы ожидают, пока не будет места, чтобы добавить свои блокировки в таблицу блокировки. Однако, если два процесса каждый утверждают инкрементную блокировку переменной, уже заблокированной другим процессом, то это условие, называемое тупиком, и считается ошибкой программирования приложений.

Блокировки и массивы

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

Пример блокировок

Введение в типы блокировок

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

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

В общем, цель исключительной блокировки - указать, что вы намерены изменить значение и что другие процессы не должны пытаться читать или изменять это значение. Целью общей блокировки является указание на то, что вы намерены прочитать значение и что другие процессы не должны пытаться изменить это значение; они могут, однако, прочитать значение. Любая блокировка также либо не является эскалацией (non-escalating) (по умолчанию), либо является. Целью эскалации блокировок является упрощение управления большим количеством блокировок, которые потребляют память и которые увеличивают вероятность заполнения таблицы блокировки. Вы используете эскалацию блокировок при блокировке нескольких узлов одного и того же массива. Для эскалации блокировок, если данный процесс создал более определенного количества (по умолчанию 1000) блокировок на узлах данного массива, Caché удаляет все отдельные имена блокировок и заменяет их новой блокировкой на родительском уровне. Например, у вас может быть 1000 блокировок формы ^MyGlobal («sales», «EU», salesdate), где salesdate представляет даты. Когда тот же процесс пытается создать еще одну блокировку этой формы (и эти блокировки все эскалируют), Caché удаляет все эти блокировки и заменяет их блокировкой имени ^MyGlobal («sales», «EU»). Таблица блокировки поддерживает новую блокировку. Этот счетчик блокировки в настоящее время 1001, но когда вы добавляете дополнительные имена блокировки той же формы, таблица блокировок увеличивает количество блокировок для имени блокировки ^MyGlobal («sales», «EU»). Аналогично, когда вы удаляете имена блокировки одной и той же формы, таблица блокировок уменьшает этот счетчик.

Системные функции

В этом разделе рассматриваются некоторые из наиболее часто используемых системных функций в ObjectScript. Имена этих функций не чувствительны к регистру.

Выбор ценности

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

  • $CASE сравнивает заданное тестовое выражение с набором значений и затем возвращает значение, связанное с сопоставимым сравнительным значением. Например:
SAMPLES>set myvar=1
 
SAMPLES>write $CASE(myvar,0:"zero",1:"one",:"other")
one
  • $SELECT проверяет набор выражений и возвращает значение, связанное с первым истинным выражением. Например:
SAMPLES>set myvar=1
 
SAMPLES>write $SELECT(myvar=0:"branch A",1=1:"branch B")
branch B

Функции существования

Вы можете использовать следующие функции для проверки существования переменной или узла переменной.

  • Чтобы проверить, существует ли определенная переменная, используйте функцию $DATA.
    Для переменной, содержащей несколько узлов, эта функция может указывать, существует ли данный узел и имеет ли данный узел значение и дочерние узлы.
  • Чтобы получить значение переменной (если оно существует) или получить значение по умолчанию (если нет), используйте функцию $GET.

Функции списка

ObjectScript предоставляет собственный формат списка. Вы можете использовать следующие функции для создания и работы с этими списками:

  • $LISTBUILD возвращает специальный тип строки, называемый списком. Иногда это называется форматом $LIST, чтобы отличать этот список от других видов (например, списки, разделенные запятыми).
    Единственный поддерживаемый способ работы с списком $LIST - использовать функции списка ObjectScript. Внутренняя структура такого списка не документирована и может быть изменена без предварительного уведомления.
  • $LIST возвращает элемент списка или может использоваться для замены элемента списка.
  • $LISTLENGTH возвращает количество элементов в списке.
  • $LISTFIND возвращает позицию данного элемента в данном списке.

Также есть дополнительные функции списка. Если вы используете функцию списка со значением, которое не является списком, вы получаете ошибку <LIST>.

Строковые функции

ObjectScript также имеет обширный набор функций для эффективного использования строк:

  • $EXTRACT возвращает или заменяет подстроку, используя число символов.
  • $FIND находит подстроку по значению и возвращает целое число, определяющее его конечную позицию в строке.
  • $JUSTIFY возвращает строку с выравниванием по правому краю, заполненную слева пробелами.
  • $ZCONVERT преобразует строку из одной формы в другую. Он поддерживает как переводы по регистру (в верхнем, нижнем регистре, так и в заголовок) и трансляцию кодирования (между различными стилями кодирования символов).
  • $TRANSLATE изменяет заданную строку, выполняя замену символа.
  • $REPLACE выполняет строчную замену внутри строки и возвращает новую строку.
  • $PIECE возвращает подстроку из строки с разделителями символов (часто называемой строкой). Многие старые приложения используют строки с разделителями символов в качестве удобного формата для хранения связанных значений, каждый из которых является подстрокой в большей строке.
 SET mystring="value 1^value 2^value 3"
 WRITE $PIECE(mystring,"^",1)
  • $LENGTH возвращает количество символов в указанной строке или количество подстрок с разделителями в указанной строке, в зависимости от используемых параметров.

Например:

 SET mystring="value 1^value 2^value 3"
 WRITE !, "Number of characters in this string: " 
 WRITE $LENGTH(mystring)
 WRITE !, "Number of pieces in this string: "
 WRITE $LENGTH(mystring,"^")

Работа с многомерными массивами

Вы можете использовать следующие функции для работы с многомерным массивом в целом:

  • $ORDER позволяет последовательно посещать каждый узел в многомерном массиве.
  • $QUERY позволяет вам посещать каждый узел и субнод внутри массива, перемещаясь вверх и вниз по субнодам.

Чтобы работать с отдельным узлом в массиве, вы можете использовать любую из функций, описанных ранее. В частности:

  • $DATA может указывать, существует ли данный узел и имеет ли данный узел дочерние узлы.
  • $GET получает значение данного узла или получает значение по умолчанию в противном случае.

Значения символов

Иногда, когда вы создаете строку, вам нужно включить символы, которые не могут быть введены. Для этого вы используете $CHAR. Если задано целое число, $CHAR возвращает соответствующий символ ASCII или Unicode. Обычно используют:

  • $CHAR(9) - вкладка.
  • $CHAR(10) - перевод строки.
  • $CHAR(13) - возврат (^).
  • $CHAR(13,10) - это пара возвратов (^) и перевод строки.

Функция $ASCII возвращает значение ASCII данного символа.

$ZU Функции

В существующем коде вы можете увидеть такие элементы, как $ZU(n), $ZUTIL(n), $ZU(n, n) и другие. Где n - целое число. Это функции $ZU, которые теперь устарели и больше не документированы. Они по-прежнему доступны, но пользователям предлагается заменить их методами и свойствами в библиотеке классов Caché, которые выполняют эквивалентные действия.

Значения даты и времени

В этом разделе приведен краткий обзор значений даты и времени в ObjectScript.

Местное время

Чтобы получить доступ к дате и времени для текущего процесса, вы используете специальную переменную $HOROLOG. Из-за этого во многих приложениях Caché даты и время сохраняются и передаются в формате, используемом этой переменной. Этот формат часто называют форматом $H или форматом HOROLOG. $HOROLOG извлекает дату и время из операционной системы и, таким образом, всегда находится в локальном часовом поясе. Библиотека классов Caché включает классы типа данных для представления дат в более распространенных форматах, таких как ODBC, и многие приложения используют их вместо формата $H.

Время UTC

Caché также предоставляет специальную переменную $ZTIMESTAMP, которая содержит текущую дату и время как значение координированного универсального времени в формате $H. Это всемирный стандарт времени и даты; это значение, скорее всего, будет отличаться от вашего местного времени (и даты).

Преобразование даты и времени

ObjectScript включает функции для преобразования значений даты и времени.

  • Учитывая дату в формате $H, функция $ZDATE возвращает строку, которая представляет дату в указанном формате.

Например:

SAMPLES>WRITE $ZDATE($HOROLOG,3)
2010-12-03
  • Учитывая дату и время в формате $H, функция $ZDATETIME возвращает строку, которая представляет дату и время в указанном формате.

Например:

SAMPLES>WRITE $ZDATETIME($HOROLOG,3)
2010-12-03 14:55:48
  • Учитывая строковые даты и время в других форматах, функции $ZDATEH и $ZDATETIMEH преобразуют их в формат $H.
  • Функции $ZTIME и $ZTIMEH конвертируют время от и до $H.

Подробная информация о формате $H

Формат $H представляет собой пару чисел, разделенных запятой. Например: 54321,12345

  • Первое число - это число дней с 31 декабря 1840 года. То есть день № 1 - 1 января 1841 года. Это число всегда является целым числом.
  • Второе число - это количество секунд с полуночи в данный день.

Некоторые функции, такие как $NOW(), предоставляют дробную часть.

Использование макросов и включенных файлов

Как отмечалось ранее, вы можете определить макросы и использовать их позже в одной и той же процедуре. Чаще всего вы определяете их в файлах include. Файл include - это документ с расширением .inc в Studio. Чтобы определить макрос, используйте директиву #define или другую директиву препроцессора. Например:

 #define mymacro "hello world"

Чтобы включить файл include в подпрограмму, используйте директиву #Include. Например:

 #Include myincludefile

Чтобы ссылаться на макрос, используйте следующий синтаксис:

$$$macroname

Или

$$$macroname(arguments)

Использование процедур и подпрограмм

Чтобы выполнить процедуру, используйте команду DO, как показано ниже:

 do ^routinename

Чтобы выполнить процедуру, функцию или подпрограмму (без доступа к ее возвращаемому значению), используйте следующую команду:

 do label^routinename

Или

 do label^routinename(arguments)

Чтобы выполнить процедуру, функцию или подпрограмму и ссылаться на ее возвращаемое значение, используйте выражение формы $$label ^routinename или $$label ^routinename(аргументы). Например:

 set myvariable=$$label^routinename(arguments)

Во всех случаях, если метка находится в рамках одной и той же процедуры, вы можете опустить имя подпрограммы. Например:

 do label
 do label(arguments)
 set myvariable=$$label(arguments)

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

Передача переменных по значению или по ссылке

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

 do ^myroutine(.myarg)

Чтобы продемонстрировать это, рассмотрите следующую процедуру:

square(input) public
{
    set answer=input*input
    set input=input + 10
    quit answer
}

Предположим, что вы определяете переменную и передаете ее по значению этой процедуре:

SAMPLES>set myvariable=5
 
SAMPLES>write $$square^demobyref(myvariable)
25
SAMPLES>write myvariable
5

Напротив, предположим, что вы передаете переменную по ссылке:

SAMPLES>set myvariable=5
 
SAMPLES>write $$square^demobyref(.myvariable)
25
SAMPLES>write myvariable
15

Существуют и другие вариации переменных в дополнение к локальным переменным без индексов. В следующей таблице приведены все вариации:

Локальные переменные
Вид переменной Передача по значению Передача по ссылке
Локальная переменная
без индексов
По умолчанию передаются
эти переменные
Разрешено
Локальная переменная
(с индексами)
Невозможно передать этот путь
(будет передан только верхний узел)
Необходимо
Глобальная переменная
(с индексами или без них)
Необходимо Невозможно передать этот путь
(данные для глобального не в памяти)

Потенциальные ловушки(Pitfalls)

Следующие элементы могут смутить программистов, которые впервые знакомятся с ObjectScript, особенно тех, кто несет ответственность за поддержание кода, написанного другими программистами:

  • В рамках процедуры или метода каждая строка должна начинаться с отступа по меньшей мере на пробел или одну вкладку, если только эта строка не содержит метку. То есть, если в первой позиции символа есть какой-либо текст, компилятор и Studio рассматривают его как метку.
    Есть одно исключение: фигурная скобка принимается в первой позиции символа.
  • Между командой и ее первым аргументом должно быть ровно один пробел. В противном случае Studio указывает, что у вас есть синтаксическая ошибка:

Аналогично, терминал отображает синтаксическую ошибку следующим образом:

SAMPLES>write  5
 
WRITE  5
              ^
<SYNTAX>
SAMPLES>
  • Приоритет операторов в ObjectScript строго слева направо; в выражении операции выполняются в том порядке, в котором они отображаются. Вы можете использовать явные скобки в выражении, чтобы заставить определенные операции переноситься впереди других.
  • По причинам истории, ObjectScript не считает пустую строку ("") равным значению NULL ASCII. Чтобы представить значение NULL ASCII, используйте $CHAR(0). ($CHAR - это системная функция, которая возвращает символ ASCII, учитывая его десятичный код). Например:
 write "" = $char(0)
  • Некоторые части ObjectScript чувствительны к регистру, а другие - нет. Нечувствительные к регистру элементы включают имена команд, функций, специальных переменных, пространств имен и пользователей.
  • Большинство имен команд могут быть представлены сокращенной формой. Поэтому WRITE, Write, write, W и w - все допустимые формы команды WRITE.
  • Для многих команд вы можете включить пост-условное выражение.

Это выражение определяет, выполняет ли Caché команду. Если пост-условное выражение имеет значение true (отличное от нуля), Caché выполняет команду. Если выражение оценивается как false (ноль), Caché игнорирует команду и продолжает следующую команду. Например:

 Set count = 6
 Write:count<5 "Print this if count is less than five"
 Write:count>5 "Print this if count is greater than five"

Вы можете включать несколько команд в одну строку. Например:

 set myval="hello world" write myval

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

  • Команды IF, ELSE, FOR и DO доступны в двух формах:
    • Более новая форма блока, которая использует фигурные скобки для указания блока. Например:
 if (testvalue=1) {
     write "hello world"
  }

InterSystems рекомендует использовать форму блока во всем новом коде.

  • Старая линейная форма, которая не использует фигурные скобки. Например:
 if (testvalue=1) write "hello world"
  • В результате предыдущих элементов ObjectScript можно записать в очень компактной форме. Например:
  s:$g(%d(3))'="" %d(3)=$$fdN3(%d(3)) q

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

  • В ObjectScript нет действительно зарезервированных слов, поэтому теоретически возможно иметь переменную с именем set, например. Тем не менее, разумно избегать имен команд, функций, зарезервированных слов SQL и некоторых элементов системы.
  • Caché выделяет фиксированный объем памяти для хранения результатов строковых операций. Если строковое выражение превышает объем выделенного пространства, возникает ошибка <MAXSTRING>. Если длинные строки не включены, предел составляет 32 767 символов. Если задействованы длинные строки, предел намного больше.

Для определений классов предел операции строки влияет на размер свойств строки. Caché предоставляет системный объект (называемый потоком), который вы можете использовать, когда вам нужно работать со строками, превышающими этот предел.

Подготовка к установке Caché

Планирование установки Caché

Установка среды разработки Atelier

Atelier - это среда разработки на основе Eclipse для Caché. Atelier доступен в виде отдельной загрузки в дополнение к Caché или Ensemble. Вы можете установить либо автономное приложение Rich Client Platform (RCP), либо подключаемый модуль, который можно добавить к существующей установке Eclipse. Пользователи приложения RCP могут добавлять дополнительные плагины Eclipse. Atelier использует механизм автоматического обновления Eclipse, чтобы помочь пользователям получить последние изменения.

Директория установки Caché

Во всей документации Caché каталог, в котором установлен экземпляр Caché, называется install-dir. Этот каталог зависит от платформы, типа установки и выбора пользователя, как показано в следующей таблице:

Директории
Платформа Тип установки Директория
Windows GUI C:\InterSystems\Cache
(или CacheN в случае нескольких экземпляров),
если при установке не было указано иное.
Windows Консоль C:\InterSystems\Cache
(или CacheN в случае нескольких экземпляров),
если свойство INSTALLDIR не указано иначе.
UNIX®, Linux GUI Указывается пользователем.
UNIX®, Linux Консоль Указывается в параметре ISC_PACKAGE_INSTALLDIR.
Linux RPM Установка экземпляра, всегда /usr/cachesys.

Каталог установки экземпляра Caché не может быть изменен после установки.

Ограничения директории установки

Вы не можете установить Caché в директорию, которая имеет одну из следующих характеристик:

  • Это UNC (нелокальный) путь.
  • Она находится на корневом уровне диска (например, C:\).
  • Она находится в каталоге \Program Files.
  • Она имеет (^) в пути.
  • Она не может иметь символы не соответствующие символам US ASCII.

Ширина символов Caché

Необходимо выбрать поддержку либо 8-bit либо Unicode для установки:

  • 8-bit. Программное обеспечение обрабатывает символы в 8-битном формате.
  • Unicode - программное обеспечение обрабатывает символы в формате Unicode (16 бит). Выберите Unicode, если ваше приложение использует языки, хранящие данные в формате Unicode, например, японский.

InterSystems рекомендует 8-битную поддержку символов для локалей на основе набора символов Latin-1, ISO 8859-1. Используйте Unicode, если базовый символ, установленный для вашей локали, не является Latin-1 (латинский), или если вы ожидаете обработку данных из локалей на основе другого набора символов. Если вы используете 8-битную версию Caché, ваши данные не переносятся в 8-разрядные локали на основе другого набора символов. Если вы выберете установку Unicode, вы не сможете вернуться к 8-разрядной версии без потери данных. Это связано с тем, что 8-разрядная версия Caché не может извлекать 16-битные символьные данные из базы данных. Если вы устанавливаете Ensemble, вы должны выбрать Unicode.

Требования к дисковому пространству

Для каждой платформы установочный диск должен быть доступен либо на вашем компьютере, либо в сети. Требования к дисковому пространству для каждой платформы:

  • Windows:
    • Установка Caché, включающая поддержку серверных страниц Caché (CSP), использует около 1500 МБ (мегабайт) дискового хранилища (не включая дисковое пространство для пользовательских данных).
    • Любая система, которая может эффективно поддерживать Windows, должна быть достаточно мощной для запуска Caché. Производительность Caché значительно улучшается с увеличением скорости процессора и диска.
  • UNIX®, Linux, macOS:
    • Стандартная установка Caché, включающая поддержку серверных страниц Caché (CSP), требует 1600 - 1950 МБ (мегабайт) дискового пространства в зависимости от выбранного вами типа установки.
    • Кроме того, в каталоге установки Caché требуется 200 МБ пространства. Процедура установки подтверждает, что это место на диске доступно в указанном месте перед установкой.

Частный веб-сервер Caché

С каждым экземпляром Caché устанавливает частный веб-сервер и частный шлюз CSP для обслуживания страниц CSP для обеспечения правильной работы портала управления и онлайн-документации Caché. Частный веб-сервер установлен для обеспечения того, чтобы:

  1. Портал управления предустановлен из корбки.
  2. Для среды разработки предусмотрена возможность тестирования из коробки.

Частный веб-сервер не поддерживается для каких-либо других целей. Для развертывания http-приложений, включая CSP, Zen и SOAP через http или https, вы не должны использовать частный веб-сервер, кроме порта управления; вместо этого вы должны установить и развернуть один из поддерживаемых веб-серверов. Windows: «Web Server for instname», где instname - это имя экземпляра, которое вы вводите при установке Caché. Caché устанавливает веб-сервер в каталог install-dir\httpd, где install-dir - это каталог установки Caché. Он удаляется при удалении соответствующего экземпляра Caché. Конфигурация частного веб-сервера сохраняется после обновления.

Управление памятью Caché

Выделение памяти для шаблонов и баз данных

Когда Caché впервые установлен, память для шаблоннов и баз данных кэшей устанавливается по умолчанию автоматически. При этом по умолчанию Caché выделяет консервативную часть доступной физической памяти для кеша базы данных, не превышающую 1 ГБ. Этот параметр не подходит для использования в производстве. Перед развертыванием системы для производства или перед выполнением каких-либо тестов или эталонных тестов, предназначенных для имитации использования продукции, измените этот параметр на «Вручную» и выделите достаточную память для ваших шаблонов и базовых кэшей.

Выделение памяти для шаблоннов

Память, выделенная для шаблонов (MB). Кэш процедуры указывает системную память, выделенную для кэширования кода сервера. Caché берет общий объем памяти, выделенный для шаблонного кеша, и создает буферы разных размеров в соответствии с этой формулой: он назначает половину общего пространства для буферов с 64 КБ, три-восьмых места для буферов 16 КБ и одну-восьмую из пространства для буферов 4 КБ. Эти группы буферов определенного размера иногда называются пулами. Максимальное количество буферов, которые Caché выделяет для любого пула, составляет 65 529. У Caché также есть минимальное количество, которое он выделяет. Caché никогда не выделяет менее 205 буферов в любой пул. Это означает, что фактическая память, используемая для обычных буферов (205 каждого размера буфера), может быть больше, чем сумма, указанная в файле конфигурации. Формат для подпрограмм Caché не позволяет содержать более 32 768 символов для литеральных строк независимо от установки максимального размера подпрограммы.

Выделение памяти для кэша базы данных

Память, выделенная для [blockize](размер блока) Cache базы данных (MB). Кэш базы данных указывает системную память, выделенную для буферизации данных; это также называется созданием глобальных буферов. Кэш базы данных и выделенную ему память иногда называют глобальным пулом буферов. Введите отдельное распределение для каждого указанного размера блока базы данных. Размер блока 8K необходим и указан по умолчанию. Чтобы включить дополнительные размеры блоков базы данных (16K, 32K, 64K), используйте параметр DBSizesAllowed на странице «Параметры запуска»(Startup Settings) («Системное администрирование» > «Дополнительные настройки» > «Запуск»/System Administration > Additional Settings > Startup). Как размер блока, так и максимальное количество доступных буферов имеют последствия для производительности. Чтобы определить, сколько глобальных буферов Caché создаст для баз данных с определенным размером блока, разделите выделение на размер блока; чем меньше размер блока, тем больше количество глобальных буферов, которые будут созданы для баз данных с этим размером блока.

Настройка общей кучи памяти (gmheap)

Вы можете настроить gmheap на странице «Расширенная память» (Advanced Memory) («Системное администрирование» > «Конфигурация» > «Дополнительные настройки» > «Расширенная память»/System Administration > Configuration > Additional Settings > Advanced Memory). gmheap - общая куча памяти определяет память, доступную Caché для целей, отличных от шаблонов и баз данных. Чтобы просмотреть сведения о используемой и доступной памяти для gmheap, используйте страницу Usage Shared Memory Heap Usage («Работа с системой»> «Использование системы», нажмите ссылку «Совместное использование кучи памяти» / System Operation > System Usage нажмите Shared Memory Heap Usage).

Другие настройки памяти Caché

Другие параметры памяти, которые вы можете изменить на странице «Память и запуск»(Memory and Startup):

  • Максимум для каждой памяти процесса (КБ)(Maximum per Process Memory (KB)). Максимальное выделение памяти для процесса для этого экземпляра Caché. Значение по умолчанию - 262144 КБ. Допустимый диапазон составляет от 128 КБ до 2147483647 КБ.
    Этот объем частной памяти процесса, который используется для распределения таблиц символов и других требований к памяти (например, структур и буферов доступа к устройствам ввода-вывода), распределяется по возрастающей степени по мере необходимости, пока приложение не достигнет максимума. Первоначальное распределение составляет 128 КБ. Как только эта память будет выделена для процесса, она не будет освобождена до завершения процесса.
  • Если вы установите флажок «Включить длинные строки»(Enable Long Strings), Caché выделяет большой стек строк для обработки длинных строк для каждого процесса.

Рекомендации по настройке файловой системы и хранилища

Рекомендации по файловой системе

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

  • Файлов установки, исполняемые файлы и системные базы данных (включая, по умолчанию, журнал записи изображений или файл WIJ)
  • Файлов баз данных (и, возможно, WIJ)
  • Каталогов первичного журнала
  • Альтернативного каталога журналов

Кроме того, вы можете добавить еще одну отдельную файловую систему в конфигурацию для файла WIJ, который по умолчанию создается в каталоге install-dir\mgr\. Убедитесь, что в такой файловой системе достаточно места, чтобы увеличить WIJ до максимального размера, то есть размер кеша базы данных, выделенного на странице «Память и запуск»(Memory and Startup) («Системное администрирование»> «Конфигурация»> «Конфигурация системы»> «Память и запуск»/System Administration > Configuration > System Configuration > Memory and Startup). На платформах UNIX®, Linux и macOS /usr/local/etc/cachesys является каталогом реестра Caché и поэтому должен находиться в локальной файловой системе. В случае катастрофического сбоя диска, который повреждает файлы базы данных, файлы журнала являются ключевым элементом восстановления после резервного копирования. Поэтому вы должны размещать первичные и альтернативные каталоги журналов на устройствах хранения, которые отделены от устройств, используемых файлами базы данных и WIJ. (Журналы должны быть отделены от WIJ, потому что повреждение WIJ может скомпрометировать целостность базы данных.) Поскольку альтернативное устройство журнала позволяет вести журналирование для продолжения после ошибки в первичном журнале, первичные и альтернативные журналы также должны быть на устройствах, отличных от друг друга. По практическим причинам эти разные устройства могут быть разными логическими единицами (LUN) в одном массиве хранения; общее правило - это большее разделение, тем лучше, с особыми рекомендациями.

Рекомендации по конфигурации хранилища

Сегодня многие технологии хранения доступны от традиционных магнитных вращающихся жестких дисков до устройств на основе SSD и PCIe Flash. Кроме того, технологии доступа к нескольким хранилищам включают NAS, SAN, FCoE, прямое подключение, PCIe и виртуальное хранилище с гиперконверсированной инфраструктурой. Технология хранения, которая наилучшим образом подходит для вашего приложения, зависит от шаблонов доступа приложений. Например, для приложений, которые преимущественно включают случайные чтения, SSD или флэш-хранилище будет идеальным решением, а для приложений, которые в основном потребляют записи, традиционные устройства жесткого диска могут быть наилучшим подходом.

Подключение к хранилищу

Следующие соображения применимы к подключению к хранилищу.

Сеть хранения данных (SAN) Fibre Channel

Используйте несколько путей от каждого хоста к коммутаторам SAN или контроллерам хранения. Уровень защиты увеличивается с несколькими адаптерами защиты, однако минимальная рекомендация заключается в использовании, по меньшей мере, двухпортового адаптера. Чтобы обеспечить отказоустойчивость на уровне массива хранения, массив с двумя контроллерами в активной или активно-пассивной конфигурации рекомендуется защитить от сбоя контроллера хранилища и обеспечить постоянный доступ даже в периоды обслуживания для таких операций, как обновления прошивки , При использовании нескольких коммутаторов SAN для резервирования хорошей практикой является создание каждого коммутатора отдельной SAN-структуры, чтобы избежать ошибочных изменений конфигурации на одном коммутаторе от воздействия на оба коммутатора и препятствовать доступу к хранилищу.

Сетевое хранилище (NAS)

При наличии 10Gb Ethernet, для лучшей производительности рекомендуется использовать коммутаторы 10Gb и сетевые интерфейсные платы (NIC). Кроме того, выделенной инфраструктуре рекомендуется изолировать трафик от обычного сетевого трафика в локальной сети. Это поможет обеспечить предсказуемую производительность NAS между хостами и хранилищем. Для обеспечения эффективной связи между хостами и хранилищем должна быть включена поддержка Jumbo frame. Многие сетевые интерфейсные карты (NIC) предоставляют поддержку TCP Offload Engine (TOE). Поддержка TOE не считается общепризнанной. Накладные расходы и выгоды сильно зависят от центрального процессора сервера для доступных циклов (или их отсутствия). Кроме того, поддержка TOE имеет ограниченный срок полезного использования, так как мощность обработки системы быстро доходит до уровня производительности TOE данного сетевого адаптера или во многих случаях превышает его.

Конфигурация хранения

Ландшафт массива хранения постоянно меняется в технологических функциях, функциональности и параметрах производительности, а несколько вариантов обеспечивают оптимальную производительность и отказоустойчивость для Caché. Следующая часть содержат общие рекомендации по оптимальной производительности и отказоустойчивости данных Caché. В прошлом RAID10 был рекомендован для максимальной защиты и производительности. Однако возможности контроллера хранения, типы RAID и эффективность алгоритмов и функции контроллера, такие как встроенное сжатие и дедубликация, предоставляют больше возможностей, чем когда-либо прежде. Там, где это возможно, лучше использовать размеры блоков, аналогичные размерам файла. В то время как большинство массивов хранения имеют более низкий предел размера блока, который может использоваться для данного тома, вы можете приблизиться к размеру блока типа файла как можно ближе; например, размер блока 32 КБ или 64 КБ в массиве хранения обычно является жизнеспособным вариантом для эффективной поддержки файлов CACHE.DAT с форматом блока 8 КБ. Цель здесь состоит в том, чтобы избежать чрезмерного/потраченного впустую ввода-вывода в массиве хранения на основе потребностей вашего приложения.

Подготовка к безопасности Caché

Подготовка среды безопасности для Kerberos

В этих разделах описывается подготовка к установке для трех типов сред:

  1. Windows-only
    В этой конфигурации используется контроллер домена Windows для функций KDC с серверами и клиентами Caché на компьютерах Windows. Администратор домена создает учетные записи домена для запуска служб Caché на серверах Caché.
  2. Смешанная среда с использованием контроллера домена Windows
    В этой конфигурации используется контроллер домена Windows с серверами и клиентами Caché в сочетании с Windows и компьютерами, отличными от Windows.
  3. Non-Windows
    Эта конфигурация использует UNIX® или Kerberos KDC с серверами и клиентами Caché на всех компьютерах, отличных от Windows.

Все поддерживаемые платформы Caché имеют версии Kerberos, поставляемые и поддерживаемые поставщиком. Если вы решите использовать Kerberos, у вас должен быть центр распространения ключей Kerberos (KDC) или контроллер домена Windows, доступный в вашей сети. Microsoft Windows реализует протокол аутентификации Kerberos, интегрируя KDC с другими службами безопасности, работающими на контроллере домена.

Создание учетных записей служб на контроллере домена Windows для серверов Windows Caché

Перед установкой Caché в домене Windows администратор домена Windows должен создать учетную запись службы для каждого экземпляра сервера Caché на компьютере под управлением Windows с помощью контроллера домена Windows.

Характеристики учетной записи

Когда вы создаете эту учетную запись на контроллере домена Windows, настройте ее следующим образом:

  • Пароль учетной записи никогда не истекает (Password never expires).
  • Сделайте учетную запись членом группы «Администраторы» (Administrators) на сервере Caché.
  • Добавьте учетную запись в журнал в качестве политики службы (Log on as a service).
Имена и соглашения об именах

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

  • Следуйте стандартным соглашениям об именах Kerberos. Это гарантирует совместимость с любыми системами, отличными от Windows.
  • Используйте любую уникальную строку.

Создание учетных записей служб на контроллере домена Windows для серверов, отличных от Windows Caché

Перед установкой Caché в домене Windows вам необходимо создать учетную запись службы на контроллере домена Windows для каждого сервера Caché на машине, отличной от Windows. Создайте одну учетную запись службы для каждого компьютера, независимо от количества экземпляров сервера Caché на этом компьютере. Предложенным соглашением об именах для этих учетных записей является «cacheHOST», который является литеральным, кешем, за которым следует имя главного компьютера в верхнем регистре. Например, если вы запускаете сервер Caché на машине, отличной от Windows, называемой UNIXSRVR, укажите имя учетной записи домена cacheUNIXSRVR. Для серверов Caché на платформах, отличных от Windows, это учетная запись, которая сопоставляется с главным сервисом службы Kerberos. Чтобы настроить сервер, не относящийся к Windows Caché, в домене Windows, он должен иметь файл keytab из домена Windows. Файл keytab - это файл, содержащий имя службы для сервера Caché и его ключ. Для этого сопоставьте учетную запись службы Windows (cacheUNIXSRVR в этом примере) с директором службы на сервере Caché и извлеките ключ из учетной записи с помощью инструмента командной строки ktpass на контроллере домена; это доступно как часть средств поддержки Windows от Microsoft. Команда сопоставляет учетную запись, настроенную только на учетную запись на машине UNIX®/Linux; он также генерирует ключ для учетной записи. Команда должна указывать следующие параметры:

Команды
Параметр Описание
-princ Основное имя (cache/<полное имя хоста>@<kerberos realm>).
-mapuser Имя созданной учетной записи (cache<HOST>).
-pass Пароль, указанный при создании учетной записи.
-crypto Используемый тип шифрования
(используйте стандартный, DES-CBC-CRC, если не указано иное).
-out Созданный файл keytab для передачи на серверный компьютер
Caché и замену или слияние с существующим файлом keytab.

Основное имя на платформах UNIX®/Linux должно иметь форму, показанную в таблице, с литеральным cache в качестве первой части.

Создание Принципов обслуживания на KDC для Non-Windows Caché Servers

В среде, отличной от Windows, вы должны создать принцип обслуживания для каждого сервера UNIX®/Linux или macOS Caché, который использует UNIX®/Linux или macOS KDC. Имя участника службы имеет вид cache/<полное имя хоста>@<kerberos realm>.

Ключевые характеристики файла

После того, как вы создали этот принцип, извлеките его ключ в файл ключа на сервере Caché со следующими характеристиками:

  • В большинстве версий UNIX® имя пути - install-dir/mgr/cache.keytab. В macOS и SUSE Linux указан путь /etc/krb5.keytab.
  • Он принадлежит пользователю, которому принадлежит установка Caché и группа cacheusr.
  • Его разрешения - 640.

Настройка клиентов Windows Kerberos

Если вы используете клиенты Windows с Kerberos, вам также может потребоваться настроить их так, чтобы они не запрашивали у пользователя учетные данные. Это необходимо, если вы используете программу, которая не может запрашивать учетные данные - в противном случае программа не сможет подключиться. Чтобы настроить Windows, чтобы не запрашивать учетные данные, выполните следующие действия:

  1. На клиентском компьютере Windows запустите редактор реестра regedit.exe.
  2. Перейдите в раздел HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters.
  3. В этом разделе установите значение AllowTgtSessionKey равным 1.

Начальные настройки безопасности Caché

Во время установки появляется запрос на один из трех наборов начальных настроек безопасности: минимальный (Minimal), нормальный (Normal) и заблокированный (Locked Down). Этот выбор определяет начальные настройки конфигурации авторизации для служб и безопасности Caché.

Начальные настройки безопасности пользователя

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

Начальные настройки безопасности пользователя
Настройка безопасности Минимальный Нормальный Заблокированный
Шаблон паролей 3.32ANP 3.32ANP 8.32ANP
Неактивный лимит 0 90 дней 90 дней
Включить пользователя _SYSTEM Да Да Нет
Роли, назначенные UnknownUser %All - -
Шаблон паролей

Когда Caché установлен, он имеет набор требований по паролю по умолчанию. Для заблокированных установок первоначальное требование состоит в том, что пароль имеет от 8 до 32 символов и может состоять из буквенно-цифровых символов или знаков препинания; аббревиатура для этого - 8.32ANP (alphanumeric characters or punctuation). В противном случае первоначальное требование состоит в том, что пароль может быть от 3 до 32 символов и может состоять из буквенно-цифровых символов или знаков препинания (3.32ANP).

Неактивный лимит

Это значение - количество дней, когда учетная запись может быть неактивна до ее отключения. Для минимальной установки предел устанавливается равным 0, что указывает на то, что учетные записи не отключены, независимо от того, как долго они неактивны. Стандартные и заблокированные установки имеют предел по умолчанию 90 дней.

Пользователь _SYSTEM

В версиях Caché до 5.1 все установленные системы включали пользователя SQL System Manager с именем _SYSTEM с паролем SYS. Эта версия Caché создает _SYSTEM и следующие дополнительные предопределенные пользователи, используя пароль, который вы предоставляете во время установки: _SYSTEM, Admin, SuperUser, CSPSystem и владелец экземпляра (пользователь установки в Windows и имя пользователя, указанное установщиком на других платформах ).

Роли, присвоенные UnknownUser

Когда пользователь, не прошедший проверку подлинности, подключается, Caché присваивает специальное имя UnknownUser $USERNAME и назначает роли, определенные для этого пользователя, в $ROLES. Неизвестному пользователю присваивается роль %All с установкой минимальной безопасности; Неизвестный пользователь не имеет ролей при выборе уровня безопасности, отличного от минимального.

Настройка учетных записей пользователей

Если вы выбираете Normal или Locked Down для первоначальной настройки безопасности, вы должны предоставить дополнительную информацию процедуре установки:

  1. Учетные данные пользователя (User Credentials) только для установки сервера Windows. Выберите существующую учетную запись пользователя Windows, под которой запускается служба Caché. Вы можете выбрать системную учетную запись по умолчанию, которая запускает Caché в качестве учетной записи Windows Local System или вводит определенную учетную запись пользователя Windows.
    Если вы вводите определенную учетную запись пользователя, установка проверяет следующее:
    • Учетная запись существует в домене.
    • Вы указали правильный пароль.
    • У учетной записи есть локальные административные привилегии на сервере.
  2. Настройка пользователей Caché (Caché Users Configuration) для установки Windows. Установка создает учетную запись Caché с ролью %All для пользователя, который устанавливает Caché, чтобы предоставить пользователю доступ к службам, необходимым для администрирования Caché.

Подготовка к установке Caché в UNIX®, Linux и macOS

Параметры монтирования файловой системы на платформах UNIX®, Linux и macOS

Буферизованный ввод-вывод против прямого ввода-вывода

В общем, большинство поддерживаемых файловых систем UNIX®, Linux и MacOS операционных систем предлагают две различные опции ввода-вывода, используя либо программный контроль, вариант монтирования, либо и то и другое:

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

Использование буферизованного и прямого ввода-вывода в Caché зависит от платформы, файловой системы и характера файлов, хранящихся в файловой системе, следующим образом:

  • Файлы журналов
  • Файлы установки, исполняемые файлы и системные базы данных.
  • Базы данных (файлы CACHE.DAT).

Установка Caché в Microsoft Windows

Установка обновления Caché

Шаги по обновлению каждого типа Caché одинаковы. Процедура установки обновления устанавливает необходимые компоненты для выбранного типа установки на компьютере. Для обновления установки выполните следующую процедуру:

  1. Остановите работу любого сервера Caché на компьютере. Кроме того, закройте все другие приложения Windows и отключите веб-сервер, если он установлен на том же компьютере. Убедитесь, что у вас есть доступ к установочному набору.
  2. Выполните установочный файл, например, дважды щелкнув его в проводнике Windows или выполнив его в командной строке следующим образом: C:\Users\Public\Downloads\cache-2016.2.0.626.0-win_x64.exe
  3. В диалоговом окне «Выбор экземпляра» (Select Instance) перечислены существующие каталоги установки всех экземпляров Caché, установленных на компьютере. Выберите экземпляр, который вы хотите обновить.
  4. В диалоговом окне «Добро пожаловать в Caché» (Welcome to the Caché Installation) отображаются следующие кнопки, позволяющие вам управлять обновлением:
    • При необходимости нажмите «Настроить» (Customize), чтобы добавлять или удалять компоненты во время обновления установки.
    • Нажмите «Обновить» (Update), чтобы перейти к следующему диалоговому окну, независимо от того, была ли настроена установка.
  5. Диалоговое окно «Мастер установки InstallShield» (InstallShield Wizard Complete) показывает, что установка завершена успешно. Нажмите «Готово» (Finish).

Установка Caché

Шаги по установке каждого типа конфигурации Caché в основном одинаковы, но немного отличаются друг от друга в зависимости от типа установки. Процедура установки устанавливает необходимые компоненты для выбранного типа установки на компьютере. Чтобы выполнить установку, выполните следующую процедуру:

  1. Убедитесь, что установочный файл доступен на вашем компьютере или в сети.
  2. Выполните установочный файл, например, дважды щелкнув его в проводнике Windows или выполнив его в командной строке следующим образом: C:\Users\Public\Downloads\cache-2016.2.0.626.0-win_x64.exe
  3. Начнется установка Caché. В настройках активируются следующие кнопки, позволяющие вам управлять установкой:
    • Нажмите «Далее» (Next), чтобы перейти к следующему диалоговому окну.
    • Нажмите «Назад» (Back), чтобы вернуться к предыдущему диалоговому окну и изменить введенное вами.
    • Нажмите «Отмена» (Cancel), чтобы остановить установку.
  4. Если в системе установлены другие экземпляры Caché, в диалоговом окне «Выбор экземпляра» перечислены их каталоги установки. Выберите «Новый экземпляр» (New Instance) для установки нового экземпляра Caché.
  5. Если вы устанавливаете новый экземпляр Caché на этом компьютере, установка отображает диалоговое окно «Лицензионное соглашение» (License Agreement). Нажмите «Я принимаю условия лицензионного соглашения» (I accept the terms in the license agreement), чтобы подтвердить, что вы принимаете лицензионное соглашение.
  6. В диалоговом окне «Имя экземпляра Caché» (Caché Instance Name) можно назначить имя для нового экземпляра, который вы устанавливаете. Имя по умолчанию - CACHE (или, если имеются другие экземпляры, существует CACHEn, где n - количество экземпляров Caché, включая этот новый). Примите значение по умолчанию или введите другое имя, используя только буквенно-цифровые символы. Последующие обновления этого экземпляра поддерживают имя экземпляра, который вы вводите здесь.
  7. Диалоговое окно «Целевая папка» (Destination Folder) позволяет выбрать целевой каталог для программного обеспечения Caché для нового экземпляра; по умолчанию используется C:\InterSystems\Cache (или Cachen, когда существует несколько экземпляров). Вы можете выбрать или создать каталог, нажав «Изменить» (Change). Если указанный каталог не существует, настройка позволяет его создать.
  8. Диалоговое окно «Тип установки» (Setup Type) позволяет указать, как вы собираетесь использовать Caché:
    • Разработка (Development) - устанавливает механизм базы данных Caché (база данных образцов, пользовательская база данных, шлюз SQL, средства мониторинга сервера), Studio, все поддерживаемые языковые привязки и драйверы xDBC (ODBC и JDBC). Выберите этот параметр, если вы планируете использовать этот экземпляр для выполнения как клиентских, так и серверных задач.
    • Сервер (Server) - устанавливает Caché Database Engine (база данных Samples, база данных пользователей, шлюз SQL, инструменты мониторинга сервера) и CSP Gateway. Выберите этот параметр, если вы планируете использовать этот экземпляр в качестве сервера базы данных Caché, к которому могут обращаться клиенты Caché.
    • Клиент (Client) - устанавливает Studio и драйверы xDBC (ODBC и JDBC). Выберите этот вариант, если вы планируете использовать этот экземпляр в качестве клиента на сервере базы данных Caché на том или другом компьютере.
    • Веб-сервер (Web Server) - устанавливает шлюз CSP (IIS, Apache 2.0, Apache 2.2). Выберите этот параметр, если вы хотите установить только те части Caché, которые требуются на шлюзовой машине CSP.
    • Пользовательский (Custom) - Устанавливает/удаляет определенные компоненты. Выберите этот параметр, если вы хотите установить или удалить определенные компоненты Caché.

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

Компоненты, установленные по типу установки
Группа компонентов Компоненты Разработка
(Development)
Сервер
(Server)
Клиент
(Client)
Веб-сервер
(Web Server)
Caché Database Engine
(Caché Server)
Server Monitoring Tools
Samples database
User database
SQL Gateway
Agent Service (ISCAgent)
Apache FOP (Formatting Objects Processor)
+ +
Caché Launcher (cube) + + +
Studio + +
xDBC ODBC Driver
Java Database Connectivity
+ +
Caché Application
Development
ActiveX Connectivity
C++ Binding for Caché
Light C++ Binding
Java Binding for Caché
C++ SDK for Caché
Caché Engine Link Libraries
Perl Binding for Caché
Python Binding for Caché
.NET Binding for Caché
Threaded Server Libraries
Other Samples
+
Documentation
(документация)
PDF Documentation
Online Documentation
+ +
Web Server Gateway
(CSP)
CSP for IIS
CSP for Apache 2.0.x
CSP for Apache 2.2.x
+ +

Установка только компонентов Caché или компонентов сервера

Если вы хотите, вы можете установить только компоненты Caché, которые требуются в системе разработки или в серверной системе.[Источник 9] Для выполнения установки или установки сервера:

  1. Выберите «Разработка» (Development) или «Сервер» (Server) в диалоговом окне «Тип установки» (Setup Type) и нажмите «Далее» (Next).
  2. Диалоговое окно «Установить поддержку Unicode» (Install Unicode Support) позволяет выбрать либо поддержку 8-разрядной, либо Unicode-символа для вашей установки (по умолчанию это зависит от локали вашей операционной системы).
  3. В диалоговом окне «Начальные параметры безопасности» (Initial Security Settings) вы можете определить, насколько ограничительными должны быть начальные настройки безопасности Caché. Если вы выберете «Минимальный» (Minimal), установка будет продолжена следующим шагом. Если вы выберете «Обычный» (Normal) или «Заблокировано» (Locked Down), установка включает в себя следующие шаги:
    • Диалоговое окно «Ввести учетные данные для Caché Service» (Enter Credentials for Caché Service) позволяет выбрать учетные данные, под которыми будет запускаться служба Windows Caché. По умолчанию используется локальная учетная запись SYSTEM. Вы также можете указать определенную (существующую) учетную запись пользователя Windows и пароль; при этом установщик проверяет эти учетные данные перед продолжением. Установщик также создает учетную запись Caché с тем же именем пользователя, с ролью %All для неограниченного доступа к экземпляру (пароль для этой учетной записи указан на следующей панели).
      Запуск службы Windows Caché под учетной записью SYSTEM по умолчанию подходит для многих установок, но в некоторых случаях может вызвать проблемы, связанные с правами доступа к файлам и доступом к сети. Если вы ожидаете потенциальных проблем в этих областях для экземпляра Caché, например, из-за конфигурации сети или механизмов безопасности, укажите учетную запись для службы Windows Caché, которая имеет необходимые привилегии и/или доступ, например, администратора домена.
      Чтобы изменить учетную запись службы (в Windows 10): Перейдите в Панель управления > Администрирование > Службы (Control Panel > Administrative Tools > Services). Затем найдите правильную службу Caché. Затем щелкните правой кнопкой мыши, чтобы открыть диалоговое окно свойств правильного экземпляра. Наконец, измените учетные данные на вкладке «Вход в систему» (Log On Tab) и перезапустите Caché.
    • В первой панели диалогового окна «Конфигурация пользователей Caché» (Caché Users configuration) вы можете ввести начальный пароль для следующих предопределенных учетных записей Caché _SYSTEM, Admin и SuperUser, а также имя пользователя, которое вы указали, если вы выбрали определенную учетную запись Windows как учетную запись службы на предыдущей панель. Вторая панель диалога «Конфигурация пользователей Caché» (Caché Users configuration) позволяет ввести начальный пароль для предопределенной учетной записи CSPS.
  4. Диалоговое окно «Готово к установке» (Ready to Install) позволяет просмотреть имя, тип и каталог установки, а также статус лицензионного ключа. Нажмите кнопку «Лицензия» (License), чтобы выбрать лицензионный ключ Caché. Если ключ действителен, лицензия автоматически активируется, поле «Лицензионный ключ» (License Key) в диалоговом окне «Готово к установке» (Ready to Install) обновляется до «Действителен» (Valid), а лицензионный ключ копируется в каталог менеджера экземпляра (install-dir/mgr) как cache.key во время установки; дополнительная процедура активации не требуется. Если вы не выбрали ключ, вы можете активировать лицензионный ключ InterSystems Caché после установки. Нажмите «Установить» (Install), чтобы продолжить. Программа установки устанавливает Caché в выбранном каталоге.
  5. Диалоговое окно «Мастер установки InstallShield» (InstallShield Wizard Complete) показывает, что установка завершена успешно. Выберите, хотите ли вы видеть страницу «Начало работы» (InstallShield Wizard Complete) и нажмите «Готово» (Finish).

Система автоматически запускается после завершения установки. Значок Caché Cube появляется в области панели задач панели инструментов Windows. Нажмите на куб, чтобы открыть меню Caché. Кроме того, в меню программ Windows есть элемент Caché.

Только установка компонентов клиента Caché

Если вы хотите, вы можете установить только те части Caché, которые требуются на клиентской машине. Чтобы выполнить установку клиента:

  1. Выберите «Клиент» (Client) в диалоговом окне «Тип установки» (Setup Type) и нажмите «Далее» (Next).
  2. Диалоговое окно «Готово к установке» (Ready to Install) позволяет просмотреть имя, тип и каталог установки для файлов программного обеспечения. Нажмите «Установить» (Install), чтобы продолжить. Программа установки устанавливает Caché в выбранном каталоге.
  3. Диалоговое окно «Мастер установки InstallShield» (InstallShield Wizard Complete) показывает, что установка завершена успешно. Нажмите «Готово» (Finish).

После установки Caché на клиенте значок Caché Cube появляется в области панели задач панели инструментов Windows; он кажется тусклым, потому что не работает сервер Caché.

Установка только шлюза веб-сервера (CSP)

Если вы хотите, вы можете установить только те части Caché, которые требуются на машине CSP. Для выполнения установки шлюза CSP:

  1. Выберите «Веб-Сервер» (Web Server) в диалоговом окне «Тип установки» (Setup Type) и нажмите «Далее».
  2. Диалоговое окно «Готово к установке» (Ready to Install) позволяет просмотреть имя, тип и каталог установки для файлов программного обеспечения. Нажмите «Установить» (Install), чтобы продолжить. Программа установки устанавливает Caché в выбранном каталоге.
  3. Диалоговое окно «Мастер установки InstallShield» (InstallShield Wizard Complete) показывает, что установка завершена успешно. Нажмите «Готово» (Finish).

Если веб-сервер запущен, диалоговое окно спрашивает, хотите ли вы перезапустить веб-сервер. Если вы нажмете «Да» (Yes), процедура установки перезапустит веб-сервер. Если вы нажмете «Нет» (No), процедура не перезапустит веб-сервер, и в этом случае он не запустится, пока вы не перезапустите его вручную или не перезапустите систему. Если установщик обнаруживает веб-сервер IIS, установленный в системе, он настраивает веб-сервер для шлюза CSP. Установщик также отображает флажок для IIS; если вы выберете его, модули IIS шлюза CSP будут установлены в C:\InetPub\CSPGateway. Шлюз CSP настраивает следующие пути приложения, указывающие на сервер, настроенный для экземпляра:

  • /
  • /csp
  • /Cache

Выполнение пользовательской (Custom) установки Caché

Программа установки Caché позволяет вам выбрать определенные компоненты Caché для установки на компьютер. Например, вы можете установить только шлюз веб-сервера (CSP). Имейте в виду, что для некоторых выборов требуется также установка других компонентов. Чтобы выполнить пользовательскую установку Caché:

  1. Выберите «Пользовательский» (Custom) в диалоговом окне «Тип установки» (Setup Type) и нажмите «Далее» (Next).
  2. В диалоговом окне «Пользовательская настройка» (Custom Setup) выберите компоненты, которые вы хотите установить, как описано в таблице «Компоненты, установленные по типу установки».
  3. При необходимости нажмите «Пробел» (Space), чтобы убедиться, что на выбранных компонентах достаточно места на диске.
  4. Диалоговое окно «Установить поддержку Unicode» (Install Unicode Support) позволяет выбрать либо поддержку 8-разрядной, либо Unicode-символа для вашей установки (по умолчанию это зависит от локали вашей операционной системы).
  5. «Введите номера портов» (Enter Port Numbers) позволяют изменять номера портов, назначенные Caché. Следующие номера портов действительны для вашего экземпляра Caché:
    • Номер порта SuperServer - 1972 или первый доступный последующий номер, равный или превышающий 56773; вы можете изменить значение порта SuperServer после установки на странице [Главная страница] >> [Конфигурация] >> [Память и запуск] ([Home] > [Configuration] > [Memory and Startup]) Панели управления.
    • Номер WebServerPort - 57772 или первый доступный следующий номер; вы можете изменить значения WebServerPort после установки на странице [Главная]> [Конфигурация]> [Параметры запуска] ([Home]> [Configuration]> [Startup Settings]) на панели управления.
  6. В диалоговом окне «Начальные параметры безопасности» (Initial Security Settings) вы можете определить, насколько ограничительными должны быть начальные настройки безопасности Caché. Если вы выберете минимальный уровень (Minimal), установка будет продолжена следующим шагом. Если вы выберете «Обычный» (Normal) или «Заблокировано» (Locked Down), отобразится «Ввести учетные данные для службы Caché» (Enter Credentials for Caché Service), где вы можете выбрать услугу Caché:
    • Учетная запись SYSTEM по умолчанию, которая запускает Caché в качестве учетной записи Windows Local System.
    • Определенная учетная запись пользователя Windows. Установка создает учетную запись Caché с ролью %All для пользователя, который устанавливает Caché, чтобы предоставить этому пользователю доступ к службам, необходимым для администрирования Caché. Введите и подтвердите пароль для этой учетной записи. Пароль должен соответствовать критериям, соответствующим настройке безопасности. Когда вы нажмете «Далее» (Next), при вводе определенной учетной записи пользователя проверка проверяет следующее:
    • Учетная запись существует в домене.
    • Вы указали правильный пароль.
    • У учетной записи есть права локального администратора на сервере.
  7. Диалоговое окно «Готово к установке» (Ready to Install) позволяет просмотреть имя, тип и каталог установки для файлов программного обеспечения. Нажмите «Установить» (Install), чтобы продолжить. Программа установки устанавливает Caché в выбранном каталоге.
  8. Диалоговое окно «Мастер установки InstallShield» (InstallShield Wizard Complete) показывает, что установка завершена успешно. Выберите, хотите ли вы видеть страницу «Начало работы» (InstallShield Wizard Complete) и нажмите «Готово» (Finish).

Автоматическая пользовательская установка

Установщик Caché для Windows предоставляет возможность автоматической установки, обновления, переустановки и удаления экземпляров Caché на вашем компьютере. Типичная операция установки получает необходимый ввод от пользователя в виде ответов на диалоговые окна. Однако автоматическая операция не запрашивает пользователя для ввода; вместо этого он получает входные данные от свойств, переданных в установочный файл Caché в командной строке.

Запуск автоматической установки

Чтобы запустить автоматическую установку нового экземпляра Caché, используйте следующую команду: <path>\<installer>.exe /instance <instancename> /q{b|n} <properties> Где:

  • <path> это путь к установочному файлу Caché.
  • <installer>.exe это имя установочного файла Caché.
  • /qb
  • <instancename> это имя установленного экземпляра Caché. (Новый экземпляр установлен с именем экземпляра экземпляра по умолчанию, если параметр /instance опущен, однако параметр /instance должен использоваться, когда есть один или несколько экземпляров, которые уже установлены.)
  • <properties> это свойства, которые вы передаете установщику.

Например, чтобы установить экземпляр Caché с именем экземпляра по умолчанию в каталоге установки C:\InterSystems\MyCache в 64-разрядной системе Windows, укажите следующее: C:\downloads\cache-2015.1.0.320.0-win_x64.exe /qn INSTALLDIR=C:\InterSystems\MyCache

Запуск автоматической перезагрузки или переустановки

Целью установщика Caché может быть уже установленный экземпляр, а также новый экземпляр. Когда нет установленных экземпляров Caché, цель всегда является новым экземпляром. Когда один или несколько экземпляров Caché уже установлены, вы должны использовать флаг /instance, чтобы указать либо имя одного из существующих экземпляров, либо новое имя, которое устанавливает новый экземпляр. Когда установленный экземпляр является целью установщика, действие, которое принимает установщик, зависит от версий установочного файла, указанного в командной строке и целевом экземпляре, следующим образом:

  • Если установочный файл той же версией, что и целевой экземпляр, установщик переустанавливает (восстанавливает) экземпляр.
  • Если установочный файл более поздней версией, чем целевой экземпляр, установщик обновляет экземпляр до новой версии.

Например, чтобы запустить автоматическое обновление установленного экземпляра CacheB, который является более ранней версией, чем файл установки, используйте следующее: C:\downloads\cache-2015.1.0.320.0-win_x64.exe /instance CacheB /qn

Пост-установочные задачи

Просмотрите следующие важные задачи после установки:

  • Вы можете управлять своим экземпляром Caché с помощью Панели управления, доступного из Caché Cube.
  • Установка Caché в Windows именует службу Windows Caché с именем экземпляра, используя имя из диалогового окна «Имя экземпляра Define Caché» (Define Caché Instance Name) и настраивает службу для запуска автоматически при запуске вашего сервера; это означает, что экземпляр Caché автоматически настроен на автозапуск (запуск при запуске системы).

Видео по установке

Установка Caché на UNIX®, Linux и macOS

Стандартная установка Caché

Стандартная установка Caché состоит из набора модульных пакетов. Сценарии условно запрашивают информацию на основе ввода предыдущих шагов, вашей системной среды и независимо от того, обновляете ли вы существующий экземпляр или первичная установка. На первом этапе установки хранится вся собранная информация об установке в файле параметров. Затем вы подтверждаете специфику установки до фактической установки. Заключительная фаза выполняет операции, зависящие от успешной установки, такие как запуск экземпляра.[Источник 10] Чтобы установить сервер Caché, войдите в систему как root пользователя. Допустимо su (суперпользователь) для root при входе в систему с другой учетной записи.

Распаковка установочного комплекта

Если установочный комплект находится в виде файла .tar, например cache-2015.2.0.600.0-lnxrhx64.tar.gz, распакуйте файл во временный каталог, чтобы избежать проблем с разрешениями, как показано в следующем примере.

# mkdir /tmp/cachekit 
# chmod og+rx /tmp/cachekit 
# gunzip -c /download/cache-2016.2.0.600.0-lnxrhx64.tar.gz | ( cd /tmp/cachekit ; tar xf - )

Файлы установки распаковываются в каталог с тем же именем, что и файл .tar, например, /tmp/cachekit/cache-2016.2.0.600.0-lnxrhx64 в предыдущем примере.

Определение каталога установки

Вы должны выбрать полностью разрешенный физический путь, не содержащий символических ссылок, для каталога установки Caché; нет места по умолчанию. Каталог реестра Caché /usr/local/etc/cachesys всегда создается вместе с каталогом установки Caché.

Определение владельцев и групп

Процесс установки запрашивает следующую информацию о пользователе и группе:

  • Владелец экземпляра
  • Эффективный пользователь для суперсервера (superserver) Caché и его рабочих мест
  • Эффективная группа для процессов Caché
  • Группа, которой разрешено запускать и останавливать экземпляр

Учетная запись пользователя, которую вы идентифицируете как владельца экземпляра, и группа, которую вы идентифицируете как группу запуска/остановки экземпляра, должны существовать до начала установки. Если запись, которую вы предоставили в одном из этих приглашений, не существует, запрос повторяется, поэтому убедитесь, что пользователь и группа, которую вы собираетесь предоставить, существуют до начала установки. Если ваша операционная система содержит служебные программы useradd и groupadd, система создает учетную запись для эффективного пользователя для суперсервера (superserver) Caché и эффективной группы для процессов Caché, если указанные вами записи не существуют. Однако, если эти утилиты отсутствуют, а введенная вами запись не существует, запрос повторяется. Если вы не уверены, что ваша система имеет эти утилиты, убедитесь, что пользователь и группа, которую вы собираетесь предоставить, существуют до начала установки.

Запуск сценария установки

Установочный скрипт cinstall, который должен запускаться пользователем с привилегиями root, автоматически выполняет следующее:

  • Устанавливает базы данных системного менеджера Caché.
  • Запускает Caché в режиме установки.
  • Устанавливает глобальные системы и подпрограммы системного менеджера Caché.
  • Закрывает Caché и перезапускается с использованием файла конфигурации по умолчанию (cache.cpf). Обновления установок перезапускаются с использованием их обновленных файлов конфигурации.

Процедуры установки

Чтобы выполнить стандартную установку сервера Caché:

  • Как пользователь с привилегиями root, запустите процедуру установки, запустив скрипт cinstall, расположенный на верхнем уровне установочных файлов:
 # /<pathname>/cinstall

где pathname - это местоположение установочного набора.

  • Сценарий установки идентифицирует ваш тип системы и проверяет его на соответствие типу установки на носителе распространения. Если ваша система поддерживает более одного типа, например 32-разрядную и 64-разрядную, или если сценарий установки не может идентифицировать ваш тип системы, он предлагает дополнительные вопросы. Если тип вашей системы не совпадает с типом вашей системы распространения, установка останавливается.
  • Сценарий отображает список любых существующих экземпляров Caché на хосте.
  • В приглашении (Enter instance name): введите имя экземпляра, используя только буквенно-цифровые символы. Если экземпляр с этим именем уже существует, программа запрашивает, хотите ли вы его обновить. Если такой экземпляр не существует, он запрашивает, хотите ли вы его создать и попросит указать его каталог установки. Если указанный вами каталог не существует, он спрашивает, хотите ли вы его создать. Ответ по умолчанию на каждый из этих вопросов: Да; нажмите Enter, чтобы продолжить установку.
  • Затем выберите тип установки.

Ядром функционирующего экземпляра Caché является сервер Caché. Вы можете установить сервер и шлюз веб-сервера CSP, а также инструменты, необходимые для разработки, включая Studio, драйверы ODBC и JDBC и все поддерживаемые языковые привязки. Вы также можете установить сервер и шлюз CSP без инструментов разработки. Наконец, вы можете выполнить выборочную установку, в которой вы выбираете компоненты для установки и укажите некоторые дополнительные параметры установки. Эти варианты показаны в следующем:

Select installation type.
    1) Development - Install Cache server and all language bindings
    2) Server only - Install Cache server
    3) Custom - Choose components to install
Setup type <1>?
  • Затем укажите, следует ли устанавливать Caché с поддержкой 8-битных или Unicode-символов. При обновлении вы можете конвертировать из 8-бит в Unicode, но не наоборот.
  • Для новых экземпляров необходимо указать параметры безопасности. (Параметры безопасности не могут быть изменены при обновлении.)
    Во-первых, решите, насколько ограничительным вы хотите, чтобы начальные настройки безопасности Caché были следующими: выберите из Minimal (1), Normal (2) и Locked Down (3). По умолчанию используется Minimal; если вы выберете это, владелец экземпляра станет root, и установка продолжит следующий шаг.
    Если вы введете 2 или 3, скрипт запросит дополнительную информацию:
    • Владелец экземпляра. Введите имя пользователя учетной записи, под которой запускаются процессы Caché. После установки Caché вы не можете изменить владельца экземпляра.
    • Пароль для владельца экземпляра. Введите пароль для имени пользователя, введенного в предыдущем приглашении, и введите его еще раз, чтобы подтвердить его.
    • Пароль для предопределенного пользователя CSPSystem.
  • На этом этапе установки вам будет предложено запустить группу и остановить Caché. Только одна группа может иметь эти привилегии, и она должна быть действительной группой на машине.
  • Наконец, для нового экземпляра или если скрипт не обнаруживает файл cache.key в каталоге mgr существующего экземпляра при обновлении, вам предлагается файл лицензионного ключа. Если вы укажете действительный ключ, лицензия будет автоматически активирована, а лицензионный ключ будет скопирован в каталог экземпляра экземпляра во время установки, и дальнейшая процедура активации не потребуется. Если вы не укажете лицензионный ключ, вы можете активировать лицензионный ключ после установки.
  • Просмотрите параметры установки и нажмите ввод, чтобы продолжить установку. Копирование файлов не начинается, пока вы не ответите «Да» (Yes). Стандартная установка устанавливает следующие номера портов для экземпляра Caché:
    • Superserver port number - 1972 или первый доступный последующий номер, равный или превышающий 56773
    • Web server port number - 57772 или первый доступный последующий номер.

Установка компонентов Caché на Linux RPM

Только для платформ Linux InterSystems предоставляет комплекты установки RPM для установки компонентов. Используя эти наборы, вы можете выполнять следующие типы установок Caché:

  • Server
  • Development
  • CSP gateway
  • ODBC client
  • ISCAgent
  • Установка RPM может устанавливать только один экземпляр Caché для каждого хоста и не предоставляет никаких параметров установки.
  • Имя экземпляра всегда CACHE; каталог установки всегда /usr/cachesys.
  • Версия Unicode Caché по определению.
  • Минимальная начальная настройка безопасности.
  • Установка не запрашивает лицензионный ключ.
  • Установив серверный компонент, вы можете использовать другие файлы пакетов для добавления других компонентов.

Установите из соответствующего файла пакета RPM, используя следующую команду:

# rpm -ivh cache-development-2016.2.0.569.0-1.rh.x86_64.rpm

Для обновления из файла пакета RPM используйте следующую команду:

# rpm -U cache-development-2016.2.0.569.0-1.rh.x86_64.rpm

Установка Caché в качестве пользователя не Root

Хотя Caché обычно устанавливается как root, возможно, что экземпляр будет установлен и запущен другим пользователем в системе, у которой root недоступен. Операция Caché в такой среде идентична работе стандартных экземпляров Caché, за исключением следующих:

  • Переменная среды CACHESYS должна быть определена как существующий каталог, доступный для записи пользователем установки, и должен присутствовать во время установки и всех операций экземпляра (cstart, cstop, csession).
  • Экземпляр может использоваться только пользователем установки.
  • Все исполняемые файлы и процессы Caché выполняются как пользователь установки.
  • Все файлы экземпляров, включая реестр, принадлежат и могут быть прочитаны, записаны и выполнены только пользователем установки. Нет доступа к группе.

Реестр находится в каталоге, указанном CACHESYS, а экземпляры nonroot находятся в этом реестре. (Исполняемые файлы ccontrol и csession также находятся в этом каталоге.) Пользователи, которые используют CACHESYS в качестве места реестра для установленных root-экземпляров, не подвержены влиянию. Обратите внимание, однако, что в реестре nonroot могут быть только экземпляры nonroot. Любая попытка получить доступ к стандартным экземплярам из реестра nonroot не удастся. И наоборот, экземпляр nonroot может быть определен в корневом реестре, но попытка доступа к экземпляру любым пользователем, кроме владельца, не будет выполнена.

Установка клиентского Caché

Распространение Caché содержит отдельный скрипт для установки клиентской версии Caché. Процесс установки довольно прост. Вам не нужно устанавливать его как root. Файлы из этой установки имеют пользовательские и групповые разрешения пользователя установки. Чтобы выполнить установку клиента Caché:

  • Запустите процедуру установки, запустив скрипт cinstall_client, расположенный на верхнем уровне установочных файлов:
# /pathname/cinstall_client
  • Выберите из доступных параметров клиентского компонента. Компоненты, которые требуют сервер Caché на одном компьютере, не отображаются в списке. Например:
Client component selection

   [*]    1) ODBC client
   [*]    2) C++ binding
   [*]    3) C++ SDK
   [*]    4) Perl binding
   [*]    5) Python binding
          +) Select all

Enter the number of each component you wish to install.
Enter the number of an already selected component to deselect it.
Multiple selections can be separated by spaces.
Enter a blank line to continue.

Вы можете использовать знак плюса (+) для выбора всех компонентов. Если это обновление и вы удаляете ранее установленный компонент, этот компонент не обновляется и не удаляется. Список клиентских компонентов не включает библиотеки ссылок на движку или легкую привязку C++, поскольку для этих компонентов требуется установка сервера. Вы не можете использовать этот скрипт для обновления клиентских компонентов при установке сервера. Вместо этого используйте скрипт cinstall.

Автоматическая установка Caché

Вы можете выполнить автоматическую установку и обновление экземпляров Caché в своих системах с помощью скрипта cinstall_silent. В то время как стандартная операция установки получает требуемые спецификации и выбор в виде ответов пользователей на запросы, автоматическая операция получает эту информацию из параметров конфигурации и пакетов, указанных в командной строке cinstall_silent. Каждый указанный пакет представляет собой компонент Caché; сценарии установки для каждого компонента содержатся в каталоге пакетов под каталогом, содержащим скрипт cinstall_silent.

Установка Caché на Mac

В этой главе описывается, как установить Caché в систему macOS. Предполагается, что вы знакомы с структурами, утилитами и командами каталогов Mac.

Требования к установке

В этом разделе описываются требования к оборудованию и программному обеспечению для установок Caché.

Требования к дисковому пространству

Стандартная установка Caché, включающая поддержку серверных страниц Caché (CSP), требует примерно 1 ГБ (гигабайт) дискового пространства в зависимости от выбранного вами типа установки.

Поддерживаемые платформы и веб-серверы

Последняя версия Caché поддерживается в операционной системе MacOS на Intel. Для macOS технология серверных страниц Cache (CSP) поддерживается на веб-серверах Apache и Nginx.

Установка Caché UNIX®

Установка Caché на macOS очень похожа на установку на любой платформе UNIX®. Чтобы установить Caché:

  • Получите установочный комплект из InterSystems и установите его на рабочий стол.
  • Введите имя пользователя root. Допустимо su (суперпользователь) для root при входе в систему с другой учетной записи.

Корректировки для большого количества параллельных процессов

Выполните следующие настройки, если вы используете систему, требующую большого количества процессов или логинов telnet:

  • Удаленные соединения. Число подключений pty (псевдотерминала) ограничено 128 общесистемными. Помните об этом, если ваши приложения рассчитывают на telnet или другие соединения, используемые для доступа к файлам pty.
  • Количество процессов. Если ограничение pty не является проблемой, но вам нужно запустить большее количество процессов, есть и ограничения.
    • Общесистемные пределы процесса. Параметры kern.maxproc, kern.maxprocperuid по умолчанию установлены на 532 и 100.

Видео по установке

Источники

  1. InterSystem main site. [2014—2018]. Дата обновления: 2018.1. URL: https://www.intersystems.com/products/cache/.
  2. Introduction to Caché // Caché Documentation. [2014—2018]. Дата обновления: 2017.2. URL: https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GIC.
  3. What Is Caché? // Caché Documentation. [2014—2018]. Дата обновления: 2017.2. URL: https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GIC_intro#GIC_intro_in_action.
  4. Distributed Data Management // Caché Documentation. [2014—2018]. Дата обновления: 2017.2. URL: https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GIC_dbengine#GIC_dbengine_ecp.
  5. Unified Data Dictionary // Caché Documentation. [2014—2018]. Дата обновления: 2017.2. URL: https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GIC_uda#GIC_uda_intro.
  6. Objects // Caché Documentation. [2014—2018]. Дата обновления: 2017.2. URL: https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GIC_uda#GIC_uda_objects.
  7. SQL // Caché Documentation. [2014—2018]. Дата обновления: 2017.2. URL: https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GIC_uda#GIC_uda_sql.
  8. A Closer Look at ObjectScript // Caché Programming Orientation Guide. [2014—2018]. Дата обновления: 2017.2. URL: https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GORIENT_ch_cos.
  9. Installing Caché on Microsoft Windows // Caché Installation Guide. [2014—2018]. Дата обновления: 2017.2. URL: https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCI_windows.
  10. Installing Caché on UNIX®, Linux, and macOS // Caché Installation Guide. [2014—2018]. Дата обновления: 2017.2. URL: https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GCI_unix.