文章 Nicky Zhu · 一月 11, 2021 9m read

简介

许多应用程序都需要记录数据库中的数据变化,包括:哪些数据被更改、更改人和更改时间(审计日志记录) (维基百科audit logging)。 关于这个问题已经有了很多文章,而关于如何在Caché中实现也有很多不同的方法。

本文将介绍一个机制,帮助您实现用一个框架来跟踪和记录数据更改。一旦您的持久类继承自“审计抽象类”(Sample.AuditBase),此机制将通过“objectgenarator”方法创建一个触发器。由于这个持久类继承了Sample.AuditBase,所以当您编译持久类时,将自动生成用于审计更改的触发器。

Audit Class  

这是将记录更改的类。

0
0 437
文章 Nicky Zhu · 一月 11, 2021 5m read

本文将描述通过ObjectScript包管理器(见https://openexchange.intersystems.com/package/ObjectScript-Package-Manager-2)运行单元测试的过程,包括测试覆盖率测量(见https://openexchange.intersystems.com/package/Test-Coverage-Tool)。

ObjectScript中的单元测试

关于在ObjectScript中编写单元测试,已经有很好的文档,因此我就不再赘述了。您可以在这里找到单元测试教程:https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=TUNT_preface

最好的做法是将单元测试代码单独放在源代码树中,无论它只是“/tests”还是其他名字。在InterSystems中,我们最终使用/internal/testing/unit_tests/作为我们事实上的标准,这是有意义的,因为测试是内部/非发布的,而且除了单元测试还有其他类型的测试,但这对于简单的开源项目来说可能有点复杂。您可以在我们的一些GitHub仓库中看到这种结构。

0
0 289
文章 Nicky Zhu · 一月 11, 2021 3m read

当我向技术人员介绍InterSystems IRIS时,我一般会先讲其核心是一个多模型DBMS。

我认为这是其主要优势(在DBMS方面)。数据仅存储一次。您只需访问您想用的API。

  • 您想要数据的概要?用SQL!
  • 您想用一份记录做更多事情?用对象!
  • 想要访问或设置一个值,并且您知道键?用Globals!

乍一看挺好的,简明扼要,又传达了信息,但当人们真正开始使用InterSystems IRIS时,问题就来了。类、表和Globals是如何关联的?它们之间有什么关系?数据是如何存储的?

本文我将尝试回答这些问题,并解释这些到底是怎么回事。

第一部分 模型偏见

处理数据的人往往对他们使用的模型有偏见。

开发者们把数据视为对象。对他们而言,数据库和表都是通过CRUD(增查改删,最好是基于ORM)交互的盒子,但底层的概念模型都是对象(当然这对于我们大多数使用面向对象编程语言的开发者来说没错)。

而DBA大部分时间都在搞关系型DBMS,他们把数据视为表。对象只是行的封装器。

对于InterSystems IRIS,持久类也是一个表,将数据存储在Global中,因此需要进行一些澄清。

第二部分 举例

假设您创建了类Point:

Class try.Point Extends %Persistent [DDLAllowed]
{
    Property X;
    Property Y;
}
0
0 199
文章 Nicky Zhu · 一月 10, 2021 8m read

当您首次使用InterSystems IRIS时,通常只需安装最低安全级别的系统。您输入密码的次数会比较少,这样有利于快速了解和操作开发服务和Web应用程序。而且,最低的安全性有时更便于部署开发项目或解决方案。

然而,有时需要将项目移出开发环境,迁移到一个可能很不友好的互联网环境中。在部署到生产环境之前,需要使用最大的安全设置(即,完全锁定)对其进行测试。这就是我们在本文中将要讨论的内容。

如果想更全面地了解InterSystems Caché、Ensemble和IRIS中的DBMS安全性问题,请阅读我的另一篇文章《在生产环境中安装InterSystems Caché DBMS的相关建议》。

InterSystems IRIS中安全系统的设计概念是针对不同的类别(用户、角色、服务、资源、特权和应用程序)应用不同的安全设置。

image 可以为用户分配角色。用户和角色可以对资源(数据库、服务和应用程序)拥有不同的读、写和使用权限。用户和角色还可以对数据库中的SQL表拥有SQL权限。

0
0 282
文章 Hao Ma · 一月 10, 2021 15m read

自 Caché 2017 以后,SQL 引擎包含了一些新的统计信息。 这些统计信息记录了执行查询的次数以及运行查询所花费的时间。

对于想要对包含许多 SQL 语句的应用程序的性能进行监控和尝试优化的人来说,这是一座宝库,但访问数据并不像一些人希望的那么容易。

本文和相关的示例代码说明了如何使用这些信息,以及如何例行提取每日统计信息的摘要,并保存应用程序的 SQL 性能的历史记录。

记录了什么?

每次执行 SQL 语句时,都记录花费的时间。 这是非常轻量的操作,无法关闭。 为了最大程度地降低开销,统计信息保留在内存中并定期写入磁盘。 数据包括一天中执行查询的次数以及所花费的平均时间和总时间。

数据不会立即写入磁盘,并且在写入之后,统计信息将由“更新 SQL 查询统计信息”任务更新,该任务通常计划为每小时运行一次。 该任务可以手动触发,但是如果你希望在测试查询时实时查看统计信息,则整个过程需要一点耐心。

警告:在 InterSystems IRIS 2019 及更早版本中,不会针对已使用 %Studio.Project:Deploy 机制部署类或例程中的嵌入式 SQL 收集这些统计信息。 示例代码不会有任何中断,但这可能会使你产生误导(我被误导过),让你以为一切正常,因为没有查询显示为高开销。

如何查看信息?

0
0 681
文章 Hao Ma · 一月 10, 2021 11m read

在本文中,我想谈一谈规范优先的 REST API 开发方式。

传统的代码优先 REST API 开发是这样的:

  • 编写代码
  • 使其支持 REST
  • 形成文档(成为 REST API)

规范优先遵循同样的步骤,不过是反过来的。 我们先制定规范(同时兼做文档),然后根据它生成一个样板 REST 应用,最后编写一些业务逻辑。

这是有好处的,因为:

  • 对于想要使用你的 REST API 的外部或前端开发者,你总是有相关且有用的文档
  • 使用 OAS (Swagger) 创建的规范可以导入各种工具,从而进行编辑、客户端生成、API 管理、单元测试和自动化,或者许多其他任务的简化
  • 改进了 API 架构。 在代码优先的方式中,API 是逐个方法开发的,因此开发者很容易失去对整体 API 架构的跟踪,但在规范优先的方式中,开发者被强制从 API 使用者的角度与 API 进行交互,这通常有助于设计出更简洁的 API 架构
  • 更快的开发速度 - 由于所有样板代码都是自动生成的,你无需编写代码,只需开发业务逻辑。
  • 更快的反馈循环 - 使用者可以立即查看 API,并且只需修改规范即可轻松提供建议 让我们以规范优先的方式开发 API 吧!
0
0 406
文章 Hao Ma · 一月 10, 2021 7m read

虽然 Caché 和 InterSystems IRIS 数据库的完整性完全不会受到系统故障的影响,但物理存储设备故障确实会损坏其存储的数据。 因此,许多站点选择运行定期数据库完整性检查,尤其要与备份配合,以验证在发生灾难时是否可以依赖给定的备份。 系统管理员在应对涉及存储损坏的灾难时,也可能强烈需要完整性检查。 完整性检查必须读取所检查的 global 的每个块(如果尚未在缓冲区中),并且按照 global 结构指示的顺序读取。 这会花费大量时间,但完整性检查能够以存储子系统可以承受的最快速度进行读取。 在某些情况下,需要以这种方式运行以尽快获得结果。 在其他情况下,完整性检查需要更加保守,以避免消耗过多的存储子系统带宽。

行动计划

以下概述适合大多数情况。 本文其余部分中的详细讨论提供了采取其中任一行动或得出其他行动方案所需的信息。

0
0 237
文章 Hao Ma · 一月 10, 2021 17m read

RESTful 应用程序编程接口 (API) 设计和文档编制初学者指南。 通过示例,您将学习一些常见的 RESTful API 模式。

在阅读之前

您需要知道

  • 如何在 Ensemble 中创建 RESTful Web 服务
  • 如何在 Ensemble 中使用 RESTful Web 服务
  • 如何传递服务参数
  • 如何返回服务结果

什么是服务 API?

什么是应用程序编程接口? 是具体化的东西吗? 是单一编程单元吗? API 的作用是什么? 在我看来,API 是由程序代码以间接方式决定的。 但完全定义的 API 是由运行可执行程序的容器(由部署设置控制)提供的。 因此,我宁愿将 API 定义为服务的公共描述。 该描述可以是人类可读的,也可以仅机器可读, 或者两者均可。 API 用于与将要使用服务的人员共享有关服务的基本信息。 API 说明了服务的作用、使用环境、功能以及管理的数据结构等。

在过去的好时光,“编制程序文档”或多或少是一种“必要之恶”。 现代编程语言通过在程序源码中引入声明来强制编制文档。 虽然声明是“机器人”可读的文档,但通过使用工具(runoff、Java doc...),可以提取信息并将其格式化成人类可读的格式。 即使没有在源码中添加任何一行真正的文档,这些工具仍然能够生成少量文本。

0
0 202
文章 Qiao Peng · 一月 10, 2021 9m read

Swift-FHIR-Iris

iOS应用程序支持将HealthKit数据导入InterSystems IRIS医疗版(或任何FHIR资源仓库库)

目录

演示目的

目的是创建FHIR协议的端到端演示。

这里的端到端指的是从一个信息源到另一个信息源,例如iPhone。 苹果HealthKit将收集到的健康数据转换为FHIR,再发送到InterSystems IRIS 医疗版存储库。

必须通过web接口访问这些信息。

TL;DR: iPhone -> InterSystems FHIR -> web界面.

如何运行此演示

先决条件

  • 客户端 (iOS)
    • Xcode 12
  • 服务器和Web应用程序
    • Docker

安装 Xcode

这里没有太多要说的,打开AppStore,搜索Xcode,安装。

打开SwiftUi project

0
0 462
文章 Jeff Liu · 一月 8, 2021 3m read

关注开发者社区全栈竞赛的朋友会知道,我提交了一个名为qewd-conduit的参赛作品。我想总结一下,为什么我认为您应该花点时间来看看这个作品。

qewd-conduit 使用基于 Node.js QEWD 框架和 IRIS,可以为 RealWorld Conduit 应用程序实现后端 REST API

https://github.com/gothinkster/realworld

这个方案很酷,它提供了一个平台,让很多人可以为特定应用程序的后端和前端,实现不同的技术解决方案。而qewd-conduit只是符合相同REST API后端规范的众多解决方案之一。同样,要实现完全相同的UI/UX,您可以尝试使用众多不同前端客户端中的任何一个,并通过REST与包括QEWD-Conduit在内的任何Conduit后端集成。

这样就可以用各种不同的框架和技术,去执行完全相同的任务,从而对不同的框架和技术进行比较和对比。

RealWorld应用程序很好地平衡了相关性和非琐碎性(不仅仅是ToDo应用程序!),并且也不是太复杂,无论是在UI/UX还是在后端API方面。因此便于展示和说明如何使用特定技术来实现RealWorld的指定功能。

0
0 166
文章 Jeff Liu · 一月 8, 2021 5m read

你好!

本文简单介绍一款工具,帮您理解InterSystems产品(从IRISCachéEnsemble以及HealthShare)中的类及其结构。

简言之,它将类或整个包可视化,显示类之间的关系,并向开发人员和团队领导提供各种信息,而无需到 Studio 中检查代码。

如果您正在学习InterSystems产品,经常查看项目,或只对InterSystems技术解决方案中的新内容感兴趣,欢迎阅读ObjectScript类浏览器概述!

InterSystems 产品简介

IRIS(之前称为Caché) 是一个多模型DBMS。您可以使用SQL查询来访问它,也可以通过各种编程语言可用的接口与存储的对象和过程进行交互。但最多的还是使用DBMS原生内置语言--ObjectScript (COS) 开发应用程序。

Caché支持DBMS级别的类。有两种主要的类类型:Persistent(可以存储在数据库中)和 Registered(不存储在数据库中,扮演程序和处理程序的角色)。还有几种特殊的类类型:Serial(可集成到持久类中用于创建复杂数据类型(如:地址)的类),DataType(用于创建用户定义的数据类型)、IndexView Stream

进入类浏览器

0
1 517
文章 Nicky Zhu · 一月 8, 2021 2m read

我最近看到有人称 ECP 为魔术。 它似乎确实如此,并且它在许多工程中发挥了相当有趣的作用。 下列各图表简单显示了分布式架构中检索和使用数据的方式。

有关 ECP(包括容量计划)的更多信息,请单击以下链接:数据平台及性能 - 第 7 部分 性能、可伸缩性和可用性 ECP

开始

  • 在磁盘 ^ A、^ B 和 ^ C 上有 3 个globals。
  • Global ^ B 等于 “ B”
  • 有 1 个数据服务器和 2 个或多个应用程序服务器。
  • 下图显示了每个服务器上的缓存(全局缓冲区)。

应用程序服务器 1 上的用户请求 ^ B 的内容,然后序列开始,看看是否可以继续。

有关 ECP(包括容量计划)的更多信息,请单击以下链接:数据平台及性能 - 第 7 部分 性能、可伸缩性和可用性 ECP

0
0 307
文章 Louis Lu · 一月 8, 2021 3m read

在本篇短文中,我们将讨论如何让 Yape 在 docker 容器中运行,从而避免在本地计算机上安装设置 python。

距离本系列的上一篇文章已经有一段时间了,让我们快速回顾一下。

我们讨论了使用 matplotlib 创建基本图形。 之后我们介绍了使用 bokeh 生成动态图形。 在第三部分中,我们讨论了使用 monlbl 数据生成热图

在通过各种渠道获得的反馈中,有一个相同的难题是设置一个环境来运行上面的例子。 所以我们决定让实现变得更容易一些,我与 Murray 合作为他的优秀工具 Yape 创建了一个 Dockerfile。 Github 页面

当然,您必须在您的计算机上安装并运行 docker

Dockerfile

一个相当简单的基于官方 python 映像的 docker 定义:

FROM python:3

WORKDIR .

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

源码

Requirements.txt 包含运行 yape 所需的包:

0
0 226
公告 Nicky Zhu · 一月 8, 2021

现在,InterSystems 系统警报和监视(简称 InterSystems SAM)第 1 版 (v1.0) 发布了预览版本。
  
InterSystems SAM v1.0 为基于 InterSystems IRIS 的产品提供现代化的监视解决方案。 其可对集群进行高级别查看,并且能够以单节点方式可视化深入探视指标,同时提供警报通知。 该第 1 个版本提供对一百多个 InterSystems IRIS 内核指标的可视化,并且用户可以根据自己的喜好扩展默认提供的 Grafana 模板。

V1.0 旨在成为简单直观的基准。 请进行尝试并向我们发送反馈,帮助我们使其变得更棒!

从版本 2019.4 开始,SAM 可以显示来自基于 InterSystems 的实例中的信息

SAM 仅以容器格式提供。 您将需要 SAM 管理器容器,以及一小组额外的开源_组件_(Prometheus 和 Grafana),它们由组合文件自动添加。

可从以下位置获取 SAM 组件和 SAM 管理器社区版

如果您正在旅行,或偏爱通过语音收听有关什么是 SAM 方面的提问与回答,我们为您准备了以下播客:

<iframe class="castos-iframe-player" frameborder="0" height="160" scrolling="no" src="https://5e18edf067eb59-03854285.castos.com/player/198587" width="100%"></iframe>

0
0 202
文章 Qiao Peng · 一月 8, 2021 9m read

众所周知,InterSystems IRIS 提供了很多的工具来提升应用系统可伸缩性。尤其在提升数据并行处理能力方面,InterSystems 做了很多努力,例如在 SQL 查询中使用并行处理,以及在 IRIS中引入最具吸引力的特征:分片(sharding)。然而,许多成熟的开发成果最初是在 Caché中完成的,而且已经迁移到 IRIS 中。这些成熟的开发成果大都使用 DBMS(数据库管理系统)的多模型功能,实现在单独的数据库中共存不同的数据模型。例如, HIS qMS 数据库同时包含语义关系(电子病历)、传统关系(与 PACS 的交互)和层次数据模型(实验室数据以及与其他系统的集成)。这些数据模型大多是通过 SP.ARM 的 qWORD 工具(一种直接访问 Global的小型数据库管理系统)实现的。遗憾的是,由于查询未使用 IRIS SQL,无法利用并行查询处理的新功能进行扩展。

而且,随着数据库规模的不断增长,大型关系型数据库所固有的大多数问题开始出现在非关系型数据库中。这就是我们关注可用于扩展的并行数据处理技术的一个主要原因。

在本文中,我将围绕多年来在解决任务时用到的并行数据处理展开多方位讨论,而这些是我在大数据问题探讨中很少提到的。我将重点讨论数据库的技术改造,或者更确切地说,是数据库转换技术。

0
0 487
文章 Nicky Zhu · 一月 8, 2021 5m read

在本文中,我们将讨论孤立消息。

什么是孤立消息

每个消息正文都与一个保存元数据的消息标头相关联。 标头保存源配置名称、目标配置名称、创建时间、处理时间、关联的消息正文引用、会话信息、消息正文类名、消息状态等信息。 当有消息正文记录没有相应的标头记录时,这些消息正文称为孤立消息正文。 我们将讨论可能导致孤立消息正文产生的原因。

仅清除标头

在清除任务设置中,BodiesToo 设置用于指定是否将消息正文与消息标头一起清除。 如果关闭此设置,清除任务将只删除消息标头,而保留消息正文。 这些消息正文将成为孤立记录,因为所引用的标头已被删除。 如果清除消息标头但保留消息正文,则管理门户将无法清除孤立消息正文。 在这种情况下,必须以编程方式清除消息正文。

 

请参阅有关清除任务的文档

http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=EGMG_purge#EGMG_purge_basic

复杂的消息正文类(对象值属性)

当 Ensemble 清除某条消息正文时,不一定删除该消息正文的对象值属性。 具体来说,只有当其他对象是序列对象或子对象(由关系定义)时,才会删除这些对象。 对于其他对象,必须通过在消息正文类中定义删除触发器或实现 %OnDelete() 方法来适当地处理删除。

OnDelete 实现的示例代码

0
0 312
文章 Louis Lu · 一月 7, 2021 4m read

在 Caché 中处理 SOAP 请求时,有时需要通过直接访问(有时是编辑)所发送的 XML(即 SOAP 请求和随后的 SOAP 响应)来调试错误。 如果要调试 Caché Web 服务,使用 SoapUI (https://www.soapui.org/) 之类的工具手动创建和控制 SOAP 请求通常很有用,这样可以很容易地在 Caché Web 服务上看到调整的效果。

但是如果已经有 Web 服务(可能不是 Caché),并且想要调试相关的 Caché Web 客户端该怎么办? 您可能已将 SOAP 响应 XML 保存在文件中(例如 Caché SOAP 日志),您需要一个“虚拟”Web 服务将其发送到 Caché Web 客户端,就像实际的 Web 服务一样操作。

由于我经常在技术支持的过程中需要调试客户的 Caché Web 客户端,我创建了这样一个“虚拟”的Web 服务 – 见下文:

0
0 372
文章 Louis Lu · 一月 7, 2021 3m read

本文介绍了 InterSystems 客户围绕 SDDC 和 HCI 解决方案的注意事项。

采用软件定义数据中心 (SDDC) 和超融合基础架构 (HCI) 解决方案的 InterSystems 客户需要重点关注的事项

越来越多的 IT 组织正在探究使用SDDC 和 HCI 解决方案的可行性。 这些解决方案看上去很有吸引力,其市场定位为跨异构数据中心和云基础设施可以使得 IT 管理更容易、投入的成本花费更少。 对于 IT 组织来说,潜在的好处是巨大的,许多 InterSystems 客户正在拥抱 SDDC、HCI 或两者兼有。

如果您正在考虑 SDDC 或 HCI 解决方案,请联系您的销售客户经理或销售工程师,安排与技术架构师的通话。 这对于确保成功非常重要。

这些解决方案具有高度的可配置性,组织可以从许多软件和硬件的组合中自由选择。 我们看到了我们的客户使用各种 SDDC 和 HCI 解决方案,通过这些经验,我们意识到,仔细考虑解决方案配置以避免风险是非常重要。 在某些情况下,有些客户的实施不符合关键事务型数据库系统所需的性能和弹性需求。 这导致了应用性能不佳和意外停机的出现。 如果客户的目标是为关键事务型数据库系统提供高弹性和低延迟的存储能力,则组件的选择和配置需要针对您的情况进行仔细考虑和规划,包括

  • 选择适当的组件
  • 正确配置这些组件
  • 使用适当的操作步骤
0
0 322
文章 Jeff Liu · 一月 7, 2021 28m read

Google Cloud Platform (GCP) 为基础架构即服务 (IaaS) 提供功能丰富的环境,其作为云提供完备的功能,支持所有的 InterSystems 产品,包括最新的 InterSystems IRIS 数据平台。 与任何平台或部署模型一样,必须留心以确保考虑到环境的各个方面,例如性能、可用性、操作和管理程序。 本文将详细阐述所有这些方面。

0
0 1162
文章 Jeff Liu · 一月 7, 2021 20m read

假设你想了解 InterSystems 在数据分析方面能提供什么。 你研究了理论,现在想要进行一些实践。 幸运的是,InterSystems 提供了一个项目:Samples BI,其中包含了一些很好的示例。 从 README 文件开始,跳过任何与 Docker 相关的内容,直接进行分步安装。 启动虚拟实例 安装 IRIS,按照说明安装 Samples BI,然后用漂亮的图表和表格让老板眼前一亮。 到目前为止还不错。

但是不可避免地,你需要进行更改。

0
0 505
文章 Jeff Liu · 一月 7, 2021 6m read

这次我想谈一谈不专门针对 InterSystems IRIS 的东西,不过如果你想使用 Docker,并且你工作环境是安装了 Windows 10 专业版或企业版的 PC 或笔记本电脑,那么我认为这个很重要。

你可能知道,容器技术基本上来自于 Linux 世界,如今在 Linux 主机上发挥出最大潜能。 那些平常使用 Windows 的人会看到,Microsoft 和 Docker 在过去的几年做出了重要的努力,让我们可以在 Windows 系统上以非常简单的方式运行基于 Linux 映像的容器... 但是生产系统不支持这种方式,这是个大问题,如果我们要将持久性数据保留在主机系统中的容器之外,这样做非常不可靠... 这主要是由于 Windows 和 Linux 文件系统之间的巨大差异导致的。 最终,_Docker for Windows 自身使用了一个小型 linux 虚拟机 (MobiLinux) 来运行容器... 此操作对于 Windows 用户是透明的,而且效果完美,只要你不需要你的数据库比容器存活的时间更长...

0
0 1096
公告 Claire Zheng · 一月 7, 2021

亲爱的社区用户,您好!

您知道吗,在 Global Masters,您可以兑换关于以下任何 InterSystems 产品的 InterSystems 专家咨询:InterSystems IRIS数据平台、IRIS医疗版、互操作平台 (Ensemble)、IRIS Analytics (DeepSee)、Caché、HealthShare统一的健康档案。

我们还有一个振奋人心的消息要分享,我们现在可以提供以下语言的咨询:

英语、葡萄牙语、俄语、德语、法语、意大利语、西班牙语、日语、汉语

而且! 咨询时长延长到 1.5 小时,让您与专家深入探讨主题。

0
0 168
文章 Jeff Liu · 一月 7, 2021 5m read

非常高兴地宣布,InterSystems 容器注册表现在可以使用了。 这为客户访问基于容器的版本及预览提供了新的渠道。 所有的社区版像都可在公共存储库中找到,且无需登录。 所有完整发布的像(IRIS、IRIS for Health、Health Connect、System Alerting and Monitoring、InterSystems Cloud Manager)和实用程序镜像(例如,仲裁器、Web 网关和 PasswordHash)都需要登录令牌,该令牌从 WRC 帐户生成。

0
0 214