搜索​​​​

清除过滤器
公告
jieliang liu · 十月 18, 2023

[视频] FHIR 上的临床警报和通知:将医疗保健行动引擎纳入工作流程

你好社区, 观看此视频,了解如何将 FHIR、CDS Hooks 和低代码医疗保健规则编辑器组合成一个易于使用、功能强大的平台,以帮助确保以最佳方式传递信息: ⏯ FHIR 临床警报和通知:将医疗保健行动引擎纳入 2023 年全球峰会工作流程 🗣演讲者:@Frank.Pandolfe,InterSystems 临床产品经理 订阅我们的Bilibili 频道InterSystems Developers以获取最新更新!
公告
jieliang liu · 十月 18, 2023

[视频] 如何自定义 InterSystems IRIS for Health FHIR 存储库

嘿开发者, 欣赏Bilibili InterSystems 中国上的新视频: ⏯如何在 2023 年全球峰会上定制 InterSystems IRIS for Health FHIR 存储库 InterSystems IRIS for Health 不仅提供世界一流的 FHIR 存储库,还提供灵活性和可扩展性。了解自定义 FHIR 存储库的选项,并了解如何通过几个具体用例来实现它们,例如强制标识符的唯一性和引用完整性。 🗣 演讲者: @Teunis.Stolker,InterSystems 高级销售工程师 享受这个视频并继续关注更多视频! 👍
文章
Qiao Peng · 十月 17, 2023

FHIR生态

2023年6月底,世卫组织(WHO)和HL7签署了合作协议,利用HL7 FHIR提供互操作性,来支撑WHO的SMART指南(SMART Guideline)愿景 - 使用数智化的方式推动并加速一致化的健康干预措施建议,让世界上每个人都能立即从临床、公卫和数据使用建议中充分受益。 作为WHO的《2020-2025 年全球数字卫生战略》的一部分,SMART 指南使用 FHIR 、HL7的临床质量语言 (CQL) 和ICD标准以表达 WHO 的各种健康和临床指南,实现数据互操作、决策支持与指标、术语的一致性。这些标准被进一步利用来为各国及其合作伙伴开发一个由软件库、服务和工具组成的支持生态系统,并作为数字公共产品服务全球卫生健康事业。 为什么世卫组织会采用FHIR作为卫生信息互操作的标准在全球推广其一致化的健康干预措施建议?因为FHIR不仅标准成熟适用,而且还具有一个极具生命力的生态。 一个有生命力的标准会吸引生态的构建,而完善的生态将促进标准的成熟和演进。HL7 FHIR作为新一代的卫生信息互操作标准,其生态已经初具规模并蓬勃发展。 HL7 FHIR的知识产权类型 HL7 FHIR的知识产权是CC0,也就是知识共享。任何机构、组织和个人都可以无需向HL7申请而免费使用、扩展FHIR的标准。其知识产权类型配合FHIR标准的丰满程度,极大地鼓励和促进了基于FHIR的生态建设,应该也是WHO采用FHIR的原因之一。 FHIR的标准发布和标准的推广 标准应该是方便可及的 - 不仅有用户可阅读、可理解的文字说明,更需要要可以直接下载让计算机可用、可理解的电子结构化标准。 HL7 FHIR官网详细说明了每个版本、每个FHIR资源的结构与关系、使用范围、用例和示例。在下载页面提供了各种版本的标准、值集、profile和工具的免费下载。 对于用户的扩展、再约束和实施指南,有专门的实施指南注册和发布网站。这里可以免费注册自己的实施指南、也可以访问、查阅和下载别人的实施指南,从而让基于FHIR标准的自定义扩展可以无障碍地被分享、使用、理解,甚至进一步扩展。 下图是发布在注册网站的按用例类型统计的FHIR实施指南: 这众多方向的实施指南也是FHIR横跨交叉领域建立起成熟生态的体现。FHIR有什么快速建立生态的秘诀? 成熟的卫生信息标准要能应对各种行业互操作挑战,FHIR有一个四层机制用于制定标准并用各种互操作挑战来测试、验证和推进FHIR落地: 工作组(workgroups):FHIR有40多个工作组,专注不同的领域的需求,并制定和改进相关FHIR资源和用例标准。例如FHIR基础架构、基因组学、电子健康档案、财务管理、设备... 加速器计划(accelerators):为了推进在主要互操作领域的成熟和落地,FHIR建立加速器计划让每个领域的各个利益相关方参与进来,通过研究各方的需求、凝聚各方的智慧来推动FHIR。如今已经有8个不同领域的加速器计划: 例如Vulcan是专注连接临床研究、转化研究和医疗保健的加速器,它的成员不仅有HL7这样的标准开发组织,还有学会 - 例如约翰霍普金斯医学院,行业协会 - 例如全球医疗数据科学社区PHUSE,政府机构 - 例如FDA,技术厂商 - 例如InterSystems,药厂 - 例如GSK,甚至意见领袖。 课题(projects):FHIR通过课题,研究具体的需求、实现具体的目标,让FHIR扎实、可用。例如Vulcan加速器有以下课题: 课题 目标 Schedule of Activities (SoA) 活动安排 用FHIR表示电子表格中的活动时间表。 使得研究中的每项活动的描述、时间和标识都能保持一致 Real World Data (RWD) 真实世界数据 以标准化的格式从EHR中提取数据,以支持临床研究,特别是向监管机构提交数据 Phenotypic Data 表型数据 为基因组研究和基因组医学提供更多高质量的标准化表型信息 Electronic Product Information (ePI) 电子产品信息 为产品信息(各论)定义一个共同的结构,支持患者对产品数据的跨边界交换 Adverse Events (AE) 不良事件 支持对不良事件的报告和格式进行标准化。 提高相关FHIR资源的成熟度 FHIR to OMOP FHIR与OMOP映射 支持开发FHIR到OMOP的数据传输,以便更好地分析临床数据,用于研究 连接测试马拉松(connectathons):这是一个针对技术厂商的FHIR互操作系列化的一致性认证。每年3次的连接测试马拉松会确定众多的具体互操作用例,厂商选择并参与这些用例,用FHIR进行跨厂商的互操作测试。它不仅是技术厂商验证自己的FHIR互操作一致性的试验场,更是通过测试和反馈来发现标准的问题、确定标准适用性的大型沟通会。 FHIR confluence上公布有历次的连接测试马拉松的用例说明、实施指南、学习资料等详尽的资料。 除了这些手段,HL7还有FHIR认证,建立FHIR标准的智力资源池、确保FHIR在全球的正确采纳。 FHIR标准的适应性 FHIR的适应性核心在于其标准的设计 - 通过profile,在资源模型层面已经考虑到如何让用户进行不破坏标准的扩展和再约束;在标准成熟上,设计了成熟度模型,让标准基于实际使用和反馈逐步成熟。 Profile可以让用户裁剪、扩展FHIR标准,以适用于自己的术语体系和用例场景,实现基于统一标准的千人千面。 在标准的理解与反馈上,FHIR官方沟通提供了开放的交流和反馈的渠道。 FHIR生态的工具 成熟的生态工具是FHIR的一大亮点。这些工具是整个生态贡献的,好的工具得到广泛认同和采纳,既促进了标准的理解与使用、也避免了低水平的重复建设。 1. 标准学习工具: 理解和学习是标准推行的第一要务。除了汗牛充栋的学习材料和视频,FHIR还有不错的学习网站,例如Clinfhir ,最初设计是方便医生理解如何用FHIR构建和解决自己的用例的,但实际上也被广大卫生信息从业者用于理解FHIR标准。 2. 测试数据生成工具: 想学习标准?没有什么比直观的数据更能说明问题了。FHIR生态下有名的Synthea是一个基于马塞诸塞州的患者真实数据经过统计、混淆后的FHIR测试数据生成工具,可以按用户要求生成指定数量的、符合真实数据分布的FHIR资源,会为每个生成的虚拟患者生成一个FHIR boundle文件,并生成对应的医院、医生等FHIR资源。大家可以免费下载Synthea使用它产生测试数据。 另外,国内也广泛使用的MIMIC - 麻省理工贝斯以色列迪康医学中心的有5万多患者真实完整的高质量重症医疗数据集,如今也有了FHIR版本。 3. FHIR服务器: 还没有FHIR服务器,怎么测试FHIR? FHIR生态下有大量的免费沙箱,用户可以选择它们进行标准的学习和测试。例如官网提供的沙箱和各个厂商提供的沙箱。通过各种API工具,例如postman,学习者无需注册即可以了解FHIR标准的方方面面,甚至将自己的测试数据加载进去并测试自己的解决方案。 4. 标准扩展和再约束构建工具: 如何方便、直观地构建自己的术语、扩展和再约束(Profile)和用例?FHIR生态下有众多公司提供的免费工具可用 - 随君取用。例如术语扩展可以用Snapper和FSH、进行小规模profile开发可以用可视化的Forge或Trifolia-on-FHIR、进行大规模的profile和实施指南开发可以用FSH。 5. 标准验证工具: 需要基于profile对FHIR资源进行校验?资源更多了,不仅有FHIR官网提供的FHIR资源校验网页,还有各种开发语言版本的校验工具代码: JAVA C#/DotNet FHIR生态下百花齐放的各种应用架构、应用方向 更令人眼前一亮的是FHIR生态下各种应用架构、应用方向和众多其它生态对FHIR的采纳。 应用开发架构: FHIR提供了标准卫生信息模型和相应的API,为行业应用的快速开发提供了坚实的基础。FHIR生态下最有名的SMART on FHIR,实现即插即用和可复用的应用开发架构。在国际卫生信息互操作标准发展简史中有简要介绍。 SMART on FHIR市场已经有大量的应用可以直接下载部署。 决策支持架构: 决策支持已经是卫生信息数字化转型的核心需求之一。卫生信息化已经建设了各种基于知识库和基于机器学习的决策支持系统,涵盖了临床、业务管理、费用、组学与科研、公卫、健康管理等全部业务,但仍面临众多挑战。 任何知识库系统和决策支持系统面临的一个关键挑战是决策支持的可移植性!如果决策支持厂商都按自己的数据、术语和服务标准构建解决方案,用户在使用多个决策支持产品时,将面临大量数据转换和映射及服务集成带来的非常高的实施成本和潜在决策错误风险。 FHIR通过Clinical Reasoning模块和CDS Hooks分别提供了本地决策支持架构和外部决策支持架构,通过标准化降低成本和风险、提高决策效率和范围。这里是对CDS Hooks的介绍。 其它标准对FHIR的采纳: 相较于之前流行的互操作标准,FHIR在标准化、灵活性、可用性 三方面取得了很好的平衡。FHIR资源模型比大多数的行业通用数据模型(CDM)都简化,方便使用。曾经各自为战的众多标准都发现FHIR无处不在,且FHIR资源和API可以作为自己的数据和访问数据的基石,而融入FHIR生态可以更方便获得数据、获得更多的推广、发挥更大的价值,因此一系列的XX on FHIR项目应运而生 - 或者直接采纳FHIR、或者与FHIR相兼容。除了上面提到的SMART on FHIR,这里简单汇总一下主要的已完成和进行中的on FHIR项目和标准。 1. IHE IHE(Integrating the Healthcare Enterprise)是国际上比较流行且成功的卫生信息交换服务规范。它一直采用流行和稳定的互操作基础标准来开发自己的服务规范,最初使用DICOM + HL7 V2消息,后来用到HL7 V3 和CDA。IHE发现新的FHIR互操作标准有助于应对新的用例、并更好解决老的用例,认为FHIR会成为最流行的互操作基础标准,因此已经发布了很多基于FHIR的IHE服务,尤其是那些和移动业务相关的服务,例如移动患者人口统计查询 (PDQm)。 2. OMOP on FHIR OMOP(Observational Medical Outcomes Partnership)是包括国内在内全球科研人员进行真实世界研究的重要工具,它开发了通用数据模型CDM和分析工具库。 HL7国际和OHDSI宣布合作提供单一的通用数据模型,用于共享临床护理和观察研究信息 - 这就是OMOP on FHIR项目。 OMOP-on-FHIR 是构建在 OMOP CDM 数据库之上的 FHIR 服务器,它提供中间映射层,实现OMOP CDM和FHIR资源之前的双向转换,从而打通两大生态,使临床医生和研究人员能够从多个来源提取数据并以相同的结构进行分析处理与共享交换而不会降低数据质量,可以同时使用两个生态下丰富的应用与工具,利用各自的生态优势。例如OMOP让FHIR生态可以利用其丰富的预测模型,而FHIR让OMOP的研究分析可以集成到临床工作流程中,推动精准医学的落地。 3. FHIR to CDISC Joint Mapping CDISC 是一个标准开发组织,开发了生物制药行业使用的诸多数据标准,常用于提交临床试验数据以进行分析和监管审批。 通过与HL7合作,FHIR to CDISC Joint Mapping实施指南定义了FHIR 与三个特定 CDISC 标准之间的映射: 研究数据列表模型实施指南 (SDTMIG) 3.2 临床数据采集标准协调实施指南 (CDASH) 2.1 实验室1.0.1 通过简化 HL7 FHIR和 CDISC 标准之间的数据转换,消除使用临床信息支持科研的障碍。用途包括: 捕获“真实世界证据”(RWE),让那些不是为临床试验目的采集的数据可以用于研究监管 利用FHIR 的 SMART等技术,直接在临床系统内部捕获试验驱动的数据,而不是建立单独的临床试验管理解决方案 在回顾性研究中更容易利用临床数据 创建病例报告表单 (CRF),链接到使用 FHIR 资源和Profile定义的数据元素 使两个标准社区的专家能够理解彼此的术语,并随着两套规范的不断发展更好地协调它们 4. 通用数据模型协调 Common Data Models Harmonization(CDMH) 在卫生信息领域,有众多的通用数据模型(Common Data Models)服务于不同的或相同的业务领域。虽然都是“通用”数据模型,但数据在彼此之间并不通用。 FHIR的细颗粒度统一语义资源模型可以作为众多通用数据模型间的桥梁。通用数据模型协调(CDMH)目标就是借助FHIR打通各个通用数据模型,让它们的数据可以相互转换。 CDMH 项目由美国FDA 领导,与其他联邦政府机构合作。已发布的通用数据模型协调 (CDMH) FHIR 实施指南 (IG) 将重点放在以患者为中心的结果研究 (PCOR) 和其它目的提取的观察数据的映射和转换为 FHIR 格式。该项目重点关注以下四种通用数据模型 (CDM) 到 FHIR 的映射: 以患者为中心的结果研究网络 (PCORNet) 整合生物学和床边 (Informatics for Integrating Biology & the Bedside - i2b2) 临床试验 (ACT) 信息学,也称为 i2b2/ACT。 观察性医疗结果合作伙伴 (OMOP) 美国食品和药物管理局的哨兵(Sentinel) 5. Arden Syntax on FHIR 和HL7的临床质量语言(Clinical Quality Language - CQL)类似,Arden Syntax 是一种结构化、可执行的医学知识表示和处理语言,将医学知识表达为独立的单元 - 医学逻辑模块(Medical Logical Modules),常用于设计CDS系统,构建临床指南规则和临床决策规则。 新版本 Arden Syntax 3.0 版采用FHIR进行扩展,重新定义了基于FHIR的标准化的数据模型和数据访问方式。作为经过审计、基于共识的迭代 HL7 标准开发流程的一部分,3.0版已成功通过投票。 6. HL7 V2 to FHIR HL7 V2在全球依然有很高的采纳度,但其局限性和FHIR的成熟度都在推动从V2到FHIR的迁移。HL7 V2 to FHIR 项目建立实施指南,将HL7 V2的组件映射到FHIR组件:V2的消息、消息段、数据类型和词汇分别映射到 FHIR 的Bundle、FHIR资源、数据类型和编码系统,并对FHIR进行相应扩展以弥补二者间的差距。 7. C-CDA on FHIR C-CDA是最广泛实施的 HL7 CDA 实施指南之一,涵盖了临床护理的文档范围。CDA 和 FHIR 之间的互操作能力是推动临床文档进化的重要渠道。 C-CDA on FHIR 实施指南 (IG) 定义了一系列 FHIR 配置文件,以表示 C-CDA 中的各种文档类型,并弥补二者设计上的差异。C-CDA on FHIR 利用FHIR使文档标准更为精简。 还有更多的on FHIR项目没有介绍到,例如SNOMED on FHIR、PDMP on FHIR... 同时可以预期还会有越来越多的on FHIR项目会不断涌现。 不仅是这些on FHIR 项目,越来越多的机构发现FHIR的价值,将自己原来的数据模型改为FHIR。例如美国互操作核心数据集USCDI(U.S. Core Data for Interoperability) 起初采用通用临床数据集CCDS作为模型, 如今已经完全采纳FHIR,并且成为美国国家FHIR标准US Core的一部分。FHIR也得到了很多国家采纳作为国家级卫生信息互操作的标准。 大规模数据统计与分析: 一个好的标准应该有助于解决完整的行业需求。FHIR作为行业互操作标准已经超越了传统互操作的能力范围,除了互操作的数据模型、消息、文档、服务和API,FHIR服务器加上FHIR资源仓库为大规模的卫生信息持久化和访问提供了方案。 FHIR的完整蓝图目前尚缺一块拼图 - 基于FHIR的大规模数据统计与分析。 1. 大规模数据检索 FHIR API提供检索类型的API,通过查询参数(Search Parameter)对资源进行检索。 例如: 想要获取所有检验项目为loinc 1234-1,且检验结果小于9.2的Observation资源,可以用这样的查询参数: GET http://fhirsvr.com/Observation? code-value-quantity=loinc|1234-1$lt9.2 除了FHIR Core发布的查询参数,用户还可以扩展自己的查询参数,满足检索需求。 FHIR标准里的FHIR Path为FHIR资源模型提供了类似于XPath的资源路径导航和获取语言,可以方便地筛选、过滤层次化的FHIR数据。 但FHIR查询API和FHIR Path都仅适合于单资源类型的检索,对于需要多类型资源联合分析、汇聚、统计等分析需求无能为力。 2. 大规模的数据统计分析 HL7为临床质量指标与决策支持提出了临床质量语言(Clinical Quality Language - CQL) ,CQL如今基于FHIR,使用FHIR资源模型来构建标准化的指标体系,以支持决策和基于指标的管理。 对于科研数据分析,借助上面介绍的OMOP on FHIR和其它项目,用户可以用自己熟悉的科研工具并利用FHIR数据支持自己的科研工作,本质上是将FHIR数据转换并导入自己的科研工具。 对于通用大规模数据统计分析,虽然FHIR提供了API、FHIR资源数据序列化的JSON、XML可以作为文档进行分析,但市面上的统计分析工具和机器学习工具大都支持SQL,SQL也是最流行的数据统计分析语言。 FHIR的深层次化模型是立体的、对象化的,而SQL是扁平的、表格化的。这个差异让FHIR对主流分析工具和机器学习工具不友好。这对基于FHIR原生的大规模数据分析利用造成了障碍,是FHIR最需要完善的那一块。 FHIR和生态已经创立了很多项目,努力补上这一环。 SQL on FHIR SQL on FHIR项目的思路是为SQL用户提供FHIR的SQL表示层。SQL表示层提供一个机制:让用户根据自己的需要基于FHIR Path定义视图。这里的视图不是SQL视图,而是一个SQL模型的逻辑表达,由一个新的FHIR工件ViewDefinition定义。各个技术厂商负责物理实现它并展现为SQL表。 例如下面的视图定义: { "resourceType": "http://hl7.org/fhir/uv/sql-on-fhir/StructureDefinition/ViewDefinition", "select": [ { "column": [ { "path": "getResourceKey()", "alias": "id" }, { "path": "gender" } ] }, { "column": [ { "path": "given.join(' ')", "alias": "given_name", "description": "A single given name field with all names joined together." }, { "path": "family", "alias": "family_name" } ], "forEach": "name.where(use = 'official').first()" } ], "name": "patient_demographics", "status": "draft", "resource": "Patient" } 它定义一张这样的SQL表: 考虑到FHIR资源模型的复杂,SQL on FHIR目前尚待成熟。当前是版本2,尚未发布,且有很多限制,例如不能在视图里定义跨资源的字段。 技术厂商的FHIR资源SQL实现 除了SQL on FHIR项目,很多技术厂商也在借助自身技术上的优势为FHIR提供SQL访问层。 例如InterSystems IRIS是一个多模型数据平台技术,它可以同时支持对FHIR资源逻辑模型使用对象建模、对FHIR序列化的JSON/XML使用文档建模,并将这些模型投射为SQL模型。InterSystems IRIS正是借助于这个特性,提供一个名为FHIR SQL构建器(FHIR SQL Builder)的工具,用户通过图形化方式拖拽建立需要的SQL模型,而无需拷贝和转换数据。 FHIR生态正展现出蓬勃的生命力,如今已经是百花齐放。FHIR展现的统一行业语义能力和强大的生态,不仅帮助WHO发布数字公共产品服务,也可以赋能卫生信息数字化转型。
公告
Claire Zheng · 十月 17, 2023

重要公告:征文大赛将延期至11月24日!欢迎继续投稿,参加InterSystems开发者社区中文版第二届技术征文大赛!

嗨,开发者们! 我们决定将🏆InterSystems开发者社区中文版第二届技术征文大赛 🏆的参赛时间延长至11月24日,请参赛者关注重要时间节点的变化。 📝 2023年9月19日-11月23日(北京时间),文章发布与点赞收集!在社区发布文章后即可开始为您的文章收集点赞。越早发布文章,就越有时间收集更多点赞(这是您获得“开发者社区奖”的关键)。 📝 2023年11月23日(北京时间),专家打分截止(专家提名奖)。 🎉 2023年11月24日(北京时间),公布获奖名单。 欢迎大家继续积极投稿,赢取大奖! 了解参赛规则及文章样例:点击此处 了解奖品详情:点击此处 欢迎投稿参赛! 快乐分享技术,期待您的大作!✨ 🏆InterSystems开发者社区中文版第二届技术征文大赛 🏆(←点击链接进入参赛页面,浏览所有参赛文章)
公告
Claire Zheng · 十月 12, 2023

提前与您心仪的奖品见个面吧(*^▽^*)

Hi 开发者们, 🏆InterSystems开发者社区中文版第二届技术征文大赛 🏆(←点击链接进入参赛页面,浏览所有参赛文章)正在进行中,我们为参赛作者们准备了丰富的奖品,来与您心仪的奖品见个面吧!点击此处了解活动详情。 1. 专家提名奖:活动期间发布文章且成功参赛后,由InterSystems专家评选得出 2. 开发者社区奖:活动期间发布文章且成功参赛后,由社区成员点赞评选得出 3. 入围奖:在征文大赛期间,所有在InterSystems开发者中文社区发布文章且成功参赛的其余用户都将获得特别奖励。 注意:以上示意图仅供参考,具体以实物为准。 欢迎投稿参赛! 快乐分享技术,期待您的大作!✨ 🏆InterSystems开发者社区中文版第二届技术征文大赛 🏆(←点击链接进入参赛页面,浏览所有参赛文章)
公告
Claire Zheng · 十月 12, 2023

创意社区新闻摘要#8 | InterSystems Ideas News#8

Hi 开发者社区的成员们,大家好! 欢迎关注我们第8期 InterSystems Ideas NEWS! 本期分享如下: ​​​​✓ 描述创意门户所有页面的新视频 ✓ 自上次NEWS发布以来实施的想法 ⏯观看视频:加入名人堂 除了“创意(Idea)”页面之外,创意门户还包含 4 个新页面: 门户指南(Portal Guide) 消息(News) 民意调查(Polls) 名人堂(Hall of Fame) 欢迎查看,随时了解创意门户(Idea Portal)上的最新动态! 自创意门户(Idea Portal)推出以来,开发者社区成员已实施了24 个创意。其中 6 个是在过去 3 个月内实现的: 创意 想法的实施(项目) 开发者 Include support for GraphQL by @Jose-Tomas Salvador GraphQL @Gevorg Arutiunian REST API for Security Package by @Evgeny Shvarov Config-API @Lorenzo Scalese Jupyter Notebook by @Alex MacLeod Jupyter Server Proxy for VS Code @John Murray Java Hibernate support for IRIS by @Dmitry Maslennikov IRIS Hibernate Dialect @yurimarx Marx Example of Flask application with SQLAlchemy IRIS by @Dmitry Maslennikov IRIS-FlaskBlog @Muhammad Waseem Support for Liquibase by @yurimarx Marx liquibase-iris @Dmitry Maslennikov 👏 感谢大家实施并发布这些想法 👏 请继续关注我们的后续公告! 在我们的InterSystems 创意门户上发布您的绝妙创意,并为现有创意投票并对其发表评论!
文章
Qiao Peng · 十月 9, 2023

英国NHS 基于FHIR的数字健康实践案例和经验教训

英国国民医疗保健服务(NHS)简介 国民医疗保健服务(NHS)是英国的公共资助的医疗保健系统的总称,覆盖英格兰的、苏格兰和威尔士。它是世界上第二大单一付款人医疗保健系统,针对英国常住居民提供免费的、全面的卫生服务。这些卫生服务不仅是医疗服务,还包含社区护理服务、精神健康、临终关怀等。 NHS是最大的分级诊疗体系:先看全科医生或急诊,再由他们转诊到医院看专科医生、住院或者手术。它管理着9千万患者记录和6千5百万份病历;每天有100万的就诊、200万电子处方和75万电子转诊。 NHS有200万员工,是世界最大的、非军队的单一机构。一直被评为让英国人最自豪的英国机构,击败了皇室、武装部队和英国广播公司。 NHS面临的挑战和应对 作为政府买单的全国性医疗保健系统,提高治疗效果、提升效率、降低费用是NHS始终面临的挑战。 NHS广泛使用InterSystems的TrakCare作为电子病历系统以获得统一的、最新的患者视图;使用HealthShare作为医疗机构间健康信息共享和交换平台,合并和共享患者信息、治疗计划和临终愿望计划,让授权的医护人员查看患者完整、及时的护理记录小结;使用InterSystems IRIS医疗行业版支撑包括基于机器学习的辅助决策的创新应用,例如对阿尔茨海默氏症的早期发现与诊断。NHS还提供全国的电子处方服务 - 直接将电子处方发送到患者选择的药房,和电子转诊服务。 但NHS仍有很多纸质流程和众多的旧有系统,数字化程度和数据的互操作能力有限。例如NHS使用了21种不同的电子系统来记录患者的数据。这些系统之间不能很好地沟通,因此治疗患者的医生可能无法了解有效治疗患者所需的所有信息。约十分之一的就诊中,医院和全科医生无法获得患者之前的健康记录。“医院和全科医生通常没能在正确的时间、正确的地点获得正确患者的正确信息。这可能导致错误和事故,从而威胁患者的生命。“ 确保信息使用者在正确的时间、正确的地点获得正确患者的正确信息,是有效决策所需的关键要素。需要获取患者信息的不仅有医生和护士,还包括患者自己。这就是战略性的互操作,它不仅是技术问题,更是一个社会问题。 在COVID-19大流行前,NHS为了实现这些目标,制定了数字化(digitise)、连接(connect)、转型(transform)的数字化转型战略: 将服务数字化:让医疗护理服务提供者和患者在需要时可以安全地访问信息。它承诺到2024年将整个NHS数字化。 将它们连接起来以支持服务集成:连接的健康和护理系统意味着数据可以在 IT 系统、医疗护理提供者和机构之间无缝流动。由此产生的信息洞察有助于根据人群的需求定制服务,实现更有针对性的护理并减少不必要的干预。 通过这些基础实现服务转型:数字技术的真正价值不是来自于将现有实践数字化,而是来自于使用它来彻底改变服务。要设计健康和社会护理服务,以使遭受健康不平等的人受益并其尽可能具有包容性,将确保对健康结果产生最大的积极影响。例如NHS的综合护理计划服务(Coordinate My Care),是一项临床服务,将被动的护理服务转变为计划性护理,将急诊和意外入院转变为离家更近的选择性、计划性、成本更低的护理,将患者被动参加转变为患者主动参与。 COVID-19为NHS带来了新的挑战 - 数字化需求的全面提速。自全球 COVID-19 大流行和国家封锁措施以来,卫生和社会护理提供者都采用数字技术作为护理渠道:虚拟会诊、视频会诊、虚拟COVID-19病房。数字化也已扩展到为患者家中提供 iPad,使他们能够远程进行测试,从而降低暴露于COVID-19的风险并为NHS临床医生节省时间。NHS也计划在未来五年内将面对面门诊预约减少多达三分之一。 所有这一切都对系统的互操作能力和基于互操作能力上的服务创新提出了很高的要求,不仅是功能和法规上的,也是响应速度上的 - 在满足法规和标准的同时快速交付的需求。而FHIR恰逢其时地为NHS的这些需求和数字化转型战略赋能。 NHS的FHIR案例 在英国,INTEROPen是一个开放合作组织,致力于加速制定医疗保健和社会保健领域互操作性的开放标准,建立数字信息无缝流动的健康和护理社区。它由NHS、行业供应商、标准化组织和个人组成, InterSystems 是INTEROPen的创始成员和供应商联席主席。INTEROPen定义并推动采用基于 HL7 FHIR 的开放互操作性标准,它基于FHIR R4建立了英国第一个UK Core的国家级Profile和一系列FHIR实施指南(Implementation Guide),并每年举办四到六场黑客马拉松,使成员组织的开发人员能够测试标准和 API,然后再使用这些标准和 API 来连接基于真实临床场景的系统。 NHS正借助INTEROPen,努力简化不同的标准和流程,让服务创新者获得他们需要的东西,以符合各种技术和临床要求,确保关键信息在正确的时间到达正确的人。 NHS最新的努力都基于FHIR标准和UK Core,并定义了一组开放式 FHIR API,用于所有全科医生系统。基于 FHIR 的互操作性帮助NHS简化和自动化流程,释放宝贵的资源来专注于患者护理。 在FHIR基础上,NHS已经实现了这些服务: 患者服务: 让患者自己就可以查询个人记录、药嘱再配、预约、使用电子转诊服务等。患者可以选择何时何地看专家,实施以来,降低了一半的患者预约爽约风险。电子处方服务将处方数据安全快速地传给患者选择的药房,每年为NHS节省2亿3千万英镑。 患者也可以通过苹果手机的Apple Health应用,使用FHIR API安全、私密地大规模访问他们个人的NHS健康信息。 事件通知: FHIR 消息传递和 InterSystems 技术正在通过NHS网络推动临床事件通知。包括父母在内的用户可以订阅事件并接收每个患者的通知。事件管理系统接收 FHIR 消息、存储它们,并根据订阅偏好通知每个订阅者。事件类型包括疫苗接种、儿科发育里程碑或常规筛查检查等。 信息实时更新: NHS救护车出诊时,除了出诊原因,通常医生对患者的情况一无所知。通过FHIR API,NHS从全科医生系统收集患者信息并提供完整的html版本的小结,让医生在救护车到达前就了解患者的诊断、当前用药、过敏、就诊历史等信息,帮助医生确定更好的处置决定,并评估是否需要住院治疗。 药物管理: 住院时协调用药是困难和耗时的,加上转录用药和过敏信息可能发生的错误,这带来巨大的患者安全风险。 同时,传统的药物清单概念,无论是医生开出的药物清单、药房分配的药物清单,还是患者说他们目前服用的药物清单,它们看起来都一样。而FHIR 引入了一种新的药物管理架构,它的药物模块包括 9 种不同的 FHIR 资源——结构化数据的自描述单元以及对其他资源或数据源的引用。它们允许在不同系统之间进行更有意义和有用的药物信息交换。 使用FHIR药物模块,通过FHIR API,NHS从全科医生系统收集药物和过敏信息: 使用UK Core的 “药物可编码概念”或“药物资源” 传输药物信息 使用UK Core的FHIR剂量语法IG(FHIR Dose Syntax Implementation Guidance)将每剂量的药物量转换为简单的编码量 使用 SNOMED CT 和 NHS的dm+d 字典代码传输药物和过敏/不耐受信息 并及时、准确地将当前用药直接列入InterSystems TrakCare电子病历的患者当前用药列表。对于未编码的药物和过敏数据,InterSystems TrakCare这些信息作为自由文本存储在患者记录中,并允许临床医生将其修正为结构化和编码数据输入 TrakCare。开药时,TrakCare 可视化规则会在有非结构化过敏记录时提醒开药者。 通过这些基于FHIR的药物管理,NHS帮助医生更好、更快地协调住院用药,降低用药错误(这是最常见的医疗错误类型)带来的患者安全风险。 护理平稳过渡: 当患者从医院到护理中心再回到家中继续康复或照料,从一个医生转到另一个医生时,不完整的信息导致治疗连续性不佳、患者安全风险、效率不足、不必要的患者再入院和患者教育失败。NHS颁布了基于FHIR的治疗文档传递标准,它是一个结构化的、编码的文档。当患者从医院、急诊科、门诊预约或择期手术出院时,它由急症医院提供,通过FHIR API发送给全科医生。全科医生直接在患者记录中就可以查看到这些患者信息,无需打开另外的文档查找和阅读,这种及时的信息共享有助于实现不间断的患者护理。 另外,NHS还将FHIR应用在术前评估、知情同意、管理高危慢阻肺等业务场景中。 NHS的经验和教训 NHS在借助FHIR推动战略互操作时给我们带来的经验和教训: 战略互操作不仅是技术问题,更是社会问题 借这个机会转变临床和护理流程、服务 合作 它需要借助合作产生的标准实现,要所有利益相关方一起参与 – 需求方拉动、提供方推动 确保参与方都充分理解需求和标准,并理解标准需要不断进化 临床模型 (需求)-> FHIR Profiles (设计) -> 实施指南 (实施)-> API(实施) 组织测试,用来检验标准 务实 关注在交付有用的事情上 – 它要足够好,但不需要完美,不要过分工程化 尽快试错 很多国家在采纳FHIR,但这个过程会比我们想象的长 不要过分扩展FHIR,先从最小规模的扩展开始
公告
Claire Zheng · 九月 26, 2023

2023 InterSystems Python 编程大赛获奖者公布

Hi 开发者们, 是时候公布2023 InterSystems Python 编程大赛的获奖者了! 感谢所有提交15 份申请的出色参与者 🔥 专家提名奖 🥇第一名和 🥈第二名以及各4,000 美元由获得相同专家票数的两个应用程序共享: iris-vector by @Dmitry Maslennikov iris-GenLab by @Muhammad Waseem 🥉第三名 1,500 美元 iris-recorder-helper app by @Alexey Nechae 🏅第四名 750 美元 iris-python-machinelearn app by @André Dienes Friedrich 🏅第五名 500 美元 Face Login app by @yurimarx Marx 🌟 100 美元 native-api-command-line-py-client app by @Robert Cempe 🌟 100 美元 IRIS-Cloudproof-Encryption app by @LI XU 🌟 100美元 BardPythonSample app by @xuanyou du 🌟 100 美元 iris-python-lookup-table-utils app by Johannes Heinz 🌟 100 美元 apptools-django app by @Sergey Mikhailenko 开发者社区提名奖 🥇第一名1,000 美元 iris-vector app by @Dmitry Maslennikov 🥈第二名750 美元 iris-python-machinelearn app by @André Dienes Friedrich 🥉第三名500 美元iris-GenLab app by @Muhammad Waseem 🏅第四名 300 美元 BardPythonSample app by @xuanyou du 🏅第五名 200 美元 native-api-py-demo app by @shan yue 我们向所有参赛者和获奖者表示最诚挚的祝贺! 下次再一起享受乐趣吧;)
文章
王喆 👀 · 九月 21, 2023

IRIS自动安装集群--manifest(安装清单)

前言 生产环境下我们部署和使用IRiS引擎,往往采用其主备镜像模式,虽然此架构简单但是往往我们需要持续在电脑前点击或者操作1到2小时,如果中间有个环节出现了问题有时我们可能需要部署一天. 接下来我分享的是IRIS自带的一个功能帮助我们部署---manifest-安装清单。他的主要使用方式是提前通过配置约定好我们期望的安装设置,在安装的过程中由IRIS程序直接执行脚本,简化IRIS集群的部署,减少运维人员的操作步骤,让我们有更多的精力放在实际项目和业务上。 1 简介 %Installer 实用程序允许您定义描述和配置特定 InterSystems IRIS 配置的安装清单,而不是分步安装过程。为此,我们需要创建一个类,其中包含描述所需配置的 XData 块,使用包含通常在安装期间提供的信息(超级服务器端口、操作系统等)的变量。我们还可以在类中包含一个使用 XData 块生成代码以配置实例的方法。本文提供了安装清单的示例,您可以复制和粘贴这个示例尝试使用。 定义清单后,可以在安装期间、从终端会话或代码调用它。注意:清单必须在 %SYS 命名空间中运行。 2 Manifest的最终成品 此成品展示的是一个一键安装主、备、仲裁的机器命令,此方法的使用可以便捷快速的安装主备环境,其基本每一行都有注释其说明: Include %occInclude /// Classname: App.MirrorInstall <br/> /// Summary: 镜像安装清单 <br/> /// Version: 1.0 <br/> /// Date: 2023年09月13日 14:23:24 <br/> /// Author: 王喆 <br/> Class App.MirrorInstall { XData Install [ XMLNamespace = INSTALLER ] { <Manifest> <!-- 镜像配置 --> <Log Text="镜像名称 " Level="0"/> <Var Name="MirrorName" Value="MIRRORSET" /> <Log Text=" 虚拟IP " Level="0"/> <Var Name="VituralIP" Value="192.168.98.110/24" /> <Log Text="仲裁机IP " Level="0"/> <Var Name="ArbiterNode" Value = "192.168.98.103|2188" /> <Log Text="网卡名称 " Level="0"/> <Var Name="PrimaryNetworkAdapter" Value = "Ethernet0" /> <Log Text="主机IP " Level="0"/> <Var Name="MasterIP" Value = "192.168.98.101" /> <Log Text="主机端口 " Level="0"/> <Var Name="MasterPort" Value = "2188" /> <Log Text="主机名称 " Level="0"/> <Var Name="MasterName" Value = "IRIS01" /> <Log Text="备机网卡名称 " Level="0"/> <Var Name="BackupNetworkAdapter" Value = "Ethernet0" /> <Log Text="备机IP " Level="0"/> <Var Name="BackupIP" Value = "192.168.98.102" /> <Log Text="备机名称 " Level="0"/> <Var Name="BackupName" Value = "IRIS02" /> <Log Text="实例名称 " Level="0"/> <Var Name="InstanceName" Value = "IRISHEALTH" /> <Log Text="镜像模式: 主机1或者备机0 " Level="0"/> <!-- <Var Name="MirrorModel" Value="1" />--> <!-- 安装文件所在的目录 --> <!-- <Var Name="INSTALLERDIR" Value = "D:\deploy" /> --> <!-- 实例所在的安装目录 --> <!-- <Var Name="PRODDIR" Value = "C:\InterSystems\IRISHealth" /> --> <!-- 激活 --> <!-- 通用内存堆的大小。 --> <SystemSetting Name="Config.config.gmheap" Value="1048576"/> <!-- 通用内存堆的大小。 --> <SystemSetting Name="Config.config.locksiz" Value="134217728"/> <!-- 错误日志中的最大条目数。 --> <SystemSetting Name="Config.config.errlog" Value="10000"/> <!-- 用于缓存例程缓冲区的共享内存大小。 --> <SystemSetting Name="Config.config.routines" Value="256"/> <!-- 为 8KB 数据库缓存分配的内存 一般为内存的一半 --> <SystemSetting Name="Config.config.globals8kb" Value="1000"/> <!-- 写入图像日志文件目录。 --> <SystemSetting Name="Config.config.wijdir" Value="D:/cache/wij"/> <!-- 日志文件的主要位置。 --> <SystemSetting Name="Config.Journal.CurrentDirectory" Value="E:/cache/journal"/> <!-- 日志文件的备用位置。 --> <SystemSetting Name="Config.Journal.AlternateDirectory" Value="D:/cache/journal"/> <!-- Caché 清除已完成日志文件之前的天数 --> <SystemSetting Name="Config.Journal.DaysBeforePurge" Value="3"/> <!-- 在此连续备份数后 --> <SystemSetting Name="Config.Journal.BackupsBeforePurge" Value="3"/> <!-- 最大IRISTempSizeAtStart --> <SystemSetting Name="Config.Startup.MaxIRISTempSizeAtStart" Value="10"/> <IfDef Var="INSTALLERDIR"> <Log Text=" 激活 " Level="0"/> <Invoke Class="App.MirrorInstall" Method="ConfigureInstance" CheckStatus="0"> <Arg Value="${INSTALLERDIR},${PRODDIR}"/> </Invoke> </IfDef> <!-- 创建命名空间 --> <Log Text="BKLINIK 命名空间存在与否判断 " Level="0"/> <If Condition='(##class(Config.Namespaces).Exists("BKLINIK")=0)'> <Log Text="不存在开始创建 " Level="0"/> <Namespace Name="BKLINIK" Create="yes" Code="BKLINIKAPP" Ensemble="1" Data="BKLINIKMSG"> <Configuration> <!-- 消息的目录 --> <Database Name="BKLINIKMSG" Dir="D:/DB/BKLINIKMSG" Create="yes"/> <!-- 代码的目录 --> <Database Name="BKLINIKAPP" Dir="D:/DB/BKLINIKAPP" Create="yes"/> <!-- 配置映射 --> <ClassMapping Package="HS" From="HSLIB"/> <ClassMapping Package="HSMOD" From="HSLIB"/> <ClassMapping Package="SchemaMap" From="HSLIB"/> <RoutineMapping Routines="HS.*" From="HSLIB" /> <RoutineMapping Routines="HSMOD.*" Type="INC" From="HSLIB" /> <RoutineMapping Routines="HSMOD.*" From="HSLIB" /> <RoutineMapping Routines="SchemaMap*" Type="INC" From="HSLIB" /> <GlobalMapping Global="%SYS" From="IRISSYS" /> <GlobalMapping Global="%SYS("HealthShare")" From="HSSYS"/> <GlobalMapping Global="EnsHL7.Annotation("HealthShare_2.5")" From="HSLIB" /> <GlobalMapping Global="EnsHL7.Description("HealthShare_2.5")" From="HSLIB" /> <GlobalMapping Global="EnsHL7.Schema("HealthShare_2.5")" From="HSLIB" /> <GlobalMapping Global="IRIS.Msg("HS")" From="HSLIB" /> <GlobalMapping Global="IRIS.Msg("HSErr")" From="HSLIB" /> <GlobalMapping Global="IRIS.Msg("HSFHIRErr")" From="HSLIB" /> <GlobalMapping Global="IRIS.Msg("HSFHIRXErr")" From="HSLIB" /> <GlobalMapping Global="IRIS.MsgNames("HS")" From="HSLIB" /> <GlobalMapping Global="IRIS.MsgNames("HSErr")" From="HSLIB" /> <GlobalMapping Global="IRIS.MsgNames("HSFHIRErr")" From="HSLIB" /> <GlobalMapping Global="IRIS.MsgNames("HSFHIRXErr")" From="HSLIB" /> </Configuration> </Namespace> <Log Text="创建命名空间 BKLINIK 结束" Level="0"/> <Log Text="Production启动" Level="0"/> <Namespace Name="BKLINIK" Create="no"> <Log Text=" 设置web应用程序 " Level="0"/> <CSPApplication Url="/csp/bklinik" Directory="${CSPDIR}bklinik" AuthenticationMethods="64" IsNamespaceDefault="true" Grant="%ALL" /> <CSPApplication Url="/csp/bklinik/services" Description="" Directory="${CSPDIR}bklinik\services" Resource="" Grant="%ALL" Recurse="1" LoginClass="" CookiePath="/csp/bklinik/services" AuthenticationMethods="64"/> <Log Text=" 导入代码 " Level="0"/> <!-- 如果设置了 SourceDir 就加载其中的文件 --> <!-- <IfDef Var="SourceDir"> --> <!-- <Log Text="SourceDir已定义-从脱机安装 ${SourceDir}" Level="0"/>--> <Import File="${INSTALLERDIR}\distr\"/> <!-- 设置命名空间的Production自动启动 前提得有这个--> <!-- <Production Name="BKLINIKPKG.FoundationProduction" AutoStart="1" /> --> <!-- </IfDef> --> <Log Text=" 导入代码成功 " Level="0"/> </Namespace> </If> <Log Text=" 镜像 " Level="0"/> <IfDef Var="MirrorModel"> <Log Text="Master已定义-从脱机安装 ${主机}" Level="0"/> <If Condition='(${MirrorModel}=1)' > <!-- 创建主镜像 --> <Log Text=" 创建主镜像 " Level="0"/> <Invoke Class="App.MirrorInstall" Method="CreateMirror" CheckStatus="0"> <Arg Value="${MirrorName},${VituralIP},${ArbiterNode},${PrimaryNetworkAdapter},${MasterIP},${MasterName}"/> </Invoke> </If> <If Condition='(${MirrorModel}=0)' > <!-- 加入镜像 --> <Log Text=" 加入镜像 " Level="0"/> <Invoke Class="App.MirrorInstall" Method="JoinMirror" CheckStatus="0"> <Arg Value="${MirrorName},${MasterName},${MasterIP},${MasterPort},${BackupNetworkAdapter},${BackupIP},${InstanceName}"/> </Invoke> </If> </IfDef> </Manifest> } /// MethodName: setup <br> /// Summary: 入口点方法,您需要调用,在类编译时,它从清单生成CachéObjectScript代码之后,您可以从终端运行此安装程序: <br> /// Parameter: Set pVars("Namespace")="NewNamespace" /// Set pVars("SourceDir")="C:\deploy\distr\" /// set pVart("MirrorModel")=1 /// Do ##class(App.MirrorInstall).setup(.pVart) <br> /// Return: { Boolean } <br> /// Date: 2023年09月13日 15:39:05 <br> /// Author: 王喆 <br> ClassMethod setup(ByRef pVars, pLogLevel As %Integer = 0, pInstaller As %Installer.Installer, pLogger As %Installer.AbstractLogger) As %Status [ CodeMode = objectgenerator, Internal ] { Quit ##class(%Installer.Manifest).%Generate(%compiledclass, %code, "Install") } /// MethodName: ConfigureInstance <br> /// Summary: 激活的方法 <br> /// Parameter: { Object } <br> /// Return: { %Status } <br> /// Date: 2023年09月13日 14:24:17 <br> /// Author: 王喆 <br> ClassMethod ConfigureInstance(InstallerDir As %String, ProdDir As %String) As %Status { Set tSC = $ZF(-1,"copy "_ InstallerDir _ "\iris.key "_ProdDir_"\mgr\iris.key") Set tSC = ##class(%SYSTEM.License).Upgrade() Set tSC = $ZF(-1,"net start ISCAgent") //do ##class() Quit tSC } /// MethodName: CreateMirror <br> /// Summary: 创建镜像 <br> /// Parameter: { Object } <br> /// Return: { %Status } <br> /// Date: 2023年09月13日 14:24:52 <br> /// Author: 王喆 <br> ClassMethod CreateMirror(MirrorName As %String, VituralIP As %String, ArbiterNode As %String, PrimaryNetworkAdapter As %String, MasterIP As %String, MasterName As %String) As %Status { ZNspace "%SYS" #; Start %Service_Mirror 开启镜像服务 Set tSC = ##class(Security.Services).Get("%Service_Mirror",.properties) Set properties("Enabled")=1 Set tSC = ##class(Security.Services).Modify("%Service_Mirror",.properties) Set MirrorInfo("VirtualAddress") = VituralIP Set MirrorInfo("ArbiterNode") = ArbiterNode If "" '= MasterIP{ Set MirrorInfo("ECPAddress") = MasterIP } If "" '= PrimaryNetworkAdapter{ Set MirrorInfo("VirtualAddressInterface") = PrimaryNetworkAdapter } #; if "" '= MasterName #; Set MasterName = ##class(SYS.Mirror).DefaultSystemName() Try { Set tSC = ##class(SYS.Mirror).CreateNewMirrorSet(MirrorName,MasterName,.MirrorInfo) If $$$ISERR(tSC){ Set errobj = ##class(%Exception.General).%New() Set errobj.Name = "Error #",errobj.Code = $SYSTEM.Status.GetErrorCodes(tSC),errobj.Data = $SYSTEM.Status.GetOneStatusText(tSC,1) Throw errobj } } Catch ex { Write ex.DisplayString() } //Create Mirror Se1t //do ##class(SYS.Mirror). Quit tSC } /// MethodName: JoinMirror <br> /// Summary: 加入镜像 <br> /// Parameter: { Object } <br> /// Return: { %Status } <br> /// Date: 2023年09月13日 14:25:19 <br> /// Author: 王喆 <br> ClassMethod JoinMirror(MirrorName As %String, MasterName As %String, MasterIP As %String, MasterPort As %Integer, BackupNetworkAdapter As %String, BackupIP As %String, InstanceName As %String) As %Status { ZNspace "%SYS" //Start %Service_Mirror Set tSC = ##class(Security.Services).Get("%Service_Mirror",.properties) Set properties("Enabled")=1 Set tSC = ##class(Security.Services).Modify("%Service_Mirror",.properties) If "" '= BackupNetworkAdapter{ Set LocalInfo("VirtualAddressInterface") = BackupNetworkAdapter } If "" '= BackupIP{ Set LocalInfo("ECPAddress") = BackupIP } Try { Set SysName = ##class(SYS.Mirror).DefaultSystemName() Set tSC = ##class(SYS.Mirror).JoinMirrorAsFailoverMember(MirrorName,SysName,InstanceName,MasterIP,MasterPort,.LocalInfo) If $$$ISERR(tSC){ Set errobj = ##class(%Exception.General).%New() Set errobj.Name = "Error #",errobj.Code = $SYSTEM.Status.GetErrorCodes(tSC),errobj.Data = $SYSTEM.Status.GetOneStatusText(tSC,1) Throw errobj } } Catch ex { Write ex.DisplayString() } Quit tSC } } 3 安装清单执行 3.1 前置条件: 特别注意:windows server r2 2012 先安装2022版本的IRIS务必去微软官网下载Windows8.1-KB2999226-x64.msu并安装(必须) 预先安装 Java环境推荐Java8(必须) 服务器磁盘分区得有C盘 D盘 E盘可用(推荐) 部署包解压路径 D:\deploy(可选) 安装浏览器(可选) 3.2安装脚本 以管理员权限运行cmd,进入D://deploy 执行安装程序,其在安装时候就可以配置好镜像: 主机执行: ./IRISHealth-2022.1.2.574.0-win_x64.exe INSTALLERMANIFEST="D:\deploy\distr\MirrorInstall.xml" INSTALLERMANIFESTPARAMS="MirrorModel=1,PRODDIR=C:\InterSystems\IRISHealth,INSTALLERDIR=D:\deploy,GlobalBuffers=32768,RoutineCache=1000" INSTALLERMANIFESTLOGFILE="D:\deploy\mirrorLog.txt" INSTALLERMANIFESTLOGLEVEL="3" 备机执行: ./IRISHealth-2022.1.2.574.0-win_x64.exe INSTALLERMANIFEST="D:\deploy\distr\MirrorInstall.xml" INSTALLERMANIFESTPARAMS="MirrorModel=0,PRODDIR=C:\InterSystems\IRISHealth,INSTALLERDIR=D:\deploy,GlobalBuffers=32768,RoutineCache=1000" INSTALLERMANIFESTLOGFILE="D:\deploy\mirrorLog.txt" INSTALLERMANIFESTLOGLEVEL="3" 脚本解释: ./IRISHealth-2022.1.2.574.0-win_x64.exe // 安装程序 INSTALLERMANIFEST="D:\deploy\distr\MirrorInstall.xml" // 安装清单所在的目录 INSTALLERMANIFESTPARAMS=" // 安装的时候传入的参数 MirrorModel=1, // 1-主机 0-备机 PRODDIR=C:\InterSystems\IRISHealth, // 你想安装的目录 INSTALLERDIR=D:\deploy, // 安装文件所在的目录 GlobalBuffers=32768, // Global内存的大小 RoutineCache=1000" // Routine内存的大小 INSTALLERMANIFESTLOGFILE="D:\deploy\mirrorLog.txt" // 安装时候记录的日志位置 INSTALLERMANIFESTLOGLEVEL="3" // 日志级别 好了以上是我本次分享的关于IRIS关于Manifest的相关内容,本文只对manifest做了示例,具体的如何使用及其步骤在官网中描述的比较清楚,如果有需要大家可以去官网看看。 如果您觉得对你有帮助就给我点个赞吧,感激不尽!!!
文章
Michael Lei · 九月 20, 2023

基于IRISI对您的敏感数据进行令牌化/代币化

根据剑桥词典的解释,令牌化数据是“用令牌(=代表第一个数据的不同数据)替换隐私数据,以防止隐私信息被不被允许做的人看到”(https://dictionary.cambridge.org/pt/dicionario/ingles/tokenize)。如今,一些公司,尤其是金融和医疗保健领域的公司,正在将其数据令牌/代币化作为满足网络安全和数据隐私(GDPR、CCPA、HIPAA 和 LGPD)要求的重要策略。但是,为什么不使用加密呢?保护敏感数据的令牌化过程比数据加密更常用,原因如下: 更好的性能:在密集的操作处理中动态加密和解密数据会提高性能并需要更多的处理器能力。 测试:可以标记生产数据库并复制到测试数据库,并维护适合更真实的单元和功能测试的测试数据。 更好的安全性:如果黑客破解或获得密钥,所有加密数据都将可用,因为加密是一个可逆过程。令牌化过程是不可逆的。如果您需要从令牌化数据中获取原始数据,则需要维护一个安全且独立的数据库来链接到原始数据和令牌化数据。 令牌化架构 令牌化架构需要两个数据库:应用程序数据库(App DB)用于存储令牌化数据和来自业务的其他数据;令牌数据库(Token Database)用于存储原始值和令牌化值,因此当您需要时,您的应用程序可以获得原始值以向用户显示。还有一个 令牌生成器 REST API 用于标记敏感数据、存储到令牌数据库中并返回票证。应用程序将票据、令牌化数据和其他数据存储在应用程序数据库中。参见架构图: 分词器应用程序 了解它在令牌化应用程序中的工作原理: https://openexchange.intersystems.com/package/Tokenizator。 该应用程序是一个用于标记化的 REST API: 对任何数值显示为“*”号。示例:信用卡 4450 3456 1212 0050 至 4450 **** **** 0050。 任何真实的IP地址都是假值。示例:192.168.0.1 到 168.1.1.1。 任何人的数据都是假的。示例:地址为北京海淀的张三到地址为西藏拉萨的仓央嘉措。 任何数值为假数值。示例:300.00 到 320.00。 任何信用卡数据都是虚假的信用卡号码。示例:4450 3456 1212 0050 至 4250 2256 4512 5050。 任何值到哈希值。示例:dfgdgasdrrrdd123 的系统架构师。 正则表达式的任何值。示例:使用正则表达式规则 [AZ]{2}-\\d{5}-[az]{5} 将 EI-54105-tjfdk 转换为 AI-44102-ghdfg。 如果您需要任何其他选项,请在 github 项目上提交问题。 要对值进行标记并在之后获取原始值,请按照以下步骤操作: 打开您的 Postman 或从您的应用程序使用此 API。 使用 STARS、PERSON、NUMBER、CREDITCARD、HASH、IPADDRESS 和 REGEX 方法对此敏感数据样本创建 令牌化请求: 方法:POST 网址: http://localhost:8080/token/tokenize 正文(JSON): [ { "tokenType":"STARS", "originalValueString":"545049405679", "settings": { "starsPosition":"1", "starsQuantity":"4" } }, { "tokenType":"IPADDRESS", "originalValueString":"192.168.0.1", "settings": { "classType":"CLASS_B", "ipSize":"4" } }, { "tokenType":"PERSON", "originalValueString":"Yuri Marx Pereira Gomes", "settings": { "localeLanguage":"en", "localeCountry":"US", "withAddress":"true", "withEmail":"true" } }, { "tokenType":"NUMBER", "originalValueNumber":300.0, "settings": { "minRange":"100.0", "maxRange":"400.0" } }, { "tokenType":"CREDITCARD", "originalValueString":"4892879268763190", "settings": { "type":"VISA" } }, { "tokenType":"HASH", "originalValueString":"System Architect" }, { "tokenType":"REGEX", "originalValueString":"EI-54105-tjfdk", "settings": { "regex":"[A-Z]{2}-\\d{5}-[a-z]{5}" } } ] 查看结果。您将获得一个令牌化的数值 (tokenizedValueString) 并将其存储到本地数据库中。 从响应中复制票证(将其与令牌化化值一起存储到本地数据库中) 现在凭票证即可获得原数值。创建一个请求以使用票证获取原始值: 方法:获取 网址: http://localhost:8080/token/query-ticket/TICKET-VALUE-HERE 查看您的原始值 生成的所有令牌都存储到 InterSystems IRIS Cloud SQL 中,以便您能够可靠地获得原始值。 欢迎体验!
公告
Claire Zheng · 九月 18, 2023

InterSystems开发者社区中文版第二届技术征文大赛正式启动!

嗨,开发者们! 秋高气爽之际,我们很高兴地宣布启动🏆InterSystems开发者社区中文版第二届技术征文大赛 🏆(←点击链接进入参赛页面,浏览所有参赛文章)! 从2023年9月19日-11月24日(北京时间),欢迎热爱InterSystems技术的你来投稿,撰写与InterSystems技术相关的文章。 🎁参与奖 我们为每一位成功参赛的作者准备了礼品! 🏆优秀文章大奖 Apple AirPods Pro; Osprey Proxima Backpack; Home Office Pro Lap Desk; Sound Machine with Wireless Charger; JBL Pulse 5 Bluetooth Speaker; Sound Machine with Wireless Charger; Hammock InterSystems; Light Up Your Logo Charging Pad; InterSystems Developer Community Blanket 奖品设置 1. 专家提名奖:活动期间发布文章且成功参赛后,由InterSystems专家评选得出 🥇第一名,Apple AirPods Pro(2nd Generation w Active Noise Cancellation) 🥈第二名,Osprey Proxima Backpack 🥉第三名,Home Office Pro Lap Desk 🏆第四名-第六名,Sound Machine with Wireless Charger 2. 开发者社区奖:活动期间发布文章且成功参赛后,由社区成员点赞评选得出,点赞前五名获得以下奖品 🥇第一名,JBL Pulse 5 Bluetooth Speaker 🥈第二名,Sound Machine with Wireless Charger 🥉第三名,Hammock InterSystems 🏆第四名,Light Up InterSystems Charging Pad 🏆第五名,InterSystems Developer Community Blanket 3. 入围奖:在征文大赛期间,所有在InterSystems开发者中文社区发布文章且成功参赛的其余用户都将获得特别奖励。 请注意: 每位作者只可以获得一个奖项(即:您只可以获得一次专家提名奖/开发者社区奖/入围奖); 在“开发者社区奖”的评选过程中,当出现票数相当的平手情况时,将以专家评选投票数作为最终票数高低的判断标准。 谁可以参加? 任何开发者社区成员,除了InterSystems的员工。创建一个账户! 关键时间节点 📝 2023年9月19日-11月23日(北京时间),文章发布与点赞收集!在社区发布文章后即可开始为您的文章收集点赞。越早发布文章,就越有时间收集更多点赞(这是您获得“开发者社区奖”的关键)。 📝 2023年11月23日(北京时间),专家打分截止(专家提名奖)。在此期间,用户可继续为文章收集点赞,赢得“开发者社区奖”。 🎉 2023年11月24日(北京时间),公布获奖名单。 参赛要求 ❗️ 征文期间,发布在中文社区的文章只要满足以下要求,将自动参加比赛,无需额外提交: 文章必须与InterSystems技术有关 文章必须以中文撰写 文章必须是100%的原创文章(可以是现有文章的延续) 文章应在InterSystems开发者中文社区首发,严禁从其他社区进行搬运 文章严禁抄袭或翻译社区现有文章 社区成员可以发布多篇文章参赛 文章字数应不少于800字,写作时请关注编辑器右下角的计数器 额外奖励 您可以自由选择任何与InterSystems技术相关的主题,如果您提交的文章中符合以下要求,将获得额外奖励票数。 资源助力 ➡️ 文章样例:FHIR 在InterSystems IRIS医疗行业版的FHIR服务器上测试和开发SMART on FHIR应用 ➡️ 文章样例:互操作 IRIS如何进行CRUD操作 ➡️ 文章样例:API 使用规范优先的方式开发REST API ➡️ 文章样例:应用 FHIR创新应用示例:使用 FHIR Cloud Server 和 IRIS for Health 对妊娠糖尿病进行连续血糖监测 ➡️ 文章样例:同一主题系列文章 数据平台与三级等保第一篇 精华文章-基于docker的一体化集成ai环境中部署机器学习深度学习模型 数据平台互操作功能运行维护管理基础-互操作消息管理 互操作进阶-第二篇:规则引擎-(第一部分) 精华文章-webgateway系列1-web-gateway介绍 ➡️ 文章样例:独立主题文章 精华文章-从软件架构发展谈业务集成技术演进与展望 精华翻译文章:什么是智慧医院数字孪生? 在intersystems-iris医疗行业版的fhir服务器上测试和开发smart-fhir应用 ➡️ 操作指导:首次加入社区,如何发帖? 如何发帖以及其他常见问题解答 如何在开发者社区上发布包含代码的帖子? 如何从 Word 或 Google Docs 发布文章 如何在帖子中突出显示 ObjectScript? 如何在其他开发者社区翻译并发布帖子 ➡️ 操作指导:更多开发者社区技能学习 【精华置顶帖】一文了解关于InterSystems开发者社区的各种积分福利! ➡️ 一起来欣赏首届技术征文大赛的文章! 专家提名奖 @Zhe Wang 获奖作品:IRIS如何进行CRUD操作 @姚 鑫 获奖作品:IRIS与Caché的23种设计模式 @聆严 周 获奖作品:使用Prometheus监控Cache集群 @John Pan 获奖作品:如何调用Ensemble/IRIS内置的HL7 V2 webservice - Java,PB9,Delphi7样例 @he hf 获奖作品:10分钟快速开发一个连接到InterSystems IRIS数据库的C#应用 @sun yao 获奖作品:前端操作自动生成BS、BP、BO 开发者社区奖 @Meng Cao 获奖作品:Caché数据库私有apache版本升级 @lizw lizw 获奖作品:关于%Dictionary.CompiledClass类在实际业务中的一些应用 @Chang Liu 获奖作品:在国产系统上安装Healthconnect2021 @shaosheng shengshao 获奖作品:HEALTHSHARE2018版如何实现AES(CBC)的HEX输出,并可以实现加密和解密 @Guangliang Zhang 获奖作品:基于cconsole.log的cache数据库的实时监控 入围奖 @water huang 获奖作品:对 %XML.PropertyParameters类的探索 @zhanglianzhu zhanglianzhu 获奖作品:Cache死循环检测和申明式事务 @li wang 获奖作品:HealthConnect访问HTTPS开头地址 @bai hongtao 获奖作品:第三方HA软件结合MIRROR使用方法探讨 @Liu Tangh 获奖作品:在Cache系统中使用负载均衡服务的探讨 @yaoguai wan 获奖作品:IRIS架构的浅显理解以及windows10、docker安装IRIS Health详解流程及部分问题浅析 @li dong 获奖作品:实现Cache/IRIS中zip文件的下载、解压及读取 @Yuxiang Niu 获奖作品:Cache中不同类型锁的理解与分析 @Vincent Wu 获奖作品:TrakCare Lab之延伸应用-护理站自动采检备管系统(NSAD)之开发 快乐分享技术,期待您的大作!✨ 🏆InterSystems开发者社区中文版第二届技术征文大赛 🏆(←点击链接进入参赛页面,浏览所有参赛文章) 如果有疑问/高见,欢迎跟帖留言! 试发
文章
Michael Lei · 九月 18, 2023

开发者作品展示--几乎实现的向量支持

如今,关于大语言模型、人工智能等的消息不绝于耳。向量数据库是其中的一部分,并且已经有非IRIS的技术实现了向量数据库。 为什么是向量? 相似性搜索:向量可以进行高效的相似性搜索,例如在数据集中查找最相似的项目或文档。传统的关系数据库是为精确匹配搜索而设计的,不适合图像或文本相似性搜索等任务。 灵活性:向量表示形式用途广泛,可以从各种数据类型派生,例如文本(通过 Word2Vec、BERT 等嵌入)、图像(通过深度学习模型)等。 跨模态搜索:向量可以跨不同数据模态进行搜索。例如,给定图像的向量表示,人们可以在多模式数据库中搜索相似的图像或相关文本。 还有许多其他原因。 因此,对于这次 pyhon 竞赛,我决定尝试实现这种支持。不幸的是我没能及时完成它,下面我将解释原因。 有几件重要的事情必须完成,才能使其充实 使用 SQL 接受并存储向量化数据,简单的示例(本例中的 3 是维度数量,每个字段都是固定的,并且该字段中的所有向量都必须具有精确的维度) create table items(embedding vector( 3 )); insert into items (embedding) values ( '[1,2,3]' ); insert into items (embedding) values ( '[4,5,6]' ); 相似度函数,相似度有不同的算法,适合对少量数据进行简单搜索,不使用索引 -- Euclidean distance select embedding, vector.l2_distance(embedding, '[9,8,7]' ) distance from items order by distance; -- Cosine similarity select embedding, vector.cosine_distance(embedding, '[9,8,7]' ) distance from items order by distance; -- Inner product select embedding, -vector.inner_product(embedding, '[9,8,7]' ) distance from items order by distance; 自定义索引,有助于更快地搜索大量数据,索引可以使用不同的算法,并使用与上面不同的距离函数,以及其他一些选项 新南威尔士州 倒排文件索引 搜索将使用创建的索引,其算法将找到所请求的信息。 插入向量 该向量应该是一个数值数组,可以是整数或浮点数,也可以是有符号的或无符号的。在IRIS中我们可以将其存储为$listbuild,它具有良好的表示性,已经支持,只需要实现从ODBC到逻辑的转换。 然后,可以使用外部驱动程序(例如 ODBC/JDBC)或使用 ObjectScript 从 IRIS 内部以纯文本形式插入值 普通 SQL insert into items (embedding) values ( '[1,2,3]' ); 来自ObjectScript set rs = ##class ( %SQL.Statement ). %ExecDirect (, "insert into test.items (embedding) values ('[1,2,3]')" ) set rs = ##class ( %SQL.Statement ). %ExecDirect (, "insert into test.items (embedding) values (?)" , $listbuild ( 2 , 3 , 4 )) 或者嵌入式 SQL &sql( insert into test.items (embedding ) values ('[ 1 , 2 , 3 ]')) set val = $listbuild ( 2 , 3 , 4 ) &sql( insert into test.items (embedding ) values (:val)) 它将始终存储为 $lb(),并在 ODBC 中以文本格式返回 意外行为 在使用 DBeaver 进行测试期间,我发现连接后的第一行插入正确,但所有其他行均按原样插入,没有任何验证或转换。 然后我发现,JDBC默认使用快速插入,在这种情况下,它将插入的数据直接存储到全局变量中,所以我必须手动将其关闭 在 DBeaver 中,在 FeatureOption 字段中选择 optfastSelect 计算 我们需要向量来支持两个向量之间距离的计算 为了这次比赛,我需要使用嵌入式Python,这就带来了一个问题,如何在嵌入式Python中操作$lb。 %SYS.Class中有一个方法ToList,但Python包IRIS没有内置该方法,需要通过ObjectScript方式调用它 ClassMethod l2DistancePy(v1 As dc.vector.type, v2 As dc.vector.type) As %Decimal (SCALE= 10 ) [ Language = python, SqlName = l2_distance_py, SqlProc ] { import iris import math vector_type = iris.cls('dc.vector.type') v1 = iris.cls(' %SYS.Python ').ToList(vector_type.Normalize(v1)) v2 = iris.cls(' %SYS.Python ').ToList(vector_type.Normalize(v2)) return math.sqrt(sum([(val1 - val2) ** 2 for val1, val2 in zip(v1, v2)])) } 它看起来一点也不正确。我希望 $lb 可以在 python 中即时解释为列表,或者在列表内置函数 to_list 和 from_list 中解释 另一个问题是当我尝试使用不同的方式测试此功能时。使用嵌入式Python中的SQL,使用嵌入式Python编写的SQL函数,它会崩溃。因此,我还必须添加 ObjectScript 的功能。 ModuleNotFoundError: No module named 'dc' SQL Function VECTOR.NORM_PY failed with error: SQLCODE=-400,%msg=ERROR #5002: ObjectScript error: <OBJECT DISPATCH>%0AmBm3l0tudf^%sqlcq.USER.cls37.1 *python object not found 目前在 Python 和 ObjectScript 中实现了计算距离的函数 欧氏距离 [SQL]_system@localhost:USER> select embedding, vector.l2_distance_py(embedding, '[9,8,7]' ) distance from items order by distance; + -----------+----------------------+ | embedding | distance | + -----------+----------------------+ | [4,5,6] | 5.91607978309961613 | | [1,2,3] | 10.77032961426900748 | + -----------+----------------------+ 2 rows in set Time : 0.011 s [ SQL ]_system@localhost: USER > select embedding, vector.l2_distance(embedding, '[9,8,7]' ) distance from items order by distance; + -----------+----------------------+ | embedding | distance | + -----------+----------------------+ | [4,5,6] | 5.916079783099616045 | | [1,2,3] | 10.77032961426900807 | + -----------+----------------------+ 2 rows in set Time : 0.012 s 余弦相似度 [SQL]_system@localhost:USER> select embedding, vector.cosine_distance(embedding, '[9,8,7]' ) distance from items order by distance; + -----------+---------------------+ | embedding | distance | + -----------+---------------------+ | [4,5,6] | .034536677566264152 | | [1,2,3] | .11734101007866331 | + -----------+---------------------+ 2 rows in set Time : 0.034 s [ SQL ]_system@localhost: USER > select embedding, vector.cosine_distance_py(embedding, '[9,8,7]' ) distance from items order by distance; + -----------+-----------------------+ | embedding | distance | + -----------+-----------------------+ | [4,5,6] | .03453667756626421781 | | [1,2,3] | .1173410100786632659 | + -----------+-----------------------+ 2 rows in set Time : 0.025 s 内积 [SQL]_system@localhost:USER> select embedding, vector.inner_product_py(embedding, '[9,8,7]' ) distance from items order by distance; + -----------+----------+ | embedding | distance | + -----------+----------+ | [1,2,3] | 46 | | [4,5,6] | 118 | + -----------+----------+ 2 rows in set Time : 0.035 s [ SQL ]_system@localhost: USER > select embedding, vector.inner_product(embedding, '[9,8,7]' ) distance from items order by distance; + -----------+----------+ | embedding | distance | + -----------+----------+ | [1,2,3] | 46 | | [4,5,6] | 118 | + -----------+----------+ 2 rows in set Time : 0.032 s 另外还实现了数学函数:add、sub、div、mul。 InterSystems 支持创建自己的聚合函数。因此,可以对所有向量求和或求平均值。但不幸的是,InterSystems 不支持使用相同的名称,需要使用自己的名称(和模式)来执行函数。但它不支持聚合函数的非数值结果 简单的 vector_add 函数,返回两个矢量的和 当用作聚合时,它显示 0,而预期矢量也是 建立索引 不幸的是,由于我在实现过程中遇到了一些障碍,我没能完成这一部分。 缺乏内置的 $lb 到 python 列表转换以及当 IRIS 中的矢量存储在 $lb 中时返回,并且所有具有构建索引的逻辑预计都在 Python 中,从 $lb 获取数据并将其设置回全局变量也很重要 缺乏对Global的支持 IRIS 中的 $Order,支持方向,因此可以反向使用,而Python内嵌的 order 实现没有它,因此需要读取所有键并反转它们或将末尾存储在某处 由于对上面提到的从 Python 调用的 Python 的 SQL 函数的不好的体验而产生疑问 在构建索引期间,预计会在图形中存储矢量之间的距离,但在global里保存浮点数时遇到了bug 我在工作中发现了11 个嵌入式 Python 问题,所以大部分时间都是在寻找解决方法来解决问题。在名为iris-dollar-list的 @Guillaume.Rongier7183 项目的帮助下,我成功解决了一些问题。 安装 无论如何,它仍然可用,并且可以与 IPM 一起安装,即使功能有限也可以使用 zpm "install vector" 或者在开发模式下使用 docker-compose git clone https://github.com/caretdev/iris-vector.git cd iris-vector docker-compose up -d
公告
Michael Lei · 九月 14, 2023

InterSystems IRIS 小数点版本发布说明

有时,InterSystems 必须重新发布版本以纠正 1-2 个问题。此过程会生成称为“小数点版本”的新套件。 小数点版本与维护或功能版本不同。其目标是快速、像做外科手术地纠正该领域的紧急问题。 如何识别小数点发布 InterSystems 数据平台产品遵循以下发布约定: <系统间产品> <年份>.<专业>.<维护>.<构建号>.<点> 例如:InterSystems IRIS 2022.1.4.204.1 识别小数点版本很简单:如果产品套件的最后一位数字非零,则您正在使用小数点版本。 我如何知道是否应该更换当前的软件? 每次推出小数点版本时,InterSystems 都会向我们的客户宣布并解释其解决的问题。公告是通过我们的开发者社区 ( https://community.intersystems.com/tags/intersystems-official ) 和产品警报发布的。 每个公告都会解释该版本解决的问题和相应的修复,并提供有关是否更换套件和容器的说明。因此,请阅读公告,如果您有任何疑问,请联系我们! 注意:如果您没有收到产品警报电子邮件,请访问我们的页面并注册: https: //www.intersystems.com/support/product-alerts-advisories/
公告
Weiwei Gu · 九月 14, 2023

来认识 2023 年 8 月的InterSystems Global Masters获奖者!

是时候宣布八月份的获奖者了!请欢迎我们出色的Global Masters英雄! 热烈的掌声归于这些开发者以及他们在 8 月份为我们全球开发者社区做出的巨大贡献: 🥇@Sylvain.Guilbaud🥈@Ashok.Kumar 🥉 @罗伯特·森珀 请在下面了解有关比赛和我们的优秀获奖者的更多信息。 关于@Sylvain.Guilbaud 🔁 5 篇关于 DC 的文章翻译 📝 DC 上有 35 条评论 🎓 2 个已接受的答案 🛠 11 个Open Exchange pull请求 🏅 对 DC 上的帖子投 100 票即可获得专家作者徽章 🏅 DC 上 15 篇翻译文章获得铜译者徽章 🏅 Open Exchange 应用程序 1 个拉取请求的拉取请求贡献者徽章 🏅 在 Open Exchange 上获得 25 条评论,获得银牌 Open Exchange 审阅者徽章 恭喜,Sylvain! 经验: 自2001 年InterSystems France在法国地区开设办事处以来,Sylvain 一直担任该公司的售前工程师。作为数据库管理系统的专业工程师, Sylvain 自 1993 年以来一直参与多个软件编辑器的应用程序开发,涉及医疗领域或医疗保健最终用户,特别是在 APHP 总部。为了完善他在数据存储方面的专业知识,他随后加入了编辑器 Oracle,然后于 2001 年 6 月加入 InterSystems。因此,由于 InterSystems 的增强,他在数据处理方面的技能得到了扩展,达到了令人难以置信的速度。 其他情况: 出生于大西洋附近的南特,但很小的时候就被收养感受到了地中海的气息。文化爱好者,对音乐(只要有机会就弹钢琴)以及其他艺术和文学充满热情,尤其是从哲学角度来看,他绝对热爱世界的自然和狂野的一面。多萝西·奥柏林格 ( Dorothee OBERLINGER) 、吉米·亨德里克斯 (Jimi HENDRIX )、扮演瓦伦丁·西尔维斯特罗夫(Valentin SILVESTROV)的海伦·格里莫(Hélène GRIMAUD)、 《黑色安息日》 、奥菲莉·盖拉德、 《王肫与蜥蜴巫师》中的希拉怪物、刘小龙、泰姬陵、《鱼骨中的异果》 、埃曼纽尔·哈伊姆、乌鲁鲁岩来自Earthless的Alain PLANÈS 、来自Mulatu Astatke的Yèkèrmo Sèw 、 Dave van Ronk 、 Tom WAITS 、 Michel PETRUCCIANI或有史以来听过的最美丽的音乐之一,等等。 🔗立即与 Sylvain 联络,拓展您的技术人脉网络: 领英 开发者社区 关于@Ashok.Kumar 📝 DC 上有 4 个帖子和 21 条评论 🎓 8 个已接受的答案 💻 Open Exchange 上的 3 个应用程序 🏅在 Open Exchange 上发表 10 条评论即可获得铜牌 Open Exchange 审阅者徽章 🏅 DC 上接受 5 个答案即可获得答案大师徽章 🏅 DC 上 1 个问题即可获得 InterSystems 研究员徽章 🏅 DC 上 1 条评论可获得 DC 评论者徽章 🏅 1 篇 DC 文章的 DC 作者徽章 🏅 InterSystems Open Exchange 开发人员在 Open Exchange 上开发 1 个应用程序 恭喜,Ashok! 您从事这个职业/行业多久了? “我在系统间产品领域担任软件工程师已超过 9 年。我的职业生涯始于缓存开发人员。” 您的主要专业领域是什么? “HL7/FHIR 集成在分析、设计、实施和维护应用程序方面拥有丰富的经验。” 你从哪来? “我在印度出生和长大” 🔗立即与 Ashok 联系以拓展您的技术人脉网络: 开发者社区 关于@罗伯特·森珀 📝 DC 上有 5 个帖子和 41 条评论 🎓 11 个已接受的答案 💻 5 个 OEX 应用程序 🛠 11 个开放交换请求 恭喜,罗伯特! Robert C. Cemper是达姆施塔特 InterSystems 的前高级售前工程师。他在这个行业已经有 45 年的经验,并且直接在 InterSystems 工作了超过 12 年。个人使命宣言:“对于工程师来说‘不可能’并不存在” 在这篇文章中阅读完整且鼓舞人心的罗伯特的简历。 🔗 立即在开发者社区与 Robert 联系,以拓展您的技术人脉网络。 感谢所有获奖者对 InterSystems 开发者社区不断做出的巨大贡献! 让我们在下面的评论中祝贺我们的英雄! 关于全球大师倡导者中心的本月全球大师Global masters竞赛:我们每个月都会提名通过高度参与全球大师和开发者社区而付出额外努力的倡导者。获胜者将获得 1000 积分和特殊徽章。我们还为获奖者提供发布他们的简历的机会——现在在开发者社区的文章中!
文章
Weiwei Gu · 九月 14, 2023

容器中的 InterSystems IRIS

InterSystems 还发布了容器化部署的IRIS。这篇文章旨在演示 InterSystems IRIS 和依赖 IRIS 后端的应用程序如何打包到镜像中并在容器中的其他计算机中运行,以及这样做有多么简单。 容器运行包含所有必需的可执行文件、二进制代码、库和配置文件的镜像。镜像可以从一台机器移动到另一台机器,像 Docker Hub 这样的镜像存储库可以简化这个过程。 我在本演示中使用了 Open Exchange 的应用程序。 演示视频: https://www.loom.com/share/93f9a760b5f54c0a8811b7a212387b9d IRIS 数据平台社区版的镜像(image)可以在 InterSystems 容器注册表中找到: https: //containers.intersystems.com/contents 为了在主机中使用 IRIS 的容器化实例,应在运行时拉取它。 为此,Dockerfile 需要具有以下命令,如下所示: Dockerfile: Dockerfile ARG IMAGE=intersystemsdc/iris-community:preview FROM $IMAGE RUN iris start IRIS \ && iris merge IRIS /tmp/merge.cpf \ && iris stop IRIS quietly 这些是编写 Dockerfile 来构建镜像的基本命令,该镜像包含容器化 IRIS 的说明。 还可以添加用于安装与 IRIS 容器化实例一起运行的应用程序所需的其他依赖项的命令。 给出的 Docker 命令标记并推送带有 IRIS 实例的镜像到 Docker Hub,然后在另一台主机中拉取并运行该镜像。 命令 commands docker build -t image_name filepath docker tag image_name dockerhub_username/repository_name:tag_name docker push dockerhub_username/repository_name:tag_name 命令 commands docker pull dockerhub_username/repository_name:tag_name docker run --name test -p host_8080:52773 padhikar/irisincontainer:main 演示中使用的应用程序: https://openexchange.intersystems.com/package/iris-geo-map 创建 InterSystems IRIS 镜像: https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls ?KEY=ADOCK#ADOCK_iris_creating