新增
文章 Nicky Zhu · 二月 13 8m read

我有一个新项目,要将 REST 响应中的信息存储到 IRIS 数据库中。我需要同步来自至少二十几个不同 REST 端点的信息,这意味着需要创建将近这么多的 ObjectScript 类来存储来自这些端点的结果。

我能否使用 ChatGPT 来创建这些类?答案是 "可以",这非常好,因为这是我第一次尝试使用生成式人工智能来做一些有用的事情。生成长颈鹿喝汤的图片有点老....。

我是这么做的:

  • 使用 "curl "查询端点,获取一些 JSON REST 调用输出示例。
  • 访问 ChatGPT(InterSystems 为员工提供全公司范围的许可证)
  • 与 ChatGPT 进行以下对话。

我在 "Message ChatGPT "提示符中输入了以下请求:

我:Generate an ObjectScript class that will hold data from the following JSON(生成一个 ObjectScript 类,用于保存以下 JSON 中的数据):

在输入 JSON 之前,我点击了 "Return",因此 ChatGPT 给我的提示如下:

ChatGPT:Please provide the JSON structure you'd like me to generate the ObjectScript class for.

0
0 26
新增
文章 Nicky Zhu · 二月 11 3m read

InterSystems IRIS 的架构将数据的逻辑组织(命名空间)与其物理存储位置(数据库)分开。理解这种分离以及命名空间和数据库之间的区别对于有效的数据管理、安全性,尤其是高性能数据共享至关重要。

在本文中,我将讨论这些基础组件,并提供利用全局映射跨不同逻辑环境共享本地数据结构(全局)的实用指南。

数据库:物理现实

数据库代表了数据存储在磁盘上的物理现实。首先,它是文件系统中名为 IRIS.dat 的文件(例如,<安装文件夹>\mgr\user\IRIS.DAT )。该文件的最大容量为 32TB。它是所有实际数据和代码的容器。数据库由 IRIS 内核管理,它在物理文件级别处理缓存、日志和事务日志。

安装 InterSystems IRIS DBMS 时,会自动安装以下数据库:

0
0 15
文章 Nicky Zhu · 一月 29 2m read

我曾多次遇到一种模式,即我需要使用临时文件/文件夹,并在稍后的某个时候将其清理掉。

在这种情况下,自然是遵循"Robust Error Handling and Cleanup in ObjectScript "中的模式,使用 try/catch/pseudo-finally 或注册对象来管理析构函数中的清理工作。%Stream.File*也有一个 "RemoveOnClose "属性,您可以对其进行设置,但要小心使用,因为您可能会不小心删除一个重要文件,而且这个标志会在调用%Save()时被重置,因此您需要在重置后将其设回 1。

不过,有一个棘手的情况——假设你需要临时文件在外部堆栈级别中继续存在。例如:

0
0 15
文章 Nicky Zhu · 一月 27 9m read

InterSystems IRIS 数据平台是所有 InterSystems 应用程序以及医疗保健、金融服务、供应链和其他生态系统中数以千计的客户和合作伙伴应用程序的基础。它是一个融合平台,提供交易分析数据管理、集成互操作性和数据集成,以及集成分析和人工智能。它支持 InterSystems Smart Data Fabric 方法,用于管理多样化的分布式数据。

0
0 57
文章 Nicky Zhu · 一月 20 3m read

不可避免的是,您最终需要将您的代码从一个版本的 IRIS 或 Cache 升级到最新版本的 IRIS。在这一过程中,您可以采取一些好的步骤来为自己的成功做好准备。

仔细阅读文档

在迁移任何代码之前,你应该先查看IRIS 文档页面,其中包含许多关于IRIS不同版本变更的有用资源。如果你需要跨多个版本升级,请查阅所有相关版本的文档,而不仅仅是目标升级版本。对于每个版本,点击“维护版本变更”(Maintenance Release Changes)链接,你将看到一份开发人员升级清单,对指导你需要进行的修改非常有帮助。你还应查看“发布说明”(Release Notes),其中列出了可能对你有用的新功能,以及已被弃用的功能。此外,建议访问“产品新闻与警报”(Product News and Alerts)页面,以获取最新的紧急事项。事实上,即使不进行升级,定期查看该页面或订阅警报通知也是个好主意,以便及时了解变更。

了解你的替代方案

根据你在文档中阅读到的内容,你可能会看到一堆问题。不过,在开始处理这些问题之前,您应该花些时间了解一下有哪些替代方案。如果您喜欢使用的特定 ObjectScript 类已被弃用或移除,那么如果您打算使用集成的 Python,就不要只寻找 ObjectScript 的替代品。如果您是 Zen 报表的用户,InterSystems Reports

0
0 48
文章 Nicky Zhu · 十二月 26, 2025 9m read

大家好!
在本文中,我们将在 InterSystems IRIS 的背景下探讨动态 SQL(Dynamic SQL嵌入式 SQL(Embedded SQL ) 的概念,提供实际示例, 研究 它们的区别 ,以帮助您了解如何在应用程序中利用它们。

InterSystems SQL 提供全套标准关系功能,包括定义表模式、执行查询、定义和执行存储过程。您可以通过管理门户交互式地执行 InterSystems SQL,也可以使用 SQL shell 界面以编程方式执行 InterSystems SQL。嵌入式 SQL 使您可以在 ObjectScript 代码中嵌入 SQL 语句,而动态 SQL 使您可以在运行时从 ObjectScript 执行动态 SQL 语句。 静态 SQL 查询提供可预测的性能,而动态和嵌入式 SQL 则分别提供灵活性和集成性。

0
0 49
文章 Nicky Zhu · 十二月 25, 2025 4m read

当我开始使用 InterSystems IRIS,尤其是在互操作性方面时,我最初遇到的一个常见问题是:如何在间隔时间或计划内运行某项功能?在本专题中,我想分享两个简单的类来解决这个问题。我很惊讶在 EnsLib 的某个地方没有找到类似的类。也许是我搜索得不好?总之,这个主题并不意味着是复杂的工作,只是为初学者提供了几个片段。

0
0 84
文章 Nicky Zhu · 十二月 23, 2025 5m read

什么是 JWT?

JWT (JSON Web Token,JSON 网络令牌)是一种开放标准(RFC 7519),它提供了一种轻量级、紧凑、自足的方法,用于在双方之间安全地传输信息。它常用于网络应用程序中的身份验证、授权和信息交换。

JWT 通常由三部分组成:

1.JOSE(JSON Object Signing and Encryption,JSON 对象签名和加密)标头
2.有效载荷
3.签名

这些部分以 Base64Url 格式编码,并用点(.)分隔。

JWT 的结构

标题

{ "alg": "HS256", "typ": "JWT"}

有效载荷

{"sub": "1234567890", "name": "John Doe", "iat": 1516239022}

签名
签名用于验证 JWT 的发件人是否为其本人,并确保信息未被篡改。

创建签名

1. base64 编码报头和有效载荷。
2.使用秘钥(对于对称算法,如 HMAC)或私钥(对于非对称算法,如 RSA)应用签名算法(如 HMAC SHA256 或 RSA)。
3.对结果进行 Base64Url 编码,以获得签名。

JWT 样本。查看JWT 内容

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI




0
0 118
文章 Nicky Zhu · 十一月 26, 2025 4m read

 

您检查了服务器,发现IRISTEMP增长过快。不必惊慌。让我们在存储空间耗尽之前调查一下这个问题

步骤 1:确认 IRISTEMP 增长问题

在假设 IRISTEMP 是问题所在之前,让我们先检查一下它的实际大小。

检查可用空间

IRIS 终端运行以下命令:

%SYS>do ^%FREECNT

出现提示时,输入

Database directory to show free space for (*=All)? /<your_iris_directory>/mgr/iristemp/

如果输出结果显示可用空间非常小,则IRISTEMP 正在像拥挤的壁橱一样占满您的存储空间。但是,如果可用空间没有问题,但 IRISTEMP 数据库文件 (IRIS.DAT) 仍然很大(这可能就是你来这里的原因),这意味着临时数据已经被清理。在这种情况下,你的任务就是密切关注,按照下面的步骤在下一次行动中抓住它,并恢复宝贵的空间。

第 2 步:确定 IRISTEMP 的用途

运行 ^%GSIZE 查找大型全局文件

%SYS>do ^%GSIZE

按照提示操作:

Directory name: /<your_iris_dir>/mgr/iristemp/

All Globals? No => yes

33 items selected from
33 a
0
0 93
文章 Nicky Zhu · 十一月 20, 2025 4m read

InterSystems IRIS中的窗口函数(Window Functions)可让您直接在SQL中执行强大的分析操作,例如累计总和、排名和移动平均值等。 这些函数针对与当前行相关的一组行(即“窗口”)进行操作,且不会像 GROUP BY那样合并结果。 这意味着您可以编写更简洁、更快速且更易于维护的查询——无需循环、无需连接、无需临时表。 在本文中,我们将通过处理一些常见的数据分析任务来了解窗口函数的作用机制。


InterSystems IRIS中的SQL窗口函数入门

SQL窗口函数(SQL window functions)是数据分析的强大工具。 它们允许你在保留各行列可见性的同时,跨行计算聚合值和排名。 无论你是在构建仪表盘、报表还是进行复杂分析,窗口函数都能简化你的逻辑并提升性能。

注:我并非窗口函数领域的专家,但我愿意分享助我理解窗口函数的心得体会和相关资源。非常欢迎大家提出建议或进行指正!


🚀 为什么窗口函数这么重要

你是否曾为了计算累计总和、排名或行间差值,而编写过多条SQL查询语句,甚至使用过程化循环?

窗口函数能让你仅通过一条SQL查询语句就实现所有这些操作。

它们将强大的分析功能直接融入SQL——无需额外连接操作、无需临时表,也无需过程化循环。


🧠 什么是窗口函数

窗口函数会针对一组与当前行存在某种关联的行进行计算——这组行被称为窗口(window)


















Window function evaluation - example 3




0
0 54
文章 Nicky Zhu · 十月 31, 2025 20m read

目录

  1. 本文目的
  2. 什么是容器,它们为什么对 IRIS 有意义
     2.1 容器和镜像简介
     2.2 为什么容器对开发者很有用
     2.3 为什么 IRIS 可以很好地与 Docker 配合使用
  3. 先决条件
  4. 安装 InterSystems IRIS 镜像
     4.1 使用 Docker Hub
     4.2 拉取镜像
  5. 运行 InterSystems IRIS 镜像
     5.1 启动 IRIS 容器
     5.2 检查容器状态
     5.3 在容器终端执行代码
     5.4 访问 IRIS 管理门户
     5.5 将容器连接到 VS Code
     5.6 停止或移除容器
     5.7 使用绑定挂载设置特定密码
     5.8 使用持久化 %SYS 卷
      5.8.1 可以使用持久化 %SYS 存储什么
      5.8.2 如何启用持久化 %SYS
  6. 使用 Docker Compose
     6.1 Docker Compose 示例
     6.2 运行 Docker Compose
  7. 使用 Dockerfile 运行自定义源代码
     7.1 Dockerfile 示例
     7.2 Docker Compose 示例
     7.3 了解层、镜像标记和构建与 运行时
     7.4 源代码和初始化脚本
     7.5 使用 Dockerfile 构建镜像
     7.6 在容器化 IRIS 终端中运行指令
  8. 结语和未来计划
1
0 74
文章 Nicky Zhu · 十月 28, 2025 4m read

简介

在现代应用程序中,尤其是那些涉及大型数据、文档、日志或多媒体的应用程序,高效地处理大型或非结构化内容变得至关重要。 InterSystems IRIS 提供了一种强大、可扩缩的方式来使用流对象管理此类数据。

流对象可以让开发者在处理大型文本或二进制数据时不受字符串大小上限或内存效率低下的影响。 在本文中,我们将探讨如何使用 ObjectScript 在 IRIS 中创建、读取、写入、存储和操作流对象。


IRIS 中的流对象是什么?

InterSystems IRIS 在 %Stream 软件包下提供了内置流类,用于表示可以增量读取或写入的字符或字节序列。 这些流在处理以下内容时特别有用:

  • 文本文档(日志、报告等)
  • 二进制文件(图像、PDF)
  • 大型 API 有效负载(文件上传/下载)
  • 超出字符串上限 (~3.6MB) 的持久类属性

流类型

流类型用例
字符流%Stream.GlobalCharacter%Stream.FileCharacter大型文本数据
二进制流%Stream.GlobalBinary%Stream.FileBinary图像、PDF、二进制文件

创建并写入流

下面介绍了如何创建和写入全局字符流

 

Set stream = ##class(%Stream.GlobalCharacter).%New() Do














0
0 41
文章 Nicky Zhu · 十月 28, 2025 9m read

技术文档 — Quarkus IRIS Monitor System

1. 目的与范围

此模块支持在基于 Quarkus 的 Java 应用程序与 InterSystems IRIS 的原生性能监控功能之间进行集成。
它使开发者可以通过 @PerfmonReport 对方法添加注释,这样可以在执行方法时自动触发 IRIS 的 ^PERFMON 例程,以生成性能报告,而无需人工干预。


2. 系统组件

2.1 注释:@PerfmonReport

  • 定义为 CDI InterceptorBinding
  • 可应用于方法或类。
  • 指示使用 IRIS 监控逻辑包装方法执行的框架。

2.2 拦截器:PerfmonReportInterceptor

  • 拦截对带注释的方法的调用。

  • 执行流程:

    1. 记录启动事件 (LOG.infof("INIT: …"))
    2. 调用 monitorSystem.startPerfmon()
    3. 继续执行 context.proceed()
    4. finally 块中:
      • 调用 monitorSystem.generateReportPerfmon(...)
      • 调用 monitorSystem.stopPerfmon()
      • 记录结束事件及执行时间
  • 确保即使抛出异常,监控也始终结束。

2.3 DAO Bean:MonitorSystem

  • 带有 @Applicat









image

0
0 41
文章 Nicky Zhu · 十月 28, 2025 2m read

InterSystems 常见问题解答标题

^%GCMP 实用工具可用于比较两个全局变量的内容。

例如,要比较 USER 和 SAMPLES 命名空间中的 ^test 和 ^test,过程将与下面类似:
*以下示例在这两个命名空间中创建了 700 个相同的全局变量,并更改了其中一个的内容,使其成为检测目标。

USER>kill^test
USER>for i=1:1:100 { forj=1:1:7 { set^test(i,j)="Test"_i } }

USER>zn"samples"// change namespace to SAMPLES SAMPLES>kill^test SAMPLES>for i=1:1:100 { forj=1:1:7 { set^test(i,j)="Test"_i } }

SAMPLES>set^test(50,5,1)=1// Change one of the globals created in the SAMPLES namespace. SAMPLES>do^%GCMP Compare global ^test// Global to compare. on directory set: (this system) // Enter

0
0 59
文章 Nicky Zhu · 一月 22, 2025 2m read

近期有些小伙伴需要查询某张特定的表所占用的磁盘大小,可能其他小伙伴也有类似的需求。

给大家一个例子供参考。

应当考虑到IRIS的表底层使用global存储数据,包括表数据、索引数据和流数据(如果表中有流属性的话),因此一张表的完整占用应当包含至少上述三种global的求和,如下所示:

Class GlbUtil.GlobalSearch Extends%RegisteredObject
{



ClassMethod GetTableSize(databaseName As%String, tableName As%String) As%Integer [ SqlProc ]

{

set currentNS = $namespace//在%SYS命名空间中用API获得数据库的文件所在的路径zn"%SYS"set bdDirectory = $replace(##Class(Config.Databases).DatabaseByName(databaseName),"^","")

//回到表所在的命名空间,通过API获得表存储数据所用的global名称zn currentNS

set totalSize = 0set dataSize = 0set idxSize = 0set streamSize =

0
1 205
文章 Nicky Zhu · 十月 10, 2024 7m read

本演示程序用于展示如何采用自定义FHIR profile来验证数据合规性。自定义FHIR实施指南基于FHIR R4版本开发,在本例中实现了对Organization资源的扩展并用于验证数据的合规性。

安装

  1. 通过Git clone下载本项目。
  2. 执行docker-compose up -d构建并启动容器,初次执行时需执行需10~15分钟(视配置变化)。将构建InterSystems IRIS for Health镜像,安装FHIR服务器,导入自定义FHIR规范,使自定义FHIR 规范可用于验证数据。
  3. 在Postman中导入TestCases中的测试用例文件,查看各类FHIR约束的测试效果
  4. 容器启动后可查看自定义IG内容

项目代码结构

FHIRValidation
├─ ExampleIG                        
│  ├─ ig.ini
│  ├─ input
│  │  ├─ fsh
│  │  │  ├─ alias.fsh
│  │  │  ├─ codesystems.fsh
│  │  │  ├─ organization.fsh
│  │  │  └─ valuesets.fsh
│  │  └─ pagecontent
│  │     └─ index.md
│  └─ sushi-config.yaml
├─ README.md
├─ RE
0
0 203
文章 Nicky Zhu · 九月 23, 2024 2m read

演示程序

使用向量搜索在 IRIS for Health 上运行的病人相似性比较演示。 使用向量搜索计算相似度,在向量基础上比较不同病人之间的个人属性,如姓名、出生日期、地址等。得分越高,被比较的病人越有可能是同一个人。 本演示程序使用 sentence-transformers model 将文本转换为向量,然后使用 IRIS 向量函数来存储、读取和比较向量。

流程原理

image

安装

  1. 使用Git克隆存储库
  2. 演示程序将使用text2vec-base-chinese。你也可以下载任何你想要的transformer模型,并将其存储到一个 本地路径中,如 D:\Coding\EMPIDemo\image-iris\llm\text2vec-base-chinese ,然后在 docker-compose.yml 文件的 volumes 部分更改目录指向本地模型根目录。
  3. 启动Docker容器 请注意,程序将下载并安装 Python sentence-transformers模块,并安装 FHIR 存储库以存储患者信息,因此将占用大约 15~16GB 磁盘存储空间。

运行演示

  1. 访问WebUI
  2. 处理数据的IRIS Procuction
  3. 相关代码 嵌入式 python 用于调用sentence-transformers来执行向量化,可在 EMPIDemo.Util.Vector 中找到。 向量
0
0 131
文章 Nicky Zhu · 六月 29, 2024 8m read

通过 REST API 将前端 React 应用程序与 IRIS 数据库等后端服务集成,是构建健壮网络应用程序的强大方法。但是,开发人员经常遇到的一个障碍是跨源资源共享(CORS)问题,由于网络浏览器强制执行的安全限制,该问题可能会阻止前端访问后端的资源。在本文中,我们将探讨在将 React Web 应用程序与 IRIS 后端服务集成时如何解决 CORS 问题。

创建Schema

我们首先定义一个名为 Patients 的简单Schema:

Class Prototype.DB.Patients Extends %Persistent [ DdlAllowed ]
{

Property Name As %String;

Property Title As %String;

Property Gender As %String;

Property DOB As %String;

Property Ethnicity As %String;
}

您可以在表中插入一些虚假数据进行测试。我个人认为 Mockaroo 在创建假数据时非常方便。它可以让你把虚拟数据下载为 .csv 文件,直接导入管理门户。

定义 REST 服务

然后,我们定义几个 REST 服务

Class Prototype.DB.RESTServices Extends %CSP.REST
{

Parame

image

0
0 256
文章 Nicky Zhu · 十二月 27, 2023 7m read

在医疗行业中,处方是个非常重要的临床工作数据概念。因此,在考察用FHIR能如何构造我国所需医疗行业数据模型时,就会需要考虑如何用FHIR表达处方。

 

在2019年,FHIR的工作组已否认需要使用特定的资源来表达处方(不是药嘱)这个概念,见:

https://jira.hl7.org/browse/FHIR-24905

奇妙的是,IHE规范中却明确有处方(Prescription)的定义并需要引用药嘱(Medication Treatment Plan Item)。

https://www.ihe.net/uploadedFiles/Documents/Pharmacy/IHE_Pharmacy_Suppl_PRE.pdf?#page=12

 

FHIR官网指出这种复合式的request有三种表达方式:

• Shared requisition id

• "Based on" chain

• RequestOrchestration

https://build.fhir.org/request.html#compound

 

在FHIR实际应用中,则可以见到多种形态使用容器类资源表达处方并包含药嘱的表达形式,例如:

  1. 中国2023 FHIR Connectathon中使用消息Bundle来进行处方流转

http://wiki.hl

0
0 249
文章 Nicky Zhu · 五月 9, 2023 5m read

在上一篇文章中,我们看到了如何捕获位于我们服务器上一个文件夹中的DICOM类型的文件,以及如何将它们发送到PACS软件(在我们的案例中是ORTHANC开源解决方案)进行存储和咨询。那么,在这篇文章中,我们要处理的是相反的动作。

在我们的例子中,我们将配置我们的IRIS for Health Prodcution,以接收从我们的PACS通过TCP/IP发送的图像。要做到这一点,我们必须包括一个标准EnsLib.DICOM.Service.TCP类的业务服务,它将允许我们配置接收端。让我们来看看这个配置:

如您所见,我们已经声明了将监听的端口,通过该端口将接收从 PACS 发送的图像。我们还配置了本地 AET (Application Entity Title,应用实体名称)(IRIS) 和将向我们发送 DICOM (ORTHANC) 的 PACS,请记住这些字段是强制性的,并且将用于检查发送和接收 DICOM 消息的有效性。不要忘记必须从 DICOM 设置菜单配置和关联两个 AET:

正如你所看到的,我们已经配置了从IRIS到ORTHANC(前一篇文章的案例)和从ORTHANC到IRIS(本文中的案例)的信息发送。确认你已经为这两个关联上下文配置了你在两个系统中发送和接收的DICOM图像类型的演示上下文。

最后,表明我们已经用目的地组件定义了参数,我们将把PACS发送


1
0 328
文章 Nicky Zhu · 一月 6, 2023 8m read

国务院于2022年12月19日发布了《中共中央 国务院关于构建数据基础制度更好发挥数据要素作用的意见》(后简称《数据二十条》),如何有效利用数据已经成为下一步的趋势。另一方面,无论是基于数据中台还是数据编织理念,两者也都对如何利用数据提出了构想。因此医疗行业数字化建设的目标已不能再局限于如何收集数据,建立医疗行业数据的流通机制将会是为越来越普遍的需求。

时钟拨回几年前,数据中台概念开始火爆。人们对数据中台的定义、诠释尽管有诸多差异,通过数据中台降低数据共享和利用的成本则是共同的期望。但经过这几年的探索之后,中台已死的观点也在涌现。究其原因,除去中台概念在技术上的不确定,数据流通过程中的责权益的不清晰也是严重的制约因素。毕竟,数据中台自身作为一套技术框架并不能代替法律法规与市场自动将数据转变为商品从而创造出流通价值。

那么,如何能够使数据的流通合规合法,使数据能够如货币和商品一般自由流动,则是我们需要思考和探索的主题,这次《数据二十条》的出现,无疑为医疗信息技术工作者提供了一个明确的思考方向。

0
0 358
文章 Nicky Zhu · 十月 10, 2022 4m read

在生产环境中IRIS通常以故障转移集群的形态被部署,而集群中各故障转移成员的镜像状态将决定该集群在故障发生时是否能够顺利切换保障业务不中断。因此,成员状态通常也是运维团队需要巡检或监控的目标。

尽管IRIS内部API提供了丰富的集群配置、成员状态监控等一系列接口,但除Portal上的镜像监视器外,并没有特定的接口便于从外部系统访问(如进行企业级监控集成时),也没有整合好的监控接口可用与获取镜像的健康状态。但在IRIS上开发一个REST接口暴露镜像状态数据并不困难,如下所示:

Include %syMirrorClass Monitor.MirrorMonitoring Extends%CSP.REST
{

/// Default the Content-Type for this application.Parameter CONTENTTYPE = "application/json";/// By default convert the input stream to UnicodeParameter CONVERTINPUTSTREAM = 1;/// The default response charset is utf-8Parameter CHARSET = "utf-8";ClassMethod GetMirrorStatus

0
0 301
文章 Nicky Zhu · 八月 10, 2022 3m read

在互操作功能运行过程中,IRIS可以识别异常情况的发生,自动生成告警事件并通过预制的互操作组件将告警转发给干系人;另外,IRIS也内建了告警工作台,可供运维团队基于工作流实现对告警的管理。

告警设置与转发

Production告警设置

Production级别可以设置对连接异常的告警设置,及告警组件设置

组件告警设置

  • 控制何时触发警报。
    • 队列计数警报。
      • 队列中的信息数量
    • 队列等待警报。
      • 消息在队列中停留的秒数
    • 不活动超时。
      • 业务组件不活动的秒数
      • v2012.1之前,不会触发告警

警报宽限期

    • 与外部连接有关的错误可以有宽限期设置
      • 设置重新建立连接的时间,超时且连接不成功才会发出告警
    • 业务服务
      • 警报宽限期
    • 业务操作
      • 再次发出警报宽限期

转发告警

    • EnsLib.EMail.AlertOperation
      • 内置告警转发组件
        • 通过Email转发
    • 路由到其他接口转发
      • REST - 短信
      • REST - 钉钉
    • 用户需要执行的规划
      • 什么样的告警需要即时通知
      • 告警的通知是否应该成为一个应用

包含告警组件的Production

包含告警组件与业务组件的Production形态如下

其中,用

3
0 188
文章 Nicky Zhu · 八月 10, 2022 8m read

Production是开发者基于InterSystems IRIS产品家族实现互操作功能的主要技术架构。而每个Production的运行依赖于三类主要的业务组件:

  • 业务服务(Business Service)
  • 业务流程(Business Process)
  • 业务操作(Business Operation)

三类组件间以消息作为信息交换的主要媒介。因此,要保障互操作业务的稳定运行,除保障软件平台有充足的软硬件资源运行外,保障Production中消息的高效传输以及三类组件的平稳、高效运行则是运维团队面临的主要目标。下面列举的若干项任务则有助于运维团队实现这些目标:

优化业务组件运行效率

Production中的业务组件都有运行池的概念,允许业务组件运行在多个进程上并发工作以提高整体性能。运行池又可以分为私有池和参与者池两类。

私有运行池

    • 业务组件的CPU作业的数量
      • 默认为1即可工作
      • 通过性能测试确定最佳的池大小
      • 拥有私有池的业务组件从私有队列中处理消息
    • 无适配器业务服务的池大小需设置为0
    • 需要多进程时,池大小设为1可以保证信息以先进先出(FIFO)顺序处理
      • 整个消息流中的所有业务组件的池大小都不应大于1

参与者池

    • Production级的参与者池设置
      • 用于处理公共队


0
0 317
文章 Nicky Zhu · 八月 10, 2022 4m read

InterSystems 数据平台的互操作功能与久经考验的EnsembleHealthConnect集成引擎产品一脉相承。事实上,使用IRIS的典型客户不但应用了IRIS提供的多模型数据存储、分布式存储等数据存储特性,也广泛地应用如可视化数据转换,可视化数据流程编辑和可视化规则引擎等一系列互操作能力构建异构系统间或组织机构间的数据流程。

那么,在生产环境上,如何监控与评估数据流程的运行状况,在发生问题时如何快速定位并解决故障,就是用户的运维团队需要考虑的问题。

本系列文章将围绕IRIS互操作功能中核心的互操作消息管理,Production管理与优化及互操作告警与通知三个方面介绍互操作功能的运维基础知识和常用技巧,希望能够帮助客户平稳、高效地运用数据平台。

注:本文提到的InterSystems数据平台,包括Caché数据库、Ensemble集成平台、HealthConnect医疗版集成平台和InterSystems IRIS数据平台。

互操作消息管理

消息是互操作功能中各组件间通信的基本方法,在互操作Production业务服务、业务流程和业务操作之间广泛使用。

除承担信息传递的基本功能外,由于常常需要在生产环境中查看消息内容或重发消息以解决问题,消息检索就是大家最常用到的功能,而IRIS特有的结构化消息存储也为开发和运维团队使用和管理消息创造了便利。用户能够通过消息

0
1 427
文章 Nicky Zhu · 五月 7, 2022 3m read

我们的一位客户五一期间向使用IRIS搭建的数据流推送一家三甲医院数年的历史数据,导致实施的同事们经历了一系列噩梦,包括但不限与:

1. 由于未通知实施团队有这样规模的数据推送,数据推送过程与全库备份任务重叠。尽管实例和数据流正常运行,但备份任务与数据流争抢IO,导致备份任务不能在预期时间内完成,实施童鞋五一加班处理问题。

2. 为了节省磁盘空间,服务器上部署了定期删除IRIS备份文件的任务,原本能够保持一周的全备+增量备份,但在本次数据暴增的情况下,新的备份尚未完成而旧的全备已被删除,导致问题发生时没有可用于恢复的备份。

3. 由于这次数据推送前未进行数据质量校验,推送的数据全部不合规,但已经历了较长的数据流进行处理全部入库;同时由于备份文件已被删除,无法通过恢复数据库的方法回滚,导致实施童鞋不得不逐条从生产环境三个库的数百张表中挑出问题数据逐一删除,从五一放假结束至今还未完成善后工作。大家可以设想一下,如果备份还在,那么恢复备份就可以了。

因此,我们希望再次提醒各位在前线奋斗的亲们:

1. 善待你的备份。尽管对于大型医院或医疗集团来说,两周的全备+增量备份策略下,备份文件会占据数个TB的存储空间。但在需要回滚时,这几个T的空间能救命。

2. 保持可用的测试环境。尤其是对于可能出现随机数据需求的客户,随机产生数据需求意味着随机出现测试需求。

3. 验证新数据的合规性,

1
0 182
文章 Nicky Zhu · 四月 24, 2022 10m read

尽管IRIS和HealthConnect拥有全面的互操作特性,但在实际工作中,还是有可能遇到需要使用遗留类库,dll SDK等方式与外部应用通信的情况。例如IRIS中并没有内嵌国密算法SM2、SM3和SM4,而开源社区中不乏通过Java、Python和C++等语言完成的具体实现。本文就将以调用SM4的Java实现为例展示ObjectScript程序与第三方语言通信的过程。

Github地址:https://github.com/LinZhuISC/javademo.SM4

跨编程环境调用设计要点

在开始实际操作之前,希望读者先针对整个调用过程中的主调方和被调方思考两个现象:

  1. ObjectScript作为主调方,Java程序对它来说是个黑盒,它既不能直接访问Java虚拟机堆栈中的变量,也不能直接操纵被调代码的行为,例如限制内存使用、控制日志输出等。
  2. Java程序作为被调方,其设计目的是通过Java容器运行或被其他Java程序调用,开发过程中通常并不会考虑其自身如何与另一个语言环境交互,因此不能确保异常信息能被主调方捕获与跟踪。

针对这两个现象,开发者需要思考,在哪一侧需要做什么样的一些工作以便调用过程能够顺畅进行。

在这个背景下,当我们需要让ObjectScript与Java相互通信和调用时,就不得不解决几个技术问题:

  1. 两种体系结构间的数据类型如何相互转换: 例如Java的in


image

3
1 641
文章 Nicky Zhu · 十一月 15, 2021 12m read

查看原文

近日,国家卫健委统计信息中心发布了两则通知——

2021年10月25日,国家卫健委统计信息中心发布《关于开展国家医疗健康信息互联互通标准化成熟度评测工作的通知》,这意味着新一年的评测工作开始启动。

2021年11月5日,国家卫健委统计信息中心发布了“关于2020年度国家医疗健康信息互联互通标准化成熟度测评结果(第二批)公示的通知”,公布了第二批10个区域和92家医院的测评结果。

这两则通知,再次将“互联互通”带到了医疗IT人的面前。而每每谈到互联互通,就不可避免地要谈到集成平台、信息平台和数据中台等项目建设问题,本文将从供应商选择、技术选型等从八个核心问题,浅谈关于平台和中台的那些事。

一、如何选择供应商?

 

如上图所示,如果我们把平台/中台项目的实施方称作解决方案提供商,那么每一家解决方案提供方背后还会有一家产品技术提供方解决方案,因为解决方案提供方往往需要借助成熟的产品来实现信息平台和数据中台项目,以聚焦所服务医院客户的具体需求,并加速实施效率,所以一个平台/中台供应链条相对比较长。也因此,医院/医疗集团需要花费更多的精力在产品和解决方案的组合中进行选型。选型的标准也成为许多信息中心或者CIO们关注的首要问题。

首先要考虑平台/中台解决方案提供方本身的品牌和实力:通常而言,选择全国性的解决方案提供方更安全一些,这类厂商的解决方案

0
1 298
文章 Nicky Zhu · 十一月 2, 2021 22m read

目录

技术概要:InterSystems 云管理器(Cloud Manager) 1

  1. ICM 能为您做什么? 1
  2. ICM 是如何工作的? 1
  3. 试一试!使用 ICM 在云中部署 InterSystems IRIS 2
    1. 安装 Docker 3
    2. 下载 ICM 映像 3
    3. 启动 ICM 3
    4. 获取云供应商帐户和证书 3
    5. 生成安全密钥 4
    6. 自定义示例配置文件 4
    7. 配置基础设施 9
    8. 部署 InterSystems IRIS 10
    9. 尝试 ICM 管理命令 11
    10. 取消配置基础设施 12
  4. ICM 能做的远不止这些! 13
  5. 了解有关 ICM 的更多信息 13

插图目录

图 1: ICM 让一切变得简单 2

图 2: 云供应商的 ICM 默认文件示例 8

图 3: 交互式 ICM 命令 11

技术概要:InterSystems 云管理器(Cloud Manager)

本文向您介绍了 InterSystems 云管理器(InterSystems Cloud Manager,ICM),这是基于 InterSystems IRIS®数据平台的应用程序的端到端云配置和部署解决方案。

作为本指南的一部分,您将使用 ICM 在公共云中配置基础设施,并在该基础设施上部署 InterSystems IRIS。

要浏览所有的技术概要(First L


0
0 267
文章 Nicky Zhu · 十月 18, 2021 11m read

目录

技术概要: 基于角色的访问控制 1

  1. 基于角色的访问控制:为什么它很重要? 1
  2. 基于角色的访问控制:如何在 InterSystems IRIS 中工作 1
    1. 简要概念概述 1
    2. 示例用例 2
  3. 基于角色的访问控制:探索它 3
    1. 用前须知 3
    2. 发现管理门户(Management Portal)页面访问所需的资源 3
    3. 创建和分配您自己的管理者角色 4
    4. 创建用户并分配新角色 5
    5. 尝试管理门户(Management Portal)中的角色 6
  4. 了解有关基于角色的访问控制的更多信息 7

技术概要:基于角色的访问控制

本文档向您介绍基于角色的访问控制,解释它在 InterSystems IRIS®数据平台中的工作原理,并帮助您亲自探索。

要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。

基于角色的访问控制:为什么它很重要?

当您首次开始使用一个新的数据库平台时,有件事情可能很快就会变得清晰起来:您可能不希望企业中的所有用户都查看和更改系统上的所有内容。

InterSystems IRIS 和所有的数据库平台一样,允许您精细指定 InterSys

0
0 203