#InterSystems IRIS

0 关注者 · 964 帖子

InterSystems IRIS 是一个完整的数据平台
InterSystems IRIS 为您提供了捕获、共享、理解组织最宝贵的资产(数据)并采取相应行动所需的一切。
作为一个完整的平台,InterSystems IRIS 不需要集成多种开发技术。应用程序需要更少的代码、更少的系统资源和更少的维护。

新增
文章 Jeff Liu · 五月 8 8m read

引言 - ObjectScript 中的人工智能流问题

今天,我想介绍一下我在将 AI API 集成到 ObjectScript 应用程序时遇到的一个问题以及找到的解决方案。我最初的测试很成功,但也有些令人沮丧。

HTTP 调用成功了;请求正确地发送到了我的 LLM API。但随后,沉默......漫长的等待。最终,整个响应以单个块的形式到达。

从技术上讲,它成功了,但与 ChatGPT 会话相比,用户体验令人失望。

现代模型设计为逐个令牌流式输出。这使得等待时间大大缩短,因为即使尚未生成完整的答案,您也可以开始读取响应。 要启用此行为,只 需向 API传递 stream=true。 不过,在这种看似简单的操作背后有一个重要的细节:流媒体依赖于服务器发送事件(Server-Sent Events,SSE)。

如果不支持客户端 SSE,就无法利用这种模式。

对于通常在 ObjectScript 中使用的 %Net.HttpRequest 类,响应会被缓冲,直到连接关闭。换句话说,没有增量读取,没有渐进标记,因此也就没有流。

如果我们希望将 LLM 集成到 IRIS 应用程序中,那么能够处理 文本/事件 流、即时解析事件和实时处理数据是至关重要的

0
0 6
新增
文章 Kelly Huang · 五月 7 5m read

持续训练(CT)流水线将基于特定时间点可用数据,通过数据科学实验开发出的机器学习(ML)模型规范化。它不仅为模型部署做好准备,还支持在新数据可用时进行自主更新,同时具备用于审计目的的稳健性能监控、日志记录和模型注册功能。

InterSystems IRIS 已经提供了支持此类流水线所需的几乎所有组件。然而,缺少一个关键要素:标准化的模型注册工具。在本文中,我将介绍一种结合 IRIS 优势与开源 AI 工程平台 MLflow 的方法。它们共同作为构建有效持续训练(CT)流水线的互补工具。

本仓库中的实现利用了 MLflow 的内置配置来存储 SHAP 解释器,以提供对相应模型预测结果的解释,包括随机森林(Random Forest)、XGBoost、神经网络等“黑盒”复杂模型。

**演示视频**:https://youtu.be/qLdc4jhn83c

---

CT 流水线组件

该 CT 流水线模块背后的理论基于 Google 在相关文章中定义的 MLOps 1 级行业标准。每个组件的实现都利用了 IRIS 和 MLflow 的最佳特性(如下图所示,红色部分突出显示):

对于那些刚接触 CT 流水线的人来说,上图描述了数据科学项目中传统的实验阶段(上半部分“实验/开发/测试”,通常在 Jupyter Notebook 中进行)如何转化为生产级模型部署。

0
0 7
新增
文章 Lilian Huang · 五月 6 2m read

如果您有长时间运行的报文,这里有一段简单的代码可以捕获它们。您也可以使用队列等待警报(Queue Wait Alert)来获得相同的结果,不过这段代码甚至可以捕获队列为空的单条活动消息。它还能扫描所有命名空间,且不会对生产进行修改,因此可用于调试。

Include Ensemble

Class User.LongMessagesTask Extends %SYS.Task.Definition
{

Parameter TaskName = "Long running messages";

Property LongRunningMessageThreshold As %Integer(MINVAL = 1) [ InitialExpression = 60 ];

Method OnTask() As %Status
{
	set ts = $zdatetime($NOW(0),3,1)
	set ns = ""
	while 1 {
		// Iterate namespaces
		set ns = $o($$$EnsJobMonitorRoot(ns))
		quit:ns=""
		
		set job =""
		while 1 {
			// Iterate jobs
			set job = $o($$$EnsJobMonitorRoot(ns, job))
			quit:job=""
			
			// Get business host name
			set bh = $o($$$EnsJobMonitorRoot(ns,job,""))
			
			// Get the time of the last state change
			set lastActivity = $$$EnsJobMonitorRoot(ns,job,bh,"%LastActivity")
			
			// Get active message, if any - bh can be just idling
			set active = $d(^[ns]Ens.ActiveMessage(job),messageid) // From $$$EnsActiveMessage
			if active {
				set time = $system.SQL.Functions.DATEDIFF("s", lastActivity,  ts)
				if time > ..LongRunningMessageThreshold {
					set text = $$$FormatText("Long running message %1, in ns: %2, BH: %3, processing since %4, for %5 seconds", messageid, ns, bh, lastActivity, time)
					// For debug
					// write text, !
					do ##class(%SYS.System).WriteToConsoleLog(text)
				}
			}
		}
	}
	quit $$$OK
}

}
0
0 6
新增
文章 Claire Zheng · 四月 28 2m read

有时,客户需要一个小型 IRIS 实例在云中执行某些操作,然后将其关闭,或者他们需要数百个容器(即每个最终用户或每个界面一个容器)来处理小型工作负载。 这个练习的目的是了解 IRIS 实例可以做到多小。在这次练习中,我们重点研究了IRIS 实例可配置的最小内存量。 您知道影响 IRIS 内存分配的所有参数吗?

内存设置

这些是影响 IRIS 内存分配的不同桶及其相应参数:

  • 全局缓冲区(Global Buffers)(32 MB) => 8k 数据库的最小值似乎为 32 MB
  • 常规缓冲区(Routine Buffers)(26 MB) => 文档中的理论最小值为 430 个缓冲区 x 每个缓冲区 64k ~ 26 MB,实际为 26 MB
  • 日志缓冲区(Journal Buffers)(16 MB) => 理论上和实际上,Unicode 系统的最小值为 16 MB(8 位为 8 MB)
  • 缓冲区描述符(Buffer descriptors)(3 MB) => 似乎是 3 MB,无法调整
  • gmheap(16 MB) => 最小值为 256 页 x 每页 64k = 16 MB(CPF 中的配置字节数 = 16384)
  • ECP(1 MB) => CPF 中有几个参数控制这个参数。MaxServerConn 和 MaxServers。
0
0 6
新增
InterSystems 官方 Claire Zheng · 四月 27

在 InterSystems IRIS 中使用 OpenEHR

我们偶尔会收到有关在 InterSystems 中使用 OpenEHR 的问题。 通常,这些讨论的重点是企业为什么以及如何在构建应用程序时实施 OpenEHR。下面是一份简要指南:

  • InterSystems 注重互操作性: 我们 优先考虑通过 HL7、IHE、DICOM 和 ISO 等标准实现互操作性。根据我们的经验,没有一种标准能满足复杂医疗数据的所有需求。因此,我们建议在评估 OpenEHR 的任何实施方案时,都要与这些标准结合起来,并分析 每种标准能最好地满足哪些情况的需要。
  • InterSystems IRIS 上的 OpenEHR:对于使用 OpenEHR 模型构建应用程序或数据产品的组织而言,InterSystems IRIS 是一个理想的平台。它具有多模型功能、可扩展性、高性能和可靠性。InterSystems IRIS for Health 还可在同一应用程序中灵活使用包括 HL7 FHIR 在内的许多其他医疗标准。
  • 与 OpenEHR 的互操作性:OpenEHR 早于 HL7 FHIR,但 FHIR 现在涵盖了 OpenEHR 的许多原始用例。
0
0 6
新增
文章 Jeff Liu · 四月 26 1m read

作为新的互操作性用户界面浪潮的一部分(请参阅@Aya Heshmat2025.12025.3中介绍的新内容),v2026.1已经作为开发者预览版发布,这可能是您尝试一下的理由——它将发布用于消息查看和搜索的新用户界面,包括可视化跟踪(以及其他用户界面好东西)。

以下是一个快速预告:

0
0 32
文章 姚 鑫 · 四月 26 3m read

在这里插入图片描述

📘新书发布|《IRIS(数据平台)编程技术指南》正式发售!

大家好,我是姚鑫

最近一段时间,我把自己过去几年在 InterSystems IRIS 项目中的开发经验,系统整理成了一本书—— 📕 《IRIS(数据平台)编程技术指南》 现已由 北京航空航天大学出版社 正式出版发行。

说实话,写书的过程比我想象中要难很多。 如果说写博客是“随手记录”,那么写书就是一次真正的“工程项目”:要保证结构完整、逻辑严谨、内容能从入门一路带到实战。


🚀这本书写了什么?

本书围绕 InterSystems IRIS 的核心开发语言 ObjectScript 展开,内容不仅讲语法,更注重“工程实践”。

主要包括:

✅ IRIS 平台介绍与开发环境搭建 ✅ ObjectScript 语法规则、变量体系、全局变量机制 ✅ 常用数据类型、表达式、系统命令、系统函数 ✅ 函数与方法、面向对象编程基础 ✅ %Persistent 持久类(ORM 与 SQL 映射) ✅ Storage 存储策略、懒加载机制、并发分析 ✅ 嵌入式数据结构、常见性能问题与技术难点解析

整体内容更偏向“项目实战型”,不是纯概念堆砌。


🎯适合哪些人?

0
0 97
公告 Claire Zheng · 四月 24

Hi 大家好!

备考 InterSystems 认证考试,仅阅读文档远远不够,更需要针对真实考试目标进行集中练习。如果您计划在 HL7、SQL、系统管理或开发领域验证自己的专业技能,系统化的准备将带来显著效果。

 

🧑‍🏫 备考平台

本平台提供了大量与认证领域相匹配的练习题,并附有详细的答案解析,指出相关文档参考。您还可以随时跟踪自己的学习进度,从而更清晰地了解哪些方面有所提升、哪些方面仍需加强。

 

涵盖认证

  • HL7 接口专家
  • IRIS SQL 专家
  • IRIS 系统管理专家
  • IRIS 开发专家
  • ObjectScript 专家

通过教材与互动测验的结合,您可以找出薄弱环节,巩固知识,并以更充分的信心应对考试。

👉 点击此处开始练习

 


请注意,exam-prep.es 是一个独立的练习平台,与 InterSystems 无任何关联。本平台旨在作为备考的辅助工具使用。

0
0 67
文章 Kelly Huang · 四月 22 6m read

痛点所在

我们在将 IRIS 实例迁移到另一台机器(甚至可能是升级版本)后,有多少次是在几天之后才猛然惊觉:我们忘了迁移那个对于业务操作(Business Operations)至关重要的 SSL 配置?或者是漏掉了某个凭据(Credential),又或是某个包里孤零零的一个类?

解决方案

最简单的法子就是列一张清单¹。把我们必须迁移的实体项都罗列出来。但是,Word 文档里的简易清单往往会被人抛诸脑后,甚至干脆被无视。

管理学的基本原理告诉我们:如果你希望人们遵循流程,你可以采取以下手段:

  1. 通过监控行为来强制他们执行;
  2. 将某项活动系统地锁定在某个流程之后(例如使用流水线部署代码,并要求自动化测试通过才能合并 PR);
  3. 让流程比人工操作更便捷、更省力。​ 这样人们才会心甘情愿地去用。(这正是我的目标所在)

Python 脚本固然可行,但人们可能会忘记脚本放在哪儿,或者去哪儿下载。一旦有了新版本,所有使用者都得重新下载。

IRIS 类或任务似乎也是理想选择,直到你意识到有时你是迁移到另一个网络的服务器,一个实例根本无法访问另一个。

这就是为什么我选择了浏览器插件一旦安装,它便触手可及(哪怕你几个月不用它);更新会自动完成。即便你换了浏览器或出于某种原因弄丢了插件,从应用商店重新安装也只是点击一下的事。

0
0 21
文章 Jeff Liu · 四月 21 4m read

尽管LOCK(docs) 是 InterSystems IRIS 的基础部分,负责并发性,但开发者社区上关于它的讨论并不多。这是可以理解的,因为它是一个稳定且相当低级的命令。在本文中,我将举一个简单的例子,说明如何使用互操作性锁。在示例中,我们将有一个本地表,其中的引用数据由两个不同的进程使用:

  • 从表中读取数据的实用功能(由生产中的各种 DTL/Rules 使用)
  • 更新表的专用业务操作

这里的问题是,当业务操作更新表时(最糟糕的情况是进行完全重建),自定义函数将无法从表中获取数据,这将导致 DTL/规则处理出现问题。

锁可以帮助我们解决这个问题。具体方法如下:

  • 实用程序将在获取数据前获得共享锁。任何数量的进程都可以持有共享锁,因此不会出现并发问题。一旦检索到数据,我们就会释放共享锁。
  • 更新器业务操作会先使用共享锁,然后再释放独占锁。一旦某个进程获得独占锁,IRIS 就会保证其他进程无法获得同一资源上的锁。这样,当独占锁被持有时,实用程序就无法获取共享锁。一旦我们的业务操作完成对表的更新,它就会释放独占锁,允许实用程序访问表。

    让我们开始吧

本地表

有点简单(在实际项目中作为 LUT 可能会更好),但我们的目的是展示锁是如何工作的,而不是构建一个复杂的表:

Class Lock.RefData Extends %Persistent
{
Property Value;
}
0
0 18
文章 Claire Zheng · 四月 20 4m read

大家好。又是我!!😀

最近,我试图整理InterSystems IRIS😆的一些学习材料,并意识到这些资源实际上非常分散。

因此,我在这里列出了一个按类别分组的列表,供以下人员使用:

  • 是 InterSystems 的新手
  • 或想深入了解某个特定领域的人

此外,我还补充了一些自己的经验,说明哪些有用(哪些没用,可能只是对我没用🤫🤐)。


1.对于初学者

如果您不知道从哪里开始,请从这里开始:

我的体验 从 Developer Hub + 入门开始效果很好。它提供了快速运行的足够条件(无需安装,直接测试!!!!ᾒ)。

不适合我的地方 一开始就直接进入文档→正如我常说的...我知道句子中的每个单词,但就是不理解🥲。


2.设置/安装/工具

当你想真正开始工作时:

0
0 111
InterSystems 官方 Claire Zheng · 四月 16

InterSystems IRIS® 数据平台、InterSystems IRIS® for HealthTMHealthShare® Health Connect 2025.1.4 2024.1.6维护版本现已全面上市 (GA)。这些版本包括对最近发布的一些警报和建议的修复,其中包括以下内容:

请通过Ideas Portal使用 "发布后反馈"类别分享您的反馈意见,以便我们共同打造更好的产品。

文档

您可以在这些页面上找到详细的变更列表和升级检查列表:

早期使用计划 (EAP)

现在有许多 EAP 可用。请查看此页面并注册您感兴趣的项目。

如何获取软件?

0
0 11
文章 Lilian Huang · 四月 15 8m read

关键词 氛围编码(Vibe coding), Windsurf, IRIS, TIE

为什么不呢? "氛围编码 "从来都与氛围无关!( "Vibe coding" is never about the vibe!)

迄今为止,有人没有尝试过 "氛围编码(vibe coding) "吗?

即使仅仅在三年前,如果有人问

  • "我可以用英语、西班牙语或只用中文为 NHS TIE 实施 IRIS 吗?"或
  • "我能否用英语指示 TIE 建立自己的 e2e 路由,获取 PDF 报告,然后将其转化为 ORU/MDM 信息并提交到 PAS?
  • "我们能否只用英语查询 IRIS 数据库,并根据英语指令建立仪表板或我自己的特别报告?

你可能会大笑一声,尽量不生气,找把椅子坐下来,开始计算光是这些分析/SoW/需求/设计/测试/服务文档就需要多少人*日或人*周,以及实际工程工作。

然而,随着基础模型的飞跃和进步,今天的情况肯定会变得更加现实。

我也希望了解其他人是如何使用它的。 以下只是我自己匆忙写下的随笔。

范围

  • IDE:**Windsurf (是的,它还在那里) **或 Cursor 等(现在大约有 20 多个流行/强大的),或者只是带有此类扩展的 VSCode。
0
0 115
InterSystems 官方 Claire Zheng · 四月 13

互操作性用户界面项目在 2025.1 版本的基础上继续进行 ,并采纳了客户和合作伙伴提出的许多建议和意见。 我们将继续投资于反馈和更新这一重要的用户体验。 在最新发布的 2026.1 版(适用于 IRISIRIS for HealthHealthConnect 和 Health Connect Cloud) BPL 编辑器(BPL Editor)信息查看器/可视跟踪(Message Viewer/Visual Trace) 应用程序现在可供选择使用!
注意

  • 现有用户可在现代化和标准体验之间切换。
  • 所有其他互操作性屏幕仍保留在标准用户界面中。
  • 由于新的工作流在新的用户界面中可用,我们希望在这项工作继续进行时,两种体验都可用。
生产配置-配置任务介绍
  • 改进了用户界面在大型制作中的性能,例如有 2000 多台主机的制作
  • 当主机被选中时,"制作工具栏 "具有特定于主机的操作功能
  • 设置功能可启用/禁用与所有主机的连接线,或在选择主机时只显示主主机连接线
  • 可在新操作工具栏中更改主机类别作为操作
  • 当同名主机使用不同类别时,检查器面板(右侧)中的主机名称会显示为下拉列表,可在同名主机之间切换
    • 此外,这两个主机在 "生产配置 "视图中将显示为同一主机,并在主机名左侧显示同名主机的数量
  • 左侧 "Collections "面板的global筛选器可实现对主机、产品、DTL 等的批量筛选。
0
0 17