搜索​​​​

清除过滤器
文章
Claire Zheng · 二月 9, 2024

InterSystems开发者社区中文版恭祝开发者们龙年大吉!

农历甲辰龙年迤逦而来,InterSystems开发者社区在过去的一年里得到了各位开发者的厚爱与支持,在这新的一年里,恭祝大家龙行龘龘,前程朤朤!
公告
Claire Zheng · 六月 19, 2023

InterSystems 2023年度编程大奖赛(Grand Prix)技术奖励细则

大家好! InterSystems Grand Prix 2023 结合了 InterSystems IRIS 数据平台的所有主要功能! 因此,我们邀请您使用以下功能并收集额外的技术奖励,以帮助您赢得奖品! 如下: LLM AI 或 LangChain 用法:Chat GPT、Bard 等 - 6 InterSystems FHIR SQL Builder- 5 InterSystems FHIR-3 IntegratedML - 4 Native API - 3 嵌入式 Python - 4 互操作性 - 3 生产扩展(PEX)- 2 自适应分析 (AtScale) Cube的使用 - 3 Tableau、PowerBI、Logi 的使用 - 3 InterSystems IRIS BI - 3 列索引使用 - 1 Docker 容器使用 - 2 ZPM 包部署 - 2 在线演示 - 2 单元测试 - 2 实施 InterSystems Community Idea中的创意 - 4 在开发者社区发布的第一篇文章 - 2 在开发者社区发布的第二篇文章 - 1 代码质量通过 - 1 第一次贡献 - 3 YouTube 上的视频 - 3 LLM AI 或 LangChain 使用:Chat GPT、Bard 等 - 6 分 为构建使用LangChain库或大型语言模型(LLM)(例如 ChatGPT、Bard 和其他 AI 引擎(例如PaLM 、 LLaMA等)的解决方案会为您赢得 6 个专家奖励积分。 AutoGPT 的使用也很重要。 在 Open Exchange 中已经可以找到一些示例: iris-openai、 chatGPT telegram bot 。 这是一篇带有 langchain 使用示例的文章。 InterSystems FHIR SQL Builder - 5 分 InterSystems FHIR SQL Builder是 InterSystems IRIS for Health 的一项功能,有助于将 FHIR 资源映射到 SQL 表并通过应用程序中的 SQL 查询使用它。 在文档中了解更多信息。 在线课程。这是一个关于 Open Exchange 的例子。 注意:如果您实施 InterSystems FHIR SQL Builder,则不包括 InterSystems FHIR 即服务和 IRIS For Health 的 3 分奖励。 InterSystems FHIR 即服务和 IRIS For Health - 3 分 我们邀请所有开发人员使用InterSystems FHIR Server (FHIRaaS)构建新的或测试现有的应用程序。登录门户,进行部署并开始在您的编程竞赛应用程序中使用 AWS 上的 InterSystems FHIR 服务器。 您还可以使用 InterSystems IRIS for Health docker 版本构建 FHIR 应用程序。您可以使用IRIS-FHIR-Template ,它在 docker 镜像构建期间准备 FHIR 服务器。可以在此处找到 FHIR API 4.0.1 的文档。在InterSystems IRIS for Health 文档中了解更多信息。 IntegratedML 使用 - 4 分 1. 在您的 AI/ML 解决方案中使用 InterSystems IntegratedML。这是使用它的模板。 InterSystems IntegratedML 模板 2、数据导入工具: 数据导入向导 CSVGEN - CSV 导入工具 CSVGEN-UI - CSVGEN 的网络用户界面 3.文档: 使用 IntegratedML 4.在线课程和视频: 在 InterSystems IRIS 中学习 IntegratedML 为机器学习准备数据 使用机器学习工具包进行预测建模 IntegratedML 资源指南 IntegratedML 入门 使用 IntegratedML 和数据机器人进行机器学习 InterSystems Native API 使用 - 3 分 如果您使用任何 InterSystems Native API 选项( .NET 、 Java 、 Python 、 Node.js )访问全栈应用程序中的数据,您将获得此奖励。在这里了解更多。 嵌入式 Python - 4 分 在您的应用程序中使用嵌入式 Python并获得 4 分加分。您至少需要 InterSystems IRIS 2021.2。 注意:如果您还使用 Native API for Python,则只有 Embedded Python 才算奖励。 与 BPL 或 DTL 的互操作性生产 - 3 分 IRIS Interoperability Productions的主要特征之一是业务流程,可以用 BPL(业务流程语言)来描述。 在文档中了解有关业务流程的更多信息。 业务规则是一种无代码/低代码方法,用于管理互操作性生产的处理逻辑。在 InterSystems IRIS 中,您可以创建一个业务规则,您可以通过可视化或通过 ObjectScript 表示创建该规则。 如果您在互操作性产品中创建和使用业务流程或业务规则,您可以获得业务流程/业务规则奖励。 业务规则示例 在文档中了解有关业务规则的更多信息 生产扩展 (PEX) 使用 - 2 分 PEX 是互操作性产品的 Python、Java 或 .NET 扩展。 如果您在互操作性产品中将 PEX 与 Python、JAVA 或 .NET 结合使用,您将获得此奖励。 PEX演示。 在文档中了解更多关于 PEX 的信息。 InterSystems IRIS 具有Python Pex模块,该模块提供了从 Python 开发 InterSystems 互操作性产品的选项。使用它并为您的应用程序收集 3 个额外积分。也可以使用 Guillaume Ronguier 介绍的替代 python.pex 轮。 您还可以使用Python 互操作性,它是@Guillaume Rongier 提供的 Python 上 InterSystems IRIS 的 PEX 插件模块 这提供了在清晰的 python 中开发 InterSystems IRIS 互操作性解决方案的机会。 将 PEX 用于 Hugging Face 的文章,示例。 自适应分析 (AtScale) 多维数据集使用 - 3 分InterSystems Adaptive Analytics 提供创建和使用AtScale多维数据集的选项,用于分析解决方案。 您可以使用我们为比赛设置的 AtScale 服务器(可以在Discord 频道中收集 URL 和凭据)来使用多维数据集或创建一个新的多维数据集并通过 JDBC 连接到您的 IRIS 服务器。 使用 AtScale 的分析解决方案的可视化层可以使用 Tableau、PowerBI、Excel 或 Logi 制作。 文档, AtScale 文档 训练 Tableau、PowerBI、Logi 的使用 - 3 分 为您使用 Tableau、PowerBI 或 Logi 制作的可视化收集 3 分 - 每个 3 分。 可以通过直接 IRIS BI 服务器或通过与 AtScale 的连接进行可视化。 Logi 代表 InterSystems Reports 解决方案可用 - 您可以在InterSystems WRC 上下载作曲家。可以在discord channel中收集临时许可证。 文档 训练 InterSystems IRIS BI - 3 分 InterSystems IRIS 商业智能是 IRIS 的一项功能,它使您可以选择针对 IRIS 中的持久数据创建 BI 立方体和枢轴,然后使用交互式仪表板将此信息传递给用户。 了解更多 基本的iris-analytics-template包含 IRIS BI 多维数据集、数据透视表和仪表板的示例。 以下是 IRIS BI 解决方案的一组示例: 样品商务智能 Covid19分析 分析这个 权力的游戏分析 透视订阅 错误全局分析 使用 Docker 和 VSCode 创建 InterSystems IRIS BI 解决方案(视频) 可视化选择的自由:InterSystems BI (视频) InterSystems BI(DeepSee) 概述(在线课程) InterSystems BI(DeepSee) 分析器基础知识(在线课程) 列索引使用 - 1 分 列索引功能可以显着提高分析查询的性能。在您的解决方案的持久数据模型中使用列式索引并获得 1 个额外奖励积分。了解有关列索引的更多信息。 Docker 容器使用 - 2 分 如果应用程序使用在 docker 容器中运行的 InterSystems IRIS,则该应用程序将获得“Docker 容器”奖励。这是最简单的模板。 ZPM 包部署- 2 分 如果您做到以下措施,可以收集到奖励。为全栈应用程序构建和发布 ZPM(InterSystems Package Manager)包,这样它就可以通过以下方式部署: zpm "install your-multi-model-solution" 安装了 ZPM 客户端的 IRIS 上的命令。 ZPM客户端。文档。 项目的在线演示 - 2 分如果您将项目作为在线演示提供给云,则可额外获得 2 个奖励积分。您可以自己完成,也可以使用此模板- 这是一个 示例。这是有关如何使用它的视频。 单元测试 - 2 分 对 InterSystems IRIS 代码进行单元测试的应用程序将获得奖励。 在文档和开发人员社区中了解有关 ObjectScript 单元测试的更多信息。 实施Developer Opportunity Idea的创新理念 - 4 分 实施来自InterSystems Community Ideas 门户的处于具有“社区机会(Community Opportunity)”状态的任何创新想法。这将为您提供 4 个额外的奖励积分。 关于开发者社区的文章 - 2 分 在 Developer Community 上发表一篇文章,描述您的项目的功能,并为该文章收集 2 分。 开发者社区第二篇文章 - 1分 您可以为第二篇文章或有关申请的翻译获得额外的奖励积分。第 3 次及以上不会带来更多积分,但您仍将赢得所有关注。 代码质量通过且零错误 - 1 分 包括用于代码静态控制的代码质量 Github 操作,并使其显示 0 个 ObjectScript 错误。 首次贡献 - 3 分 如果您是第一次参加 InterSystems Open Exchange 竞赛,可获得 3 个奖励积分! YouTube 上的视频 - 3 分 制作演示您的产品的 Youtube 视频,每个视频可获得 3 分奖励积分。 奖励清单可能会发生变化。敬请持续关注!
文章
姚 鑫 · 十二月 22, 2024

第五十五章 File 输入 输出 - 与非 InterSystems IRIS 软件的交互

# 第五十五章 File 输入 输出 - 与非 InterSystems IRIS 软件的交互 # 与非 InterSystems IRIS 软件的交互 在 `Windows` 系统上,在 `IRIS` 中打开顺序文件以进行 `“WL”` 写入访问通常会阻止非 `IRIS` 应用程序打开顺序文件进行写入访问。同样,非 `IRIS` 应用程序打开顺序文件进行写入访问通常会阻止 `IRIS` 进程并发 `“WL”` 写入访问。 但是,某些非 `IRIS` 应用程序,包括记事本和写字板应用程序,会打开一个文件,在共享模式下复制文件,然后立即关闭它。因此,` IRIS` 进程仍然可以以 `“WL”` 模式打开文件。当这些非 `IRIS` 应用程序之一尝试将其副本中的更改保存到原始文件,或尝试重新打开原始文件时,将发生错误。更严重的情况可能发生如下:如果这些非 `IRIS` 应用程序之一打开了一个文件,然后 `IRIS` 打开、修改和关闭文件,然后非 `` 应用程序保存对文件的更改,两个进程所做的更改都被保存,文件数据的完整性可能会受到损害。 在 `UNIX` 系统上,在 `IRIS` 中打开一个顺序文件以进行 `“WL”` 写访问通常不会影响非 `IRIS` 应用程序的行为。您必须使用锁来可靠地限制来自非 `IRIS` 应用程序的写入访问。 # 示例 以下示例打开文件 `“LUDWIG.B“` 的 `ID` 文件。因为它没有指定 `mode` 参数,所以默认情况下,它以读取访问权限和 `stream` 模式打开文件: ```java OPEN "LUDWIG.B" ``` 以下示例将打开一个新文件 `“LIST.FILE“`,具有写入权限,采用流格式。请注意,如果只包含括号通常包含的第一个参数,则不需要括号。 ```java OPEN "LIST.FILE":"WNS" ``` 以下示例在当前目录中打开一个文件 `“CARDS”`,该文件具有读取和写入访问权限,以及 `80` 个字符的固定长度记录。 ```java OPEN "CARDS":("FRW":80) ``` 以下示例在目录 `c:\usr\dir` 中打开流格式文件 `“STRNG”`,其中包含非默认终止符 ```java OPEN "c:\usr\dir\STRNG":("S"::$CHAR(0)_$CHAR(255)) ```
文章
Michael Lei · 九月 27, 2024

使用 GitLab 持续交付 InterSystems 解决方案 – 第 7 部分:使用容器的

在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题: Git 101 Git 流程(开发流程) GitLab 安装 GitLab 工作流 持续交付 GitLab 安装和配置 GitLab CI/CD 为何使用容器 容器基础架构 使用容器的 CD 在第一篇文章中,我们介绍了 Git 基础知识、深度理解 Git 概念对现代软件开发至关重要的原因,以及如何使用 Git 开发软件。 在第二篇文章中,我们介绍了 GitLab 工作流 – 一个完整的软件生命周期流程,并介绍了持续交付。 在第三篇文章中,我们介绍了 GitLab 安装和配置以及将环境连接到 GitLab 在第四篇文章中,我们编写了 CD 配置。 在第五篇文章中,我们讨论了容器以及使用容器的方式(和原因)。 在第六篇文章中,我们将探讨运行包含容器的持续交付管道所需的主要组件以及这些组件如何协同运行。 在这篇文章中,我们将构建上一篇文章中探讨的持续交付配置。 工作流 在持续交付配置中,我们会: 将代码推送到 GitLab 仓库 构建 docker 镜像 进行测试 将镜像发布到 docker 注册表 将旧容器换为注册表中的新版本 也可以用示意图形式表示此流程: 我们开始吧。 构建 首先,我们需要构建镜像。 我们的代码通常存储在仓库中,CD 配置位于 gitlab-ci.yml 中,但为了提高安全性,我们会在构建服务器上存储几个服务器特定的文件。 GitLab.xml 包含 CD 挂钩代码。 该代码是在上一篇文章中开发的,并在 GitHub 上提供。 这是一个小型库,用于加载代码、运行各种挂钩以及测试代码。 作为更好的替代方案,您可以使用 git 子模块将此项目或类似项目包含到您的仓库中。 最好选择子模块,因为子模块更容易保持最新状态。 另一个替代方案是在 GitLab 上为版本添加标签,并使用 ADD 命令加载这些版本。 iris.key 许可证密钥。 或者,它可以在容器构建过程中下载,而不是存储在服务器上。 将密钥存储在仓库中非常不安全。 pwd.txt 包含默认密码的文件。 将这类文件存储在仓库中也非常不安全。 此外,如果您在单独的服务器上托管生产环境,它可能有不同的默认密码。 load_ci.script 初始脚本,它执行以下任务: 实现操作系统身份验证 加载 GitLab.xml 初始化 GitLab 实用工具设置 加载代码 set sc = ##Class(Security.System).Get("SYSTEM",.Properties) write:('sc) $System.Status.GetErrorText(sc) set AutheEnabled = Properties("AutheEnabled") set AutheEnabled = $zb(+AutheEnabled,16,7) set Properties("AutheEnabled") = AutheEnabled set sc = ##Class(Security.System).Modify("SYSTEM",.Properties) write:('sc) $System.Status.GetErrorText(sc) zn "USER" do ##class(%SYSTEM.OBJ).Load(##class(%File).ManagerDirectory() _ "GitLab.xml","cdk") do ##class(isc.git.Settings).setSetting("hooks", "MyApp/Hooks/") do ##class(isc.git.Settings).setSetting("tests", "MyApp/Tests/") do ##class(isc.git.GitLab).load() halt 请注意,第一行有意留空。 由于某些设置可以是服务器特定的,脚本不会存储在仓库中,而是单独存储。 如果此初始挂钩始终相同,将其存储在仓库中即可。 gitlab-ci.yml 现在,继续持续交付配置: 构建镜像: stage: build tags: - test script: - cp -r /InterSystems/mount ci - cd ci - echo 'SuperUser' | cat - pwd.txt load_ci.script > temp.txt - mv temp.txt load_ci.script - cd .. - docker build --build-arg CI_PROJECT_DIR=$CI_PROJECT_DIR -t docker.domain.com/test/docker:$CI_COMMIT_REF_NAME . 这里会执行哪些操作? 首先,由于 docker build 只能访问基础构建目录的子目录(本例中是仓库根目录),我们需要将“秘密”目录(包含 GitLab.xml、iris.key、pwd.txt 和 load_ci.script 的目录)复制到克隆的仓库中。 接下来,首次终端访问需要用户名/密码,因此我们会将这些信息添加到 load_ci.script 中(这也是 load_ci.script 开头一行留空的原因)。 最后,我们会构建 docker 镜像并适当地为其添加标签:docker.domain.com/test/docker:$CI_COMMIT_REF_NAME 其中,$CI_COMMIT_REF_NAME 是当前分支的名称。 请注意,镜像标签的第一部分应与 GitLab 中的项目名称相同,这样才能在 GitLab 的“注册表”标签页中看到它(“注册表”标签页中提供了关于添加标签的说明)。 Dockerfile 构建 docker 镜像是通过 Dockerfile 完成的,具体如下: FROM docker.intersystems.com/intersystems/iris:2018.1.1.611.0 ENV SRC_DIR=/tmp/src ENV CI_DIR=$SRC_DIR/ci ENV CI_PROJECT_DIR=$SRC_DIR COPY ./ $SRC_DIR RUN cp $CI_DIR/iris.key $ISC_PACKAGE_INSTALLDIR/mgr/ \ && cp $CI_DIR/GitLab.xml $ISC_PACKAGE_INSTALLDIR/mgr/ \ && $ISC_PACKAGE_INSTALLDIR/dev/Cloud/ICM/changePassword.sh $CI_DIR/pwd.txt \ && iris start $ISC_PACKAGE_INSTANCENAME \ && irissession $ISC_PACKAGE_INSTANCENAME -U%SYS < $CI_DIR/load_ci.script \ && iris stop $ISC_PACKAGE_INSTANCENAME quietly 我们从基本的 iris 容器开始。 首先,我们将仓库(和“秘密”目录)复制到容器中。 接下来,我们将许可证密钥和 GitLab.xml 复制到 mgr 目录中。 然后,我们将密码更改为 pwd.txt 中的值。 请注意,此操作会删除 pwd.txt。 之后,实例启动并执行 load_ci.script。 最后,iris 实例停止。 以下是作业日志(部分日志,跳过了加载/编译日志): Running with gitlab-runner 10.6.0 (a3543a27) on docker 7b21e0c4 Using Shell executor... Running on docker... Fetching changes... Removing ci/ Removing temp.txt HEAD is now at 5ef9904 Build load_ci.script From http://gitlab.eduard.win/test/docker 5ef9904..9753a8d master -> origin/master Checking out 9753a8db as master... Skipping Git submodules setup $ cp -r /InterSystems/mount ci $ cd ci $ echo 'SuperUser' | cat - pwd.txt load_ci.script > temp.txt $ mv temp.txt load_ci.script $ cd .. $ docker build --build-arg CI_PROJECT_DIR=$CI_PROJECT_DIR -t docker.eduard.win/test/docker:$CI_COMMIT_REF_NAME . Sending build context to Docker daemon 401.4kB Step 1/6 : FROM docker.intersystems.com/intersystems/iris:2018.1.1.611.0 ---> cd2e53e7f850 Step 2/6 : ENV SRC_DIR=/tmp/src ---> Using cache ---> 68ba1cb00aff Step 3/6 : ENV CI_DIR=$SRC_DIR/ci ---> Using cache ---> 6784c34a9ee6 Step 4/6 : ENV CI_PROJECT_DIR=$SRC_DIR ---> Using cache ---> 3757fa88a28a Step 5/6 : COPY ./ $SRC_DIR ---> 5515e13741b0 Step 6/6 : RUN cp $CI_DIR/iris.key $ISC_PACKAGE_INSTALLDIR/mgr/ && cp $CI_DIR/GitLab.xml $ISC_PACKAGE_INSTALLDIR/mgr/ && $ISC_PACKAGE_INSTALLDIR/dev/Cloud/ICM/changePassword.sh $CI_DIR/pwd.txt && iris start $ISC_PACKAGE_INSTANCENAME && irissession $ISC_PACKAGE_INSTANCENAME -U%SYS < $CI_DIR/load_ci.script && iris stop $ISC_PACKAGE_INSTANCENAME quietly ---> Running in 86526183cf7c . Waited 1 seconds for InterSystems IRIS to start This copy of InterSystems IRIS has been licensed for use exclusively by: ISC Internal Container Sharding Copyright (c) 1986-2018 by InterSystems Corporation Any other use is a violation of your license agreement %SYS> 1 %SYS> Using 'iris.cpf' configuration file This copy of InterSystems IRIS has been licensed for use exclusively by: ISC Internal Container Sharding Copyright (c) 1986-2018 by InterSystems Corporation Any other use is a violation of your license agreement 1 alert(s) during startup. See messages.log for details. Starting IRIS Node: 39702b122ab6, Instance: IRIS Username: Password: Load started on 04/06/2018 17:38:21 Loading file /usr/irissys/mgr/GitLab.xml as xml Load finished successfully. USER> USER> [2018-04-06 17:38:22.017] Running init hooks: before [2018-04-06 17:38:22.017] Importing hooks dir /tmp/src/MyApp/Hooks/ [2018-04-06 17:38:22.374] Executing hook class: MyApp.Hooks.Global [2018-04-06 17:38:22.375] Executing hook class: MyApp.Hooks.Local [2018-04-06 17:38:22.375] Importing dir /tmp/src/ Loading file /tmp/src/MyApp/Tests/TestSuite.cls as udl Compilation started on 04/06/2018 17:38:22 with qualifiers 'c' Compilation finished successfully in 0.194s. Load finished successfully. [2018-04-06 17:38:22.876] Running init hooks: after [2018-04-06 17:38:22.878] Executing hook class: MyApp.Hooks.Local [2018-04-06 17:38:22.921] Executing hook class: MyApp.Hooks.Global Removing intermediate container 39702b122ab6 ---> dea6b2123165 [Warning] One or more build-args [CI_PROJECT_DIR] were not consumed Successfully built dea6b2123165 Successfully tagged docker.domain.com/test/docker:master Job succeeded 请注意,我使用的是 GitLab Shell 执行器,而不是 Docker 执行器。 当您需要从镜像内部提取某些内容时,将使用 Docker 执行器,例如在 Java 容器中构建 Android 应用程序并且只需要一个 apk 时。 在我们的示例中,我们需要整个容器,因此需要使用 Shell 执行器。 因此,我们通过 GitLab Shell 执行器运行 Docker 命令。 运行 我们构建了镜像,接下来要运行镜像。如果是功能分支,我们销毁旧容器并启动新容器即可。 如果是环境,我们可以运行临时容器,在测试成功的情况下,可以替换环境容器(此内容留给读者作为练习)。 脚本如下。 destroy old: stage: destroy tags: - test script: - docker stop iris-$CI_COMMIT_REF_NAME || true - docker rm -f iris-$CI_COMMIT_REF_NAME || true 此脚本会销毁当前运行的容器,并且始终都会成功(默认情况下,如果 docker 尝试停止/移除不存在的容器,则会失败)。 接下来,我们启动新镜像并将其注册为环境。 Nginx 容器 使用 VIRTUAL_HOST 环境变量和 expose 指令(用于了解要代理的端口)自动代理请求。 run image: stage: run environment: name: $CI_COMMIT_REF_NAME url: http://$CI_COMMIT_REF_SLUG. docker.domain.com/index.html tags: - test script: - docker run -d --expose 52773 --env VIRTUAL_HOST=$CI_COMMIT_REF_SLUG.docker.eduard.win --name iris-$CI_COMMIT_REF_NAME docker.domain.com/test/docker:$CI_COMMIT_REF_NAME --log $ISC_PACKAGE_INSTALLDIR/mgr/messages.log 测试 我们来运行一些测试。 test image: stage: test tags: - test script: - docker exec iris-$CI_COMMIT_REF_NAME irissession iris -U USER "##class(isc.git.GitLab).test()" 发布 最后,我们将镜像发布到注册表中 publish image: stage: publish tags: - test script: - docker login docker.domain.com -u dev -p 123 - docker push docker.domain.com/test/docker:$CI_COMMIT_REF_NAME 可以使用 GitLab 秘密变量传递用户名/密码。 现在,我们可以在 GitLab 中看到该镜像: 其他开发者可以从注册表中拉取该镜像。 “环境”标签页上提供了我们所有的环境,可以轻松进行浏览: 结论 在这一系列文章中,我介绍了持续交付的常规方式。 这是一个涉及面非常广的话题,您应将这一系列文章视为方法集合,而不是确定性内容。 如果您想自动构建、测试和交付应用程序,可以选择持续交付(一般情况)和 GitLab(特殊情况)。 利用持续交付和容器,您可以根据需要自定义工作流。 链接 文章的代码 测试项目 完整的 CD 配置 后续内容 就是这些! 希望我已介绍了持续交付和容器的基础知识。 但还有一些主题我没有介绍(可能后面会介绍),特别是关于容器的内容: 数据可以在容器外持久保持,以下是相关文档 kubernetes 等编排平台 InterSystems Cloud Manager 环境管理 – 创建临时环境以进行测试,在功能分支合并后移除旧环境 Docker compose 可以实现多容器部署 缩减 docker 镜像大小并缩短构建时间 ...
文章
Lilian Huang · 十一月 24, 2023

现有系统通过使用InterSystems FHIR 适配器提供 FHIR 服务 - 简介

想必大家都听说过 FHIR 是解决系统间所有互操作性和兼容性问题的灵丹妙药和解决方案。就在这里,我们可以看到他手持一份 FHIR 资源,愉快地享受其中: 但对于我们这些普通人,我们将做一个小小的介绍。 什么是 FHIR? 让我们直接进入定义:FHIR(Fast Healthcare Interoperability Resource)是由HL7(Health Level 7标准组)开发的一种互操作性标准,旨在实现医疗行业中不同系统之间的电子医疗数据交换。 FHIR 从根本上基于哪些技术? 主要是通过 REST API 和 JSON 格式进行 HTTP 调用的结合(尽管它可以是 XML 以及我们可用的任何其他通信,具体根据我们的使用情况)。 我们如何与 FHIR 合作? 一般来说,最简单的方式是拥有一个FHIR服务器,我们将使用诸如GET(从服务器获取数据)、PUT(更新数据)、POST(保存数据)和DELETE(删除数据)等HTTP调用与其通信。 FHIR处理了“资源”(Resource)的概念,用于在服务器和客户端之间发送和接收数据。这些资源旨在涵盖系统间80%的互通性需求。在这里,我们可以看到默认情况下可用的资源图示。 如您所见,每个资源都附带一个表示资源成熟度的数字或字母(其中N = 正式)。如果您访问官方的FHIR文档,您将能够获取到众多示例。 资源的一种扩展是“Bundle”,简言之,它是一组封装在同一JSON中的资源,用于对我们的服务器进行查询以及执行批量或事务中的CRUD操作。 完美,FHIR听起来很棒,但是...我们如何将其应用到我们的传统系统中,这些系统并不是按照FHIR定义的标准设计的呢? FHIR适配器 InterSystems 向其客户提供 FHIR 适配器功能,这将使他们能够在其传统现有系统之上设置业务层,开发所谓的 FHIR Façade。在接下来的文章中,我们将了解如何使用 FHIR 对象并与使用 PostgreSQL 数据库的 HIS(健康信息服务)系统的小型模拟进行交互。 为了理解这些解释,您可以使用一个 OpenExchange 应用程序,它将自动设置我们将在未来几天遵循的示例: 研讨进程 在接下来的文章中,我们将讨论以下几点: IRIS 实例中的 FHIR 适配器架构 在我们的 HIS 中注册患者类型资源。 使用 REST API 调用按 其ID 查询患者。 在我们的 HIS 中注册包含患者和医疗中心数据的捆绑包。 因此,如果您有兴趣...请在未来几天继续关注社区!
文章
Lilian Huang · 十一月 24, 2023

现有系统通过使用InterSystems FHIR 适配器提供 FHIR 服务 - 架构

我们继续使用FHIR适配器的示例,在本文中,我们将回顾如何在我们的IRIS实例中进行配置以及安装的结果。 配置项目的步骤与官方文档中所示的相同,您可以直接在此处查看。好吧,让我们开始工作吧! 安装 正如您在与本文相关的项目中看到的,我们将 IRIS 实例部署在 Docker 中,因此初始配置的主要部分将在 Dockerfile 中完成。别担心,我们不会详细介绍 Docker 配置。 要安装 FHIR 适配器,我们只需: 在我们的 IRIS 实例中使用互操作性功能创建一个名为ADAPTER的命名空间。 从 IRIS 终端访问我们的命名空间并执行以下命令。 set status = ##class (HS.FHIRServer.Installer).InteropAdapterConfig( "/Adapter/r4" ) 在我们的例子中,我们定义了将接收 REST 请求的 IRIS 端点的 URL 为/Adapter/r4 。 安装结果 FHIR 适配器安装完成后,我们可以查看 IRIS 实例中发生的情况。为此,我们首先查看 Web 应用程序菜单(系统管理 -> 安全 -> 应用程序 -> Web 应用程序) 正如我们所看到的,一个新的 Web 应用程序已添加到列表中,表明它对应于我们的 ADAPTER 命名空间。让我们访问它以更详细地查看其配置。 正如我们所看到的,创建的 Web 应用程序启用了 REST 调用的接收,并且负责管理这些调用的类是HS.FHIRServer.HC.FHIRInteropAdapter 。我们看到的另一个细节是密码身份验证和未经身份验证的调用均已启用。对于我们的示例,我们不会修改任何内容,但如果在任何生产环境中启用 JWT 身份验证,那就会很有趣。 让我们回顾一下命名空间的制作过程中发生了什么。 安装过程已经创建并部署了两个新组件,即业务服务 InteropService 和业务操作 InteropOperation。在我们的示例中,我们将仅使用 InteropService,它将负责转发接收到的FHIR消息,该消息将是类 HS.FHIRServer.Interop.Request 的实例,我们将在其上进行操作以提取接收到的信息。InteropService必须接收的响应以返回响应JSON将是 HS.FHIRServer.Interop.Response 类型的实例。 我们的“HIS”的配置 我们在上一篇文章中提到,我们将模拟与一个理论上的HIS的互操作性,为此,我们在 Docker 中部署了一个 PostgreSQL 实例以及一系列测试表。为了启动对此外部数据库的查询,我们包含并配置了 Java 网关,以便我们可以通过 JDBC 建立必要的连接。我们还包含了用于连接 PostgreSQL 的 JAVA 库。 让我们看看负责此连接的生产组件。 我们将 JavaGateway 配置为指向我们在 Docker 中部署的 Java 虚拟机: 业务操作FromAdapterToHIS将负责对我们的PostgreSQL进行查询,让我们看看它的配置: 正如我们所看到的,它使用EnsLib.SQL.OutboundAdapter作为 Adapter 类,这将允许我们直接连接到“HIS”的数据库。 DSN 值将是我们的 Docker 中部署的 PostgreSQL 实例的连接字符串。 总之... 让我们回顾一下我们在本文中所做的事情: 在我们的命名空间中安装FHIRAdapter并检查我们是否有一个端点可以将 FHIR 消息发送到。 检查我们的命名空间(InteropService 和 InteropOperation)生产中的缺陷所创建的组件。 创建与我们的“HIS”数据库通信所需的组件。 通过这些步骤,我们已准备好开始接收 JSON 格式的 FHIR 消息。在下一篇文章中,我们将创建负责处理接收到的消息的业务流程,并实现我们需要查阅和编写有关 PostgreSQL 数据库的不同功能。 非常感谢您的关注!
文章
Michael Lei · 十月 24, 2024

InterSystems FAQ 常见问题系列--命名空间和数据库的最大数量

InterSystems FAQ 一个实例上的最大命名空间数量是 2047. 但是,要使用这么大量的命名空间,你需要相应地配置好内存。 一个实例里可以创建的数据库的最大数量(包括远程数据库) 15998. 根据授权的类型,可能会有所限制。具体细节请参考以下文档。Database Configuration [IRIS]Database Configuration
文章
Weiwei Gu · 八月 4, 2023

在 InterSystems IRIS 中创建具有超过 999 个属性的类/表

InterSystems IRIS 目前将类限制为 999 个属性。 但是,如果您需要为每个对象存储更多数据该怎么办? 本文将回答这个问题(附加了社区 Python 网关的客串以及如何将广泛的数据集传输到 Python 中)。 答案其实很简单 - InterSystems IRIS 目前将类限制为 999 个属性,但不限制 999 个基元(primitives)。 InterSystems IRIS 中的属性可以是具有 999 个属性的对象等等 - 该限制很容易被忽略。 方法1 . 每个序列属性存储 100 个属性。首先创建一个存储一百个属性的存储类。 Class Test.Serial Extends %SerialObject { Property col0; ... Property col99; } 并在您的主类中添加您需要的尽可能多的属性: Class Test.Record Extends %Persistent{Property col00 As Test.Serial; Property col01 As Test.Serial;... Property col63 As Test.Serial;} 这会立即将您的限制提高到 99900 个属性。 这种方法通过 SQL 和对象层提供对所有属性的统一访问(我们总是通过其编号来了解属性引用)。 方法2 。 一个 $lb 属性: Class Test.Record Extends %Persistent{Property col As %List;} 这种方法更简单,但不提供显式的列名称。 使用 SQL $LIST* 函数访问列表元素。 方法3 。 使用集合(列表/数组)属性。 Class Test.Record Extends %Persistent{Property col As List Of %Integer;} 此方法也不为各个值提供显式的列名称(但您真的需要它吗?)使用属性参数将属性投影为 SQL 列/表。 集合属性的文档。 方法4 。 根本不要创建属性并通过 SQL 存储过程/ %DispatchGetProperty公开它们。 Class Test.Record Extends %Persistent{ Parameter GLVN = {..GLVN("Test.Record")}; /// SELECT Test_Record.col(ID, 123) /// FROM Test.Record////// w ##class(Test.Record).col(1, )ClassMethod col(id, num) As %Decimal [ SqlProc ]{ #define GLVN(%class) ##Expression(##class(Test.Record).GLVN(%class)) quit $lg($$$GLVN("Test.Record")(id), num + 1)} /// Refer to properties as: obj.col123 Method %DispatchGetProperty(Property As %String) [ CodeMode = expression ]{..col(..%Id(), $e(Property, 4, *))} /// Get data global/// w ##class(Test.Record).GLVN("Test.Record")ClassMethod GLVN(class As %Dictionary.CacheClassname = {$classname()}) As %String{ return:'$$$comClassDefined(class) "" set strategy = $$$comClassKeyGet(class, $$$cCLASSstoragestrategy) return $$$defMemberKeyGet(class, $$$cCLASSstorage, strategy, $$$cSDEFdatalocation)} 这里的技巧是将所有内容存储在主 $lb 中,并使用未分配的Schema存储空间来存储数据。 这是一篇关于Global存储的文章。 通过这种方法,您还可以通过ExecuteGlobal方法轻松地将数据传输到社区 Python 网关的 Python 环境中。 由于结构相似,这也是导入 CSV 文件的最快方法。 结论 999 个属性限制可以在 InterSystems IRIS 中轻松扩展。 您知道存储广泛数据集的其他方法吗?如果有,请分享!
文章
Lilian Huang · 九月 19

InterSystems IRIS for Health:实现医疗保健数据解决方案价值的最快途径

数据是席卷医疗保健行业的数字化转型的核心。 要想发生根本性转变,需要一个新的基础来处理现代医疗保健的海量数据需求。 在您开发下一个治疗性突破、基因组见解和智能临床工作流时,上市速度至关重要。 您需要立即交付它们。 这就是我们为何扩展 InterSystems IRIS 数据平台的能力,以应对医疗保健信息的独特特征。 InterSystems IRIS for Health 是世界上第一个也是唯一一个专为快速开发医疗保健应用程序而设计的数据平台,管理着世界上最关键的数据。 没有哪家数据管理供应商对医疗保健有如此大的投入或如此丰富的相关经验。 在全球,有超过 10 亿份健康记录通过基于我们技术的解决方案进行管理。 在 InterSystems 上运行的实验室每天处理着美国近一半的标本 。 最尖端的私有和政府医疗保健提供商依赖于由 InterSystems 提供支持的设备、记录和 IT。 InterSystems IRIS for Health 提供了快速开发数据丰富的医疗保健应用程序所需的一切。 快速实现从白板到生产 InterSystems IRIS for Health 提供了构建复杂的任务关键型数据密集应用程序所需的所有功能。 它是一个综合性平台,涵盖了数据管理、互操作性、事务处理和分析,旨在加快实现价值的速度。 为大而生 医疗保健信息的数量和种类大得惊人,而且呈指数级增长。 InterSystems IRIS for Health 使应用程序能够从头开始高效扩缩(垂直和水平),以更经济高效的方式处理任何规模的工作负载、数据和用户。 加速互联 真正的互联健康需要各种不同来源(现代和传统)的可互换信息流。 由于 InterSystems IRIS for Health 为 FHIR 和每个主要的全球医疗保健消息传递标准提供了原生支持,应用程序可以快速摄取、规一化和共享信息。 更深层次的智能 人工智能和机器学习的成败取决于底层数据的质量。 InterSystems IRIS for Health 提供了先进的数据准备功能,可以创建变革性医疗保健模型并优化学习解决方案的效能。 积极响应的见解 临床决策支持、从实验室到临床的药物以及日益增长的消费者期望都要求实时响应。 InterSystems IRIS for Health 擅长混合事务/分析处理 (HTAP),能够为满足这些不断增长的需求的解决方案提供支持。 更多关于此主题的文章: InterSystems IRIS for Health:全面的入门指南 InterSystems IRIS for Health 中的 FHIR 互操作性 来源:InterSystems IRIS for Health
文章
Frank Ma · 三月 2, 2022

Windows上内嵌式Python调用tcl tkinter时的一个报错及处理方法

如果你的嵌入式Python代码调用了 tkinter library库(它被很多图形制作库使用,包括matplotlib),你可能会得到这个错误: <THROW> *%Exception.PythonException <CLASS DOES NOT EXIST> 230 ^^0^DO ##CLASS(User.Test).Test() <class '_tkinter.TclError'>: Can't find a usable init.tcl in the following directories: c:/intersystems/irispy/lib/python/lib/tcl8.6 c:/intersystems/irispy/lib/tcl8.6 c:/intersystems/lib/tcl8.6 c:/intersystems/irispy/library c:/intersystems/library c:/intersystems/tcl8.6.9/library c:/tcl8.6.9/library This probably means that Tcl wasn't installed properly. 下面是一个触发这个错误的代码样本: Class User.Test { /// do ##class(User.Test).Test() ClassMethod Test() [ Language = python ] { import matplotlib.pyplot as plt import numpy as np # Data for plotting t = np.arange(0.0, 2.0, 0.01) s = 1 + np.sin(2 * np.pi * t) fig, ax = plt.subplots() ax.plot(t, s) ax.set(xlabel='time (s)', ylabel='voltage (mV)') ax.grid() fig.savefig("test.png") } } 在这种情况下,你不需要安装tcl和tk库。其中一个方法是从源代码开始构建。In that case you need no install tcl and tk libraries. One of the approaches is 从源代码来构建。 对于windows系统,你可以在这里获得预构建的二进制文件。例如,根据我的错误,我需要8.6.12.5版本。下载它并从lib文件夹中复制tcl8.6和tk8.6到 c:/intersystems/irispy/lib/python/lib/ 或你的错误信息中的任何其他路径。 之后,你可能会得到另一个错误: Can't find a usable init.tcl in the following directories: c:/intersystems/irispy/lib/python/lib/tcl8.6 c:/intersystems/irispy/lib/tcl8.6 c:/intersystems/lib/tcl8.6 c:/intersystems/irispy/library c:/intersystems/library c:/intersystems/tcl8.6.9/library c:/tcl8.6.9/library c:/intersystems/irispy/lib/python/lib/tcl8.6/init.tcl: version conflict for package "Tcl": have 8.6.9, need exactly 8.6.12 version conflict for package "Tcl": have 8.6.9, need exactly 8.6.12 while executing "package require -exact Tcl 8.6.12" (file "c:/intersystems/irispy/lib/python/lib/tcl8.6/init.tcl" line 19) invoked from within "source c:/intersystems/irispy/lib/python/lib/tcl8.6/init.tcl" ("uplevel" body line 1) invoked from within "uplevel #0 [list source $tclfile]" This probably means that Tcl wasn't installed properly. 这意味着二进制文件与预期的版本不同,但这是一个微小的差异,可以通过打开 init.tcl 并把 package require -exact Tcl 8.6.12 替换成 package require -exact Tcl 8.6.9 同样的,在 tk.tcl把 package require -exact Tk 8.6.12 替换成 package require -exact Tk 8.6.9 之后,tkinter 就应该正常工作了。
问题
liu yangyang · 三月 29, 2022

指定的数据库用户/密码组合被拒: [08S01][461] [InterSystems IRIS JDBC] Communication link failure: Access Denied [08S01][461] Access Denied

主要问题: 默认安装后,有没有默认用户名,密码?远程jdbc连接报错,麻烦解答一下,谢谢 [InterSystems IRIS JDBC] Communication link failure: Access Denied [08S01][461] Access Denied 创建用户: addgroup iris useradd -g iris -d "/home/iris" -m -s "/bin/bash" iris passwd iris 安装过程: root@baec-ThinkPad-E480:/data/IRIS_Community-2021.2.0.651.0-lnxubuntu1804x64# ./irisinstall Your system type is 'Ubuntu LTS (x64)'. Enter instance name : IRIS Enter a destination directory for the new instance. Directory: /data Select installation type. 1) Development - Install InterSystems IRIS server and all language bindings 2) Server only - Install InterSystems IRIS server 3) Custom Setup type ? How restrictive do you want the initial Security settings to be? "Minimal" is the least restrictive, "Locked Down" is the most secure. 1) Minimal 2) Normal 3) Locked Down Initial Security settings ? What group should be allowed to start and stop this instance? iris Do you want to install IRIS Unicode support ? InterSystems IRIS did not detect a license key file Do you want to enter a license key ? no Please review the installation options: ------------------------------------------------------------------ Instance name: IRIS Destination directory: /data InterSystems IRIS version to install: 2021.2.0.651.0com Installation type: Development Unicode support: Y Initial Security settings: Minimal User who owns instance: root Group allowed to start and stop instance: iris Effective group for InterSystems IRIS processes: irisusr Effective user for InterSystems IRIS SuperServer: irisusr SuperServer port: 1972 WebServer port: 52773 JDBC Gateway port: 53773 Web Gateway: using built-in web server Not installing IntegratedML ------------------------------------------------------------------ Confirm InterSystems IRIS installation ? Starting installation Starting up InterSystems IRIS for loading... ../bin/irisinstall -s . -B -c c -C /data/iris.cpf*IRIS -W 1 -g2 Starting Control Process Allocated 254MB shared memory: 32MB global buffers, 80MB routine buffers Creating a WIJ file to hold 32 megabytes of data IRIS startup successful. System locale setting is 'zh_CN.UTF-8' This copy of InterSystems IRIS has been licensed for use exclusively by: InterSystems IRIS Community Copyright (c) 1986-2022 by InterSystems Corporation Any other use is a violation of your license agreement ^^/data/mgr/> ^^/data/mgr/> Start of IRIS initialization Loading system routines Updating system TEMP and LOCALDATA databases Installing National Language support Setting IRISTEMP default collation to IRIS standard (5) Loading system classes Updating Security database Loading system source code Building system indices Updating Audit database Updating Journal directory Updating User database Updating Interoperability databases Scheduling inventory scan IRIS initialization complete See the iboot.log file for a record of the installation. Starting up InterSystems IRIS... Once this completes, users may access InterSystems IRIS Starting IRIS Using 'iris.cpf' configuration file Starting Control Process Global buffer setting requires attention. Auto-selected 25% of total memory. Allocated 2420MB shared memory: 1965MB global buffers, 196MB routine buffers Creating a WIJ file to hold 99 megabytes of data This copy of InterSystems IRIS has been licensed for use exclusively by: InterSystems IRIS Community Copyright (c) 1986-2022 by InterSystems Corporation Any other use is a violation of your license agreement You can point your browser to http://baec-ThinkPad-E480:52773/csp/sys/UtilHome.csp to access the management portal. Installation completed successfully 启动实例: root@baec-ThinkPad-E480:/data# iris start iris IRIS is already up! 查看信息: root@baec-ThinkPad-E480:/data# iris list Configuration 'IRIS' (default) directory: /data versionid: 2021.2.0.651.0com datadir: /data conf file: iris.cpf (SuperServer port = 1972, WebServer = 52773) status: running, since Tue Mar 29 17:00:13 2022 state: ok product: InterSystems IRIS 连接信息: ip:x.x.x.x 端口:1972 指定数据库:user 用户:_SYSTEM 密码:system 连接报错信息: 指定的数据库用户/密码组合被拒: [08S01][461] [InterSystems IRIS JDBC] Communication link failure: Access Denied [08S01][461] Access Denied 请参考文档:Emergency Access 使用此方法重置密码。
文章
Michael Lei · 六月 1, 2022

部分IRIS 2022 年度编程大奖赛作品展示—— 利用IRIS 一体化机器学习IntegratedML来预测糖尿病的Web 应用

糖尿病可以从医学界熟知的一些参数中发现。这样,为了帮助医学界和计算机软件系统,特别是人工智能软件,美国国家糖尿病和消化道及肾脏疾病研究所发布了一个非常有用的数据集,用于训练糖尿病检测/预测的机器学习算法。这份出版物可以在最大和最知名的ML数据库Kaggle上找到,网址是https://www.kaggle.com/datasets/mathchi/diabetes-data-set。 该糖尿病数据集有以下元数据信息(来源:https://www.kaggle.com/datasets/mathchi/diabetes-data-set): 怀孕:怀孕次数 葡萄糖: 口服葡萄糖耐量试验中2小时的血浆葡萄糖浓度 Plasma glucose concentration a 2 hours in an oral glucose tolerance test 血压: 舒张压(mm Hg) 皮肤厚度: 肱三头肌皮褶厚度(mm) 胰岛素: 2小时血清胰岛素(mu U/ml) BMI: 体重指数 (体重 kg/(身高 m)^2) 糖尿病血统函数: 糖尿病血统函数(它提供了一些关于亲属中的糖尿病史以及这些亲属与病人的遗传关系的数据。这种对遗传影响的测量使我们了解到一个人可能有的遗传风险与糖尿病的发病有关--来源:https://machinelearningmastery.com/case-study-predicting-the-onset-of-diabetes-within-five-years-part-1-of-3/) 年龄: 结果: 类变量 (0 or 1) 实例数量: 768 属性数量: 8 + 1个类变量 对每个属性: (全部为numeric数字量化类型) 怀孕次数 口服葡萄糖耐量试验中2小时的血浆葡萄糖浓度 舒张压 (mm Hg) 三头肌皮褶厚度 (mm) 2小时血清胰岛素 (mu U/ml) BMI指数 (体重 kg/(身高 m)^2) 糖尿病血统函数 年龄 类变量 (0 or 1) 缺失属性值: 是 类分布: (类值为1解释为 "糖尿病测试阳性") 从Kaggle获取糖尿病数据 Kaggle的糖尿病数据可以通过Health-Dataset程序加载到IRIS表中:https://openexchange.intersystems.com/package/Health-Dataset。要做到这一点,在你的module.xml项目中,设置依赖关系(Health Dataset的ModuleReference)。 Module.xml with Health Dataset application reference <?xml version="1.0" encoding="UTF-8"?> <Export generator="Cache" version="25"> <Document name="predict-diseases.ZPM"> <Module> <Name>predict-diseases</Name> <Version>1.0.0</Version> <Packaging>module</Packaging> <SourcesRoot>src/iris</SourcesRoot> <Resource Name="dc.predict.disease.PKG"/> <Dependencies> <ModuleReference> <Name>swagger-ui</Name> <Version>1.*.*</Version> </ModuleReference> <ModuleReference> <Name>dataset-health</Name> <Version>*</Version> </ModuleReference> </Dependencies> <CSPApplication Url="/predict-diseases" DispatchClass="dc.predict.disease.PredictDiseaseRESTApp" MatchRoles=":{$dbrole}" PasswordAuthEnabled="1" UnauthenticatedEnabled="1" Recurse="1" UseCookies="2" CookiePath="/predict-diseases" /> <CSPApplication CookiePath="/disease-predictor/" DefaultTimeout="900" SourcePath="/src/csp" DeployPath="${cspdir}/csp/${namespace}/" MatchRoles=":{$dbrole}" PasswordAuthEnabled="0" Recurse="1" ServeFiles="1" ServeFilesTimeout="3600" UnauthenticatedEnabled="1" Url="/disease-predictor" UseSessionCookie="2" /> </Module> </Document> </Export> 预测糖尿病的前端和后端应用程序 访问 Open Exchange 应用连接 (https://openexchange.intersystems.com/package/Disease-Predictor) 并遵守以下步骤: Clone/git 把repo pull 到任何本地目录 $ git clone https://github.com/yurimarx/predict-diseases.git 打开 该目录下Docker终端并执行: $ docker-compose build 执行IRIS container: $ docker-compose up -d 在管理门户中执行查询来训练AI模型: http://localhost:52773/csp/sys/exp/%25CSP.UI.Portal.SQL.Home.zen?$NAMESPACE=USER 创建用来训练的 VIEW : CREATE VIEW DiabetesTrain AS SELECT Outcome, age, bloodpressure, bmi, diabetespedigree, glucose, insulin, pregnancies, skinthickness FROM dc_data_health.Diabetes 利用View视图来创建 AI 模型: CREATE MODEL DiabetesModel PREDICTING (Outcome) FROM DiabetesTrain 训练模型: TRAIN MODEL DiabetesModel 访问 http://localhost:52773/disease-predictor/index.html 来使用疾病预测器qian frontend and predict diseases like this: 幕后工作 后端预测糖尿病的类方法 InterSystems IRIS 支持执行Select 并使用上一个创建的模型来预测。 Backend ClassMethod to predict Diabetes /// Predict Diabetes ClassMethod PredictDiabetes() As %Status { Try { Set data = {}.%FromJSON(%request.Content) Set qry = "SELECT PREDICT(DiabetesModel) As PredictedDiabetes, " _"age, bloodpressure, bmi, diabetespedigree, glucose, insulin, " _"pregnancies, skinthickness " _"FROM (SELECT "_data.age_" AS age, " _data.bloodpressure_" As bloodpressure, " _data.bmi_" AS bmi, " _data.diabetespedigree_" AS diabetespedigree, " _data.glucose_" As glucose, " _data.insulin_" AS insulin, " _data.pregnancies_" As pregnancies, " _data.skinthickness_" AS skinthickness)" Set tStatement = ##class(%SQL.Statement).%New() Set qStatus = tStatement.%Prepare(qry) If qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT} Set rset = tStatement.%Execute() Do rset.%Next() Set Response = {} Set Response.PredictedDiabetes = rset.PredictedDiabetes Set Response.age = rset.age Set Response.bloodpressure = rset.bloodpressure Set Response.bmi = rset.bmi Set Response.diabetespedigree = rset.diabetespedigree Set Response.glucose = rset.glucose Set Response.insulin = rset.insulin Set Response.pregnancies = rset.pregnancies Set Response.skinthickness = rset.skinthickness Set %response.Status = 200 Set %response.Headers("Access-Control-Allow-Origin")="*" Write Response.%ToJSON() Return 1 } Catch err { write !, "Error name: ", ?20, err.Name, !, "Error code: ", ?20, err.Code, !, "Error location: ", ?20, err.Location, !, "Additional data: ", ?20, err.Data, ! Return 0 } } 现在,任何网络应用都可以使用预测并显示预测结果。欢迎在frontend 文件夹查看本应用的源代码。
文章
Claire Zheng · 十月 18, 2022

四则优秀案例分享:医疗数据大规模集成

在美国各地,当需要实现大规模的应用集成时,医疗行业的领导者会使用InterSystems HealthShare Health Connect®。无论是为了连接电子病历,还是为了提升床边护理决策能力,无论是为了创新远程医疗和远程护理,还是为了业务增长,亦或是为未来做准备,InterSystems和Health Connect随时准备好帮助您和您的组织实现目标。我们在此提供几个InterSystems医疗行业的集成实例以作示范。 案例一:大规模的互操作性有助于成功部署Epic 美国东北部的一个主要综合交付网络(IDN)的IT系统每年为13家医院、数千名临床医生和150万名患者提供服务。当该机构将其内部开发的临床和财务应用程序替换为Epic时,Health Connect的集成功能通过以下管理帮助其实现顺利过渡: •连接5000个医疗设备 •得益于基因组学、新的影像技术和互联设备,在Epic之外的数据量增长了225%(从20TB增长到65TB) •Epic与其他IT系统的接口数量增加了34% •Epic部署完成后,消息量增加了近330%(每天7300万) Epic和Health Connect共同将该机构的医疗护理协同和标准化提升到一个新的水平,并将成为未来创新的平台。 案例二:从15个集成引擎减少到1个,节省2100万美元 如果没有收购很多不同的软件系统,你就不可能成为美国前三的综合交付网络(IDNs)之一。这包括集成引擎,它可以通过数千个遗留接口连接所有东西。 当这个IDN决定在一个集成平台上进行整合时,团队意识到他们投资的不只是软件,而是大规模的项目迁移。在仅有4名开发人员的情况下,该机构在21个月内将2000多个接口转换和部署到InterSystems HealthShare Health Connect上,实现了替换7000个接口的目标。更重要的是,IDN有望为每个接口节省3000美元的开发成本,预计总成本为2100万美元。通过支持世界上最大的集中式集成项目之一,Health Connect正在确保该机构能够继续发展和扩大互联医疗业务。 IDN对竞争解决方案的评估突出了HealthShare Health Connect的一个主要优势——可快速转换为新的产品质量接口。 案例三:零停机部署HealthShare Health Connect,提前1年完成计划 当COVID-19大流行来袭时,美国东南部的某大学医疗中心正在用InterSystems HealthShare Health Connect替换其使用了30年的本土数据集成引擎。在这个过程中不允许出现停机或任何切断临床医生和研究人员获取患者重要数据的风险。 该医疗中心与InterSystems公司合作,提前一年完成了集成引擎的更换。IT团队将来自60个医疗机构的临床医生和来自300个数据接口的信息连接了起来,与此同时,临床医护人员却没有感知到他们每天使用的应用程序底层发生的任何变化。由于没有发生停机,在疫情日益严重的情况下所有医疗护理资源得到了充分应用。 案例四:规模化集成,实现业务增长和护理创新 在美国西部,一家大型IDN已经发展到包括23家实体医院、1家线上医院、215家诊所、6个州的远程医疗操作、1个保险计划和4万名护理人员。该机构使用InterSystems集成技术来实现和管理这种增长,同时保持其敏捷和创新。自2014年以来,InterSystems技术通过以下方式服务于IDN的使命和目标: •每月处理2.25 - 2.5亿笔交易,绝对可靠 •集成220个独立应用的数据 •在线上医院中,将电子病历与家庭设备连接,并应用于远程医疗 •使用FHIR标准与外部合作伙伴共享数据 •利用FHIR简化消费者门户网站的数据披露 •规模化
公告
Michael Lei · 二月 2

InterSystems IRIS、IRIS for Health 和 HealthShare HealthConnect 的维护版本 2024.1.3 现已发布

InterSystems IRIS、InterSystems IRIS for Health 和 HealthShare Health Connect 的最新扩展维护版本现已发布。 ✅ 2024.1.3 版本 2024.1.3 修复了 2024.1.x 上一版中的 bug,包括针对最近发布的以下提醒的修复 – 提醒:在执行特定的操作时,数据库和日志文件中引入了无效数据…。 您可以在以下页面上找到详细的变更列表和升级核对清单: InterSystems IRIS InterSystems IRIS for Health HealthShare Health Connect 如何获取软件 软件以经典安装包和容器镜像两种形式提供。有关可用安装程序和容器镜像的完整列表,请参阅支持的平台网页。 InterSystems IRIS 和 InterSystems IRIS for Health 的完整安装包可从本 WRC 的 InterSystems IRIS 数据平台完整套件页面获取。 HealthShare Health Connect 套件可从 WRC 的 HealthShare 完整套件页面获取。 容器镜像可通过 InterSystems 容器注册表获取。 这些版本中的所有套件和容器的编号为: 2024.1.3.456.0
文章
Jeff Liu · 十月 26, 2021

IRIS 2021 技术文档 First Look 24 技术概要:容器中的 InterSystems 产品

本技术概要(First Look)通过重点概述和基本的实践示例,向您介绍在 InterSystems IRIS®数据平台上使用容器(Container)的基本原理。您将了解容器的目的、重要性和好处,以及 InterSystems 如何实现它们的具体细节。 有关 Docker 容器和 InterSystems IRIS 的完整文档,请参见 Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》),以及 InterSystems Cloud Manager Guide(《InterSystems 云管理器指南》)的 ICM Overview(ICM 概述)章节。Learn More About InterSystems IRIS in Containers(了解容器中的 InterSystems IRIS 的更多信息)部分提供了到其他参考资料的链接。 要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。 为什么是容器(Container)? 容器(Container)将应用程序打包成独立于平台、完全可移植的运行时解决方案(runtime solution),满足所有需求,但却隔离于任何依赖项(dependency)。具体来说,Docker 容器无处不在。因为所有主要的公共云基础设施即服务(Infrastructure as a Service,IaaS)供应商都支持 Docker,企业可以通过使用容器并让云供应商处理基础设施来降低成本和复杂性。 容器带来了以下所有的好处: 容器干净地划分代码和数据,提供完全分离的关注点,应用程序可轻松部署和升级。 容器是非常高效的;容器中的应用程序只包含运行它所需的元素(element),并使其能够访问所需的连接、服务和接口,而且容器作为单个进程运行,所占用的内存并不比任何其他可执行文件多。 容器支持应用程序在不同环境之间的清洁移动(clean movement)——例如,从开发到测试,再到生产——从而减少具有不同目标的部门之间的典型过程和管理冲突。开发人员可以专注于最新的代码和库(library),质量开发人员(quality developers)专注于测试和缺陷描述,运营工程师专注于整体解决方案的基础设施,包括网络、高可用性、数据持久性(data durability)等等。 容器提供了企业对业务和技术进行变革所需的敏捷性、灵活性和可重复性。容器将应用供应过程(包括构建阶段)与运行过程明确分开,企业可以采用统一的应用程序交付方法,包括更敏捷的交付方法(DevOps)和架构(微服务)。 这些优势使容器成为应用程序的天然构件块,推动应用程序交付和部署方法变得更简单、更快速、更可重复、更强大。 容器中的 InterSystems IRIS 因为容器只打包运行容器化应用程序所需的元素,并在本地执行应用程序,所以它提供标准的、易于理解的应用程序配置、行为和访问。如果您对在 Linux 上运行的 InterSystems IRIS 有经验,那么基于 Linux 的 InterSystems IRIS 容器在什么物理、虚拟或云系统和操作系统平台上运行并不重要;您以相同的方式与它们进行交互,就像在 Linux 系统上运行传统的 InterSystems IRIS 实例一样。 下面介绍 InterSystems IRIS 在如何使用容器方面的不同。 InterSystems 提供的映像(InterSystems-provided images)——容器映像(container image)是可执行包,而容器是映像(image)的运行时实例 (runtime instance)——即映像(image)在执行时在内存中变成的实例。InterSystems 提供包含完整安装的 InterSystems IRIS 实例的映像(image),以及其他相关映像(image)。有关 InterSystems 映像(image)的更多信息,请参见 Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)中的 Using InterSystems IRIS Images(使用 InterSystems IRIS 映像)。 在本文档的实践体验中,您将从 InterSystems 提供的 InterSystems IRIS 映像(image)中创建并启动一个容器。 Iris-main 程序(iris-main program)——iris-main 程序使 InterSystems IRIS 和其他产品能够满足在 Docker 容器中运行的应用程序的要求。入口点应用程序(entrypoint application),即容器启动时启动的主进程,需要阻塞(block)——即等待(wait),直到其工作完成,但启动 InterSystems IRIS 的命令并不作为一个阻塞进程(blocking process)运行。iris-main 程序通过启动 InterSystems IRIS 来解决这个问题,然后继续作为阻塞入口点应用程序(blocking entrypoint application)运行。有关 iris-main 的更多信息,请参见在 Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)中的 The iris-main Program(iris-main 程序)。 该程序还提供了许多选项,以帮助调整 InterSystems IRIS 在容器中的行为;您将在本文档的实践体验中使用一些 iris-main 选项。 持久化 %SYS 功能(durable %SYS feature)——因为容器化的应用程序与主机环境隔离,所以它不会写入持久化数据(persist data);当容器被移除并被新的容器取代时,它在容器内写入的任何内容都会丢失。因此,容器化应用部署的一个重要方面是安排数据存储在容器之外,并提供给其他和未来的容器使用。 当 InterSystems IRIS 在容器中运行时,持久化 %SYS 功能(The durable %SYS feature)能够持久地存储特定于实例的数据——如用户定义、审计记录以及日志、日记和 WIJ 文件——允许一个实例跨越多个容器。例如,如果您使用持久化 %SYS 运行 InterSystems IRIS 容器,您可以通过停止原始容器(the original container)并运行使用旧容器创建的特定于实例的数据(instance-specific data)的新容器来升级实例。 您将在本文档的实践体验中探索持久化 %SYS (durable %SYS)功能。有关持久化 %SYS(durable %SYS) 的详细信息,请参见 Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)中的 Durable %SYS for Persistent Instance Data(持久化 %SYS 的持久化实例数据)。 重要提示: InterSystems 的容器映像符合开放容器标准(Open Container Initiative,OCI)规范,并在 Docker 企业版(Enterprise Edition)引擎上使用广泛流行的容器 Ubuntu 操作系统构建,该引擎完全支持 OCI 标准,并允许映像在 Docker Hub 注册表中认证和展示。因此,InterSystems 映像在任何基于 Linux 操作系统的符合 OCI 标准的运行时引擎上都得到支持,无论是在自有云还是在公共云中。 InterSystems 云管理器(InterSystems Cloud Manager,ICM)在其提供的云基础设施以及现有的虚拟和物理基础设施上提供 InterSystems IRIS 容器和其他容器的自动部署。有关使用 ICM 部署容器化的 InterSystems IRIS 实例的更多信息,请参见 First Look:InterSystems Cloud Manager(《技术概要:InterSystems 云管理器》) 和 InterSystems Cloud Manager Guide(《InterSystems 云管理器指南》)。 3. 下载 InterSystems IRIS 映像(Image) 要使来自 InterSystems 的 InterSystems IRIS 映像(image)可用于本实践,您必须将映像(image)下载到您正在使用的系统中。以下替代方案描述了您可以或可能可以使用的 InterSystems IRIS 映像(image)。 您可以使用来自 InterSystems 容器注册表(InterSystems Container Registry,ICR)的 InterSystems IRIS 社区版(Community Edition)映像(image),该映像(image)包含可从 InterSystems 获得的所有映像(image)的存储库,如 Using the InterSystems Container Registry(《使用 InterSystems 容器注册表》)中所述。您也可以从 Docker Store 的 InterSystems IRIS 数据平台页面下载社区版(Community Edition)映像(image)。 InterSystems IRIS 社区版(Community Edition)有一个免费的内置 13个月的许可证(和一些功能限制);如果您在这次实践中使用社区版(Community Edition),您就不需要提供下一步(Add the License Key to the External Storage Location(添加许可证密钥到外部存储位置))中所述的许可证密钥。更多信息,请参见 Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)中的 Deploy InterSystems IRIS Community Edition on Your Own System(在您自己的系统上部署 InterSystems IRIS 社区版)。 注意: 另一个选择是在 GCP、AWS 或 Azure 上提供一个承载运行中的 InterSystems IRIS 社区版(Community Edition)容器的云节点;更多信息,请参见 Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)中的 Deploy InterSystems IRIS Community Edition on a Cloud Node(在云节点上部署 InterSystems IRIS 社区版)。如果您在这个练习中使用社区版(Community Edition)的云节点,您可以跳过接下来的两个步骤,并跳转到 Change the Instance and Commit the Container as a New Image(更改实例并将容器作为新映像提交)。 如果您是 InterSystems 客户,您可以使用 InterSystems 容器注册表(InterSystems Container Registry,ICR)发布的 InterSystems IRIS 映像(image)。Using the InterSystems Container Registry(使用 InterSystems 容器注册表)列出了 IRC 提供的 InterSystems IRIS 映像(image),并解释了如何使用您的 WRC 凭证对注册表进行身份验证,以便您下载。 您的企业可能有一个私有映像(image)注册表,其中包括一个或多个 InterSystems IRIS 映像(image)。如果是这样,请获取您需要的映像(image)的注册表、存储库和标签的位置,以及访问所需的凭证。 当您确定了要下载的注册表和需要的凭证(如果有)后,请参见 Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品 》)中的 Downloadingthe InterSystems IRIS Image(下载 InterSystems IRIS 映像),了解下载 InterSystems IRIS 映像(image)的说明。 为了简单起见,这些说明假定您正在使用的映像(image)是 intersystems/iris:2021.1.0.205.0。 4. 添加许可证密钥到外部存储位置 与任何 InterSystems IRIS 实例一样,在容器中运行的实例需要一个许可证密钥(通常称为 iris.key)。 从 Docker Store 获得的 InterSystems IRIS 社区版(Community Edition)映像(在上一节中进行了描述)带有一个免费的内置临时许可证。然而,一般来说,许可证密钥没有也不能包含在 InterSystems IRIS 容器映像(container image)中,而是必须在容器启动后复制到容器中,以便激活运行在其中的 InterSystems IRIS 实例。iris-main 程序为此提供了一个选项,但它要求您把许可证密钥放在一个作为外部 volume 挂载的存储位置;下一节提供了使用说明。要了解有关 InterSystems IRIS 容器的许可证密钥的更多信息,请参见 Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)中的 License Keys for InterSystems IRIS Containers(InterSystems IRIS 容器的许可证密钥)。 将您的 InterSystems IRIS 许可证密钥文件 iris.key 复制到外部存储位置。 5. 从 InterSystems IRIS 映像(Image)运行容器 一旦您在本地机器上使 InterSystems IRIS 映像(image)可用,确定了外部存储位置并在其上放置了许可证密钥,您就可以使用 docker run 命令来创建和启动容器了。Docker run 命令实际上结合了三个独立的命令,如下所示: docker pull — 如果本地不存在映像(image),则下载一个。 docker create — 从映像(image)中创建一个容器。 docker start — 启动容器。 这些命令中的每一个都是单独有用的,在不同的背景下有不同的用途。更多信息,请参见 Docker 文档中的Docker run reference(Docker 运行参考资料) 。 下面是一个 docker run 命令的示例;所附文本对所有选项都作了解释。请注意,docker run 命令的选项出现在命令行中映像(image)规范之前,而 InterSystems iris-main 程序的选项(请参见 InterSystems IRIS in Containers(《容器中的 InterSystems IRIS》))出现在之后。在这种情况下,作为 docker run 一部分的 pull 命令不需要运行,因为您已经下载了您想使用的 iris 映像(image)。 docker run --name iris --detach --publish 52773:52773 --volume /nethome/pmartinez/iris_external:/external intersystems/iris:2021.1.0.205.0 --key /external/iris.key --name 容器名称(container name) 指定容器的名称,您可以在其他 Docker 命令中用它来引用该容器,例如,当您想停止该容器时,使用 docker stop container name 。 --detach 在后台运行容器(并显示容器的唯一 ID)。 --Publish 主机端口:容器端口(host_port:container_port) 将容器内的端口发布到主机上的端口,这样容器外(在主机上或其他机器上)的实体就可以与容器内的程序联系。例如,InterSystems IRIS 实例的管理门户(Management Portal)是通过实例的 Web 服务器端口(默认为 52773)访问的。如果容器内的这个端口发布到主机上的端口,那么可以使用主机的端口将实例的管理门户(Management Portal)加载到浏览器中。 --volume 外部存储路径:内部 volume(external_storage_path:internal_volume) 挂载容器可访问的外部存储位置作为容器内部的存储 volume。有关哪些存储位置可以以这种方式挂载以及可能需要的 Docker 配置的信息,请参见 Docker 文档中的 Use Volumes(使用 Volumes ) 。 重要提示: InterSystems 不支持在 InterSystems IRIS 容器中把 NFS 位置作为外部 volume 挂载。 存储库/映像:标签(repository/image:tag) 指定要提取并用于创建容器的映像(请参见 Download the InterSystems IRIS Image(下载 InterSystems IRIS 映像))。使用 docker images 命令来列出可用的映像(image),并确保您指定的是正确的映像(image)。 --Key 许可证密钥路径(license_key_path) iris-main 选项,它标识了要安装在容器实例中的 InterSystems IRIS 许可证密钥;这个位置必须是在一个挂载的 volume 上。 使用前面的示例和说明来构建您自己的 docker run 命令,并在命令行上执行。当命令完成后,使用 docker ps 命令可以在列表中看到您的容器,状态为 Up。 试一试! 创建您自己的基于 InterSystems IRIS 的容器 $ docker run --name iris --detach --publish 52773:52773 --volume /nethome/pmartinez/iris_external:/external intersystems/iris:2021.1.0.205.0 --key /external/iris.key 426d4a511d6746d89ec2a24cf93b29aa546ea696b479a52210d37da4c6d04883 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS 426d4a511d67 intersystems/iris:2021.1.0.205.0 "/iris-main --key ..." 5 seconds ago Up 3 seconds PORTS NAMES 0.0.0.0:52773->52773/tcp iris 注意: InterSystems IRIS 社区版(Community Edition)映像(请参见 Download the InterSystems IRIS Image(下载 InterSystems IRIS 映像))不需要--key 选项 ,该映像附带一个免费的内置许可证。 如果映像尚未在本地存在,但在您组织的存储库中——请参见 Download the InterSystems IRIS Image(下载 InterSystems IRIS 映像),Docker 会在创建和启动容器之前拉取(下载)该映像(image)。 如示例所示,创建容器后,Docker 输出 UUID 长标识符(long identifier); 前 12 个字符组成 UUID 短标识符(short identifier),用于标识其他输出中的容器,例如来自 docker ps 命令的容器。 6.更改实例并将容器作为新映像(Image)提交 当您更改容器内运行的程序时,您可以使用 docker commit 命令从容器中创建一个新映像(image)。这个新映像(image)与您创建容器的原始映像(image)相同,但包括您对容器所作的更改。要了解其工作原理,请遵循以下步骤: 打开容器中 InterSystems IRIS 实例的管理门户(Management Portal)。实例的管理门户(Management Portal)的 URL 包含了实例的主机标识符和 web 服务器端口号 。 主机标识符是运行容器的系统的主机名或 IP 地址;如果您的浏览器与容器运行在同一个系统上,则可以使用 localhost。 Web 服务器端口号是您在使用 docker run 启动容器时发布的实例的 web 服务器端口号,即 52773 的主机端口号。假设您包含了--publish 52773:52773,正如上一节末尾的示例命令中提供的那样,web 服务器端口号是 52773。 例如,在容器主机上,Web 服务器端口为 52773,管理门户(Management Portal)的 URL 将是 http://localhost:52773/csp/sys/%25CSP.Portal.Home.zen。 使用预定义用户帐户之一登录,例如 _SYSTEM,其默认密码是 SYS(请参见 Predefined User Accounts(预定义用户账户))。出于安全考虑,在第一次登录(使用管理门户(Management Portal)或 iris terminal 命令)到容器化的 InterSystems IRIS 实例上的任何预定义账户时,系统会立即提示您更改密码。 注意: 有关更改预定义帐户(强烈建议在生产中这样做)的默认密码(包括在脚本和自动部署中)的更多信息,请参见 Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)中的 Authentication and Passwords (身份验证和密码)。 从主页上,选择 System Administration(系统管理) > Configuration(配置) > System Configuration(系统配置) > Namespaces(命名空间) 来显示 Namespaces(名称空间) 页面,然后点击 Create New Namespace(创建新的命名空间) 按钮来显示 New Namespace(新的命名空间) 页面。 创建名为 USER2 的命名空间,方法是在 Name of the namespace box(命名空间框的名称)中输入 USER2,从 Copy from 下拉菜单中选择 USER,清除 Enable namespace for interoperability productions(为互操作性产品启用命名空间) 复选框并确认,点击 Save(保存) 按钮,最后确认您想要复制所有属性和映射。 然后点击 Copy Namespace Mappings(复制命名空间映射) 页面上的 Close(关闭) ,返回到 Namespaces(命名空间) 页面,在该页面上列出了 USER2 命名空间。 您现在已经改变了容器中的实例。 接下来,停止该容器并将其作为名为 iris2 的新映像(image)提交,然后列出可用的映像。 $ docker stop iris $ docker commit iris acme/iris2:test sha256:7b4adb9f7abf1490a39086665ccd3d255c05163c25cb9a3de8e9421f6ca16b40 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE acme/iris2 test 421f6ca16b40 8 seconds ago 1.40GB intersystems/iris 2020.3.0.221.0 15627fb5cb76 1 hour ago 1.39GB centos 7.3.1611 262f7381844c 2 weeks ago 192MB hello-world latest 05a3bd381fc2 7 months ag 1.84kB 最后,删除从原始 iris 映像创建的容器。 $ docker rm iris iris 7.运行和调查第二个基于 InterSystems IRIS 的容器 为了总结这一体验,您将使用 docker run 命令从您刚刚提交的基于 InterSystems-IRIS 的映像中创建并启动一个容器,包括用于持久化特定于实例的数据的持久化 %SYS 功能(durable %SYS feature)。持久化 %SYS (durable %SYS)是保存特定于实例的数据以及您对它所做的任何更改的一种更有用的方法。因为这些数据被保存在容器之外,它可以成为新的 InterSystems IRIS 容器的数据,允许您通过运行后面的映像(image)的容器来升级 IRIS 实例,同时保留以前的容器的数据;当内部容器更改提交到新映像时,这是不可能的。有关持久化 %SYS (durable %SYS)的详细信息,请参见 Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)中的 Durable %SYS for Persistent Instance Data(持久化实例数据的持久化 %SYS )。当您启动新容器后,将执行以下操作: 确认在作为一个新映像(image)提交的容器中创建的命名空间(请参见 Change the Instance and Commit the Container as a New Image(更改实例并将容器作为新映像提交))存在于新容器中的 InterSystems IRIS 实例中。 在容器中更改 InterSystems IRIS 实例的设置,并查看它反映在容器外持久化 %SYS (durable %SYS)数据中。 确认您添加的演示文件在容器内存在。 要做到这一点,请遵循以下步骤: 为这个容器确定一个外部存储位置。您可以使用在 Add the License Key to the External Storage Location(添加许可证密钥到外部存储位置)中为前一个容器选择的许可证密钥,也可以选择一个新的。许可证密钥应该仍然在以前的位置。(如果您使用一个新的位置,请确保许可证密钥已经到位)。 创建一个 docker run 命令,类似您在 Run a Container from the InterSystems IRIS Image(从 InterSystems IRIS 映像运行容器)中执行的命令, 基于那里的指令,但有两个更改。 添加选项 --env ISC_DATA_DIRECTORY=pathname 标识持久化 %SYS(durable %SYS) 目录,即写入 InterSystems IRIS 实例的持久化数据(persistent data)的位置。持久化 %SYS目录(durable %SYS directory)必须在一个挂载的 volume 上(请参见--volume 选项和 Add the License Key to the External Storage Location(添加许可证密钥到外部存储位置))。 注意: InterSystems 建议指定挂载 volume 的子目录为持久化 %SYS 的位置。下面的 docker ps 示例显示了这一点。 使用映像:标签(image:tag) 指定新映像 之前,您从 intersystems/iris:2021.1.0.205.0 (即 InterSystems 提供的映像)创建了容器;这次,您使用的是 acme/iris2:test,这是您通过提交更改过的 iris 容器创建的。 调用容器 iris2。当 docker run 命令完成后,使用 docker ps 命令来列出容器并查看其状态。例如: $ docker run --name iris2 --detach --publish 52773:52773--volume /nethome/pmartinez/iris_external:/external --env ISC_DATA_DIRECTORY=/external/durable acme/iris2:test --key /external/iris.key bdfe214ef76a34290a8308cddce92162aae14df1ba1bc244e692af3c8d911a3e $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS af3c8d911a3e acme/iris2:test "/iris-main --key ..." 5 seconds ago Up 3 seconds PORTS NAMES 0.0.0.0:52773->52773/tcp iris2 注意: InterSystems IRIS 社区版(Community Edition)映像(请参见 Download the InterSystems IRIS Image(下载 InterSystems IRIS 映像))不需要--key 选项,该映像附带一个免费的内置许可证。 Docker Compose 是一个用于定义和运行多容器应用程序的工具,为 Docker 命令行交互提供了替代方案。要使用 Compose,您需要创建 docker-compose.yml ,其中包含您想要创建、启动和管理的容器的规范,然后使用 docker-compose 命令。更多信息,请参见 Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)中的 Running an InterSystems IRIS Container:Docker Compose Example(运行 InterSystems IRIS 容器:Docker Compose 示例),和 Docker 文档中的 Overview of Docker Compose(Docker Compose 概述)。 确认从已更改的 InterSystems 容器提交的更改 在 Change the Instance and Commit the Container as a New Image(更改实例并将容器作为新映像提交)中,您在从 InterSystems 提供的映像 intersystems/iris:2021.1.0.205.0 创建的容器中为 InterSystems IRIS 实例添加了一个命名空间,然后将该容器作为一个新映像 acme/iris2:test 提交。因此,您添加的命名空间应该存在于运行在 iris2 容器内的 InterSystems IRIS 实例中,该容器是从 acme/iris2:test 创建的。 要确认这一点,请执行以下操作: 打开管理门户(Management Portal)并登录,如 Change the Instance and Commit the Container as a New Image(更改实例并将容器作为新映像提交)中所述。 从主页上,选择 System Administration(系统管理) > Configuration(配置) > System Configuration(系统配置) > Namespaces(命名空间),来显示命名空间(Namespaces)页面;在 iris 容器中创建的 USER2 命名空间被列出。 探索和更改持久化 %SYS 目录 要探索 InterSystems IRIS 容器的持久化 %SYS 功能,请执行以下操作: 要查看 InterSystems IRIS 在容器外写入的特定于实例的数据,因为您在 docker run 命令中包含了持久化 %SYS 环境变量,显示您在该变量中指定的目录的内容,该目录在您使用--volume 选项指定的存储位置,作为要挂载的外部 volume。例如,如果该目录被指定为 /nethome/pmartinez/iris_external/durable,如示例 docker run 中所示,您会做如下操作 $ cd /nethome/pmartinez/iris_external $ ls durable iris.key $ ls durable csp dist httpd iris.cpf iris.cpf_20180417 _LastGood_.cpf mgr $ ls durable/mgr alerts.log irisaudit iris.ids irislocaldata iristemp IRIS.WIJ journal.log startup.last SystemMonitor.log user ilock IRIS.DAT iris.lck iris.shid iris.use journal messages.log stream Temp 返回容器中 InterSystems IRIS 实例的管理门户(Management Portal),选择 System Administration(系统管理) > Configuration(配置) > System Configuration(系统配置) > Journal Settings(日志设置) 以显示日志设置(Journal Settings)页面。 Secondary journal directory(二级日志目录)设置从 /external/durable/mgr/journal/ 更改为 /external/durable/mgr/journal2/,并点击 Save(保存)。 返回到命令行,再次列出持久化 %SYS 目录的 mgr 子目录: $ ls /nethome/pmartinez/iris_external/durable/mgr alerts.log irisaudit iris.ids iris.lck iris.shid iris.use journal journal.log messages.log stream Temp ilock IRIS.DAT iris.key irislocaldata iristemp IRIS.WIJ journal2 licmanager.port startup.last SystemMonitor.log user 由于您对容器内的 InterSystems IRIS 实例进行了更改,所以 journal2 子目录被添加到容器外 。 这个示例显示了持久化 %SYS (durable %SYS)如何使您通过从新映像(image)创建容器来升级容器化的 InterSystems IRIS 实例。您对实例所做的所有持久化更改都存储在容器外的持久化 %SYS 目录(durable %SYS directory);如果您使用所需的选项从任何 InterSystems IRIS 映像(image)创建并启动一个新容器 — 即--volume 选项为持久化 %SYS (durable %SYS)挂载外部存储位置,以及--env ISC_DATA_DIRECTORY 选项指定该挂载 volume 上持久化 %SYS(durable %SYS) 位置,该位置必须存在,并且包含一个 /mgr 子目录 — 这些更改由实例继承,因为它使用与前一个容器中的实例相同的数据。 4.了解有关容器中的 InterSystems IRIS 的更多信息 此时,您已经准备好继续探索容器和 InterSystems IRIS 必须提供的东西。使用下面的文档和参考资料来深入了解容器和 InterSystems IRIS。 Docker Containers and InterSystems IRIS(《Docker 容器和 InterSystems IRIS》) (视频) Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》) 来自 InterSystems 开发者社区(Developer Community)的文章: What is a Container?(《什么是容器?》) What is a Container Image?(《什么是容器映像?》) Using InterSystems IRIS Containers with Docker for Windows(《使用 InterSystems IRIS 容器与 Docker for Windows》) Docker Documentation(《Docker 文档》) InterSystems Cloud Manager Guide(《InterSystems 云管理器指南》)——使用 InterSystems 云管理器(InterSystems Cloud Manager,ICM)可以轻松直观地配置基础设施,并以各种方式在上面部署容器。ICM 为 InterSystems IRIS 带来了基础设施即代码(Infrastructure as Code,IaC)和容器化部署的好处,而不需要在新技术、培训、配置和管理方面进行重大投资。本指南包含有关 ICM 和使用 InterSystems IRIS 与 Docker 容器的文档。 First Look:InterSystems Cloud Manager(《技术概要:InterSystems 云管理器》)