#InterSystems IRIS

0 关注者 · 921 帖子

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

文章 姚 鑫 · 八月 5, 2024 2m read

第一章 修改 Web 客户端

修改 Web 客户端

生成 Web 客户端类后,通常不需要编辑该类。相反,需要编写代码来创建该类的实例并提供客户端错误处理。本主题讨论了微调 Web 客户端的各种方法,可以通过修改 Web 客户端实例或(不太常见)修改生成的类来实现。

注意:不要创建生成的 Web 客户端类的子类。编译器不会生成正常运行所需的支持类,因此子类将无法使用。

禁用 Web 客户端的 Keep-Alive

默认情况下,如果重复使用 Web 客户端实例来发送多条请求消息,IRIS 会在一次 HTTP 传输中发送所有消息(使用 HTTP 1.1 保持活动连接)。具体来说,IRIS 保持 TCP/IP 套接字打开,这样 IRIS 就无需关闭并重新打开它。要禁用此保持活动行为,请执行以下操作之一:

  • 终止 Web 客户端实例并创建并使用一个新的。
  • 发送第一条消息后,将客户端的 HttpRequest.SocketTimeout 属性设置为 0。例如:
Set client.HttpRequest.SocketTimeout=0

注意:如果正在使用 WS-ReliableMessaging 并使用 SSL/TLSWeb 服务通信,请不要禁用保持活动。有关 WS-ReliableMessaging 的信息,请参阅保护 Web 服务。

控制空字符串参数的形式

0
0 93
文章 YuCheng Hu · 八月 1, 2024 3m read

针对 InterSystems IRIS 数据库的一些基本概念。

InterSystems IRIS 是什么

InterSystems IRIS 是基于 Caché/M 语言开发的一个数据库,这个数据库被大量使用在医疗系统中,也是北美地区医疗系统病历和文件管理中默认使用的事实标准。

Caché/M 是什么

Caché/M 是 MUMPS 程序语言 开发的数据库,Caché/M 提供了代码接口,可以直接使用 Caché/M 对数据库来进行操作。

Caché 是一个法语单词,但是又非常容易和英语使用的 Cache 搞混,所以大部分时候使用的是 Caché/M 来表达。

M 表达的意思是 Mumps 程序语言,简称 M 语言,Caché 使用 M 语言构建了不少函数。

InterSystems IRIS 不是开源数据库

因为涉及到医疗系统数据的使用,所以 InterSystems IRIS 并不是一个开源的数据库,你可以使用下面的链接:Evaluate InterSystems Products 8 来下载评估版本。

本文就是根据下载的链接来进行 Windows 安装的教程。

上面的页面在下载之前,你需要进行注册,并且提供你的信息。

双击运行

当下载完成后,可以双击运行安装程序。

我们会看到下面的安装界面:

同意许可协议后,单击下一步继续安装。

配置实例名

我们在这里使用默认的就可以,通常使用的 IRIS。

选择安装目录

0
0 408
文章 姚 鑫 · 七月 27, 2024 1m read

第五章 控制 xsi:type 属性的使用

控制 xsi:type 属性的使用

默认情况下, SOAP 消息仅包含顶级类型的 xsi:type 属性。例如:

<?xml version="1.0" encoding="UTF-8" ?>
...
<types:GetPersonResponse>
<GetPersonResult href="#id1" />
</types:GetPersonResponse>
<types:Person id="id1" xsi:type="types:Person">
<Name>Yeats,Clint C.</Name>
<DOB>1944-12-04</DOB>
</types:Person>  
...

在这些示例中,已添加换行符以提高可读性。要将此属性用于 SOAP 消息中的所有类型,请将 OUTPUTTYPEATTRIBUTE 参数或 OutputTypeAttribute 属性设置为 1。相同的输出将如下所示:

0
0 81
文章 Michael Lei · 七月 25, 2024 1m read

InterSystems 常见问题FAQ 

要编译包含映射修饰符的类rountine,请指定编译器修饰符“/mapped=1”或“/mapped”。例如,执行以下操作:

[示例 1] 获取类列表并编译

do$System.OBJ.GetClassList(.list,"/mapped")
 // build your classes starting from .listdo$System.OBJ.Compile(.list) 

[示例 2] 编译所有类 

do$system.OBJ.CompileAll("/mapped") 
0
0 121
文章 光辉 赵 · 七月 23, 2024 6m read

FHIR是标准,是规范,使用FHIR使大家可以使用同一种语言、语义进行交流,名称、API都是统一的,只要符合FHIR标准,任何系统都可交互。对业务开发者来说,大部分接口交互的定义交给FHIR来处理,效率大大提高。

1
0 203
文章 Michael Lei · 七月 18, 2024 1m read

InterSystems 常见问题系列

可以通过 TRY-CATCH 来完成:

#dim ex As%Exception.AbstractExceptionTRY {
    //Code that causes an error
  }
  CATCH ex {
     do ex.Log()
  }

如果用了 ^%ETN, 从BACK 接入点 (BACK^%ETN)处调用.

请参考另外一篇文章: 如何使用命令获得应用错误 (^ERRORS)

0
0 133
文章 Hao Ma · 三月 25, 2021 8m read

关键字:PyODBC,unixODBC,IRIS,IntegratedML,Jupyter Notebook,Python 3

目的

几个月前,我简单谈到了关于“将 Python JDBC 连接到 IRIS”的话题。我后来频繁提起它, 因此决定再写一篇 5 分钟的笔记,说明如何“将 Python ODBC 连接到 IRIS”。

在 Windows 客户端中通常很容易设置 ODBC 和 PyODBC,不过我每次在 Linux/Unix 风格的服务器中设置 unixODBC 和 PyODBC 客户端时,都会遇到一些麻烦。

有没有一种简单连贯的方法,可以不安装任何 IRIS,在原版 Linux 客户端中让 PyODBC/unixODBC 针对远程 IRIS 服务器运行?

范围

最近,我花了点时间研究如何在 Linux Docker 环境的 Jupyter Notebook 中从头开始让一个 PyODBC 演示运行起来, 记录下这篇稍微有些繁琐的笔记,以供日后快速参考。  

范围内: 

这篇笔记将涉及以下组件:

  • PyODBC over unixODBC 
  • 安装了 TensorFlow 2.2 和 Python 3 的 Jupyter Notebook 服务器
  • 带有 IntegratedML 的 IRIS2020.3 CE 服务器,包括示例测试数据。
  • 在此环境中

    1
    0 514
    问题 y g · 七月 16, 2024

    ubuntu系统中,查询到的数据都是空字符串

     python3 httpTest2.py
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')
    ('', '', '', '', None, '')

    代码如下
    import pyodbc
    import requests

    driver = '/usr/irisodbc/bin/libirisodbc35.so'
    server = 'xx'
    database = 'xx'
    username = 'xx'
    password = 'xx'
    port = 'xx'

    0
    0 84
    文章 Yongfeng Hou · 十一月 23, 2023 3m read

            IRISHealth以其完备且系统化的安全特性在医疗行业的数据库中独树一帜,这些特性包括安全认证、安全授权、安全审计、数据加密以及安全配置。其中数据传输无疑是其中最重要的一环。为此,IRISHealth采用了SSL/TLS技术来对传输的数据进行加密,有效保障了从IRIS数据平台的超级服务数据传输、Telnet服务数据传输、java/.net/Studio客户端的访问数据传输、MIRROR与DB的数据传输,到DBServer和ECPApp之间的数据传输的安全性。


            本文是在两个IRISHealth2021实例之间进行ECP服务通信的示例,一个作为DBServer,一个作为ECPApp,两个实例之间通过使用SSL/TLS的ECP协议进行TCP的加密传输通信。

    1.IRIS的DB和ECP环境:

    DBServer 

    ECPApp

    10.1.30.231  10.1.30.232

     

    2. CA证书的环境:

    5
    3 413
    文章 Michael Lei · 七月 11, 2024 1m read

    在当今充满活力的医疗保健行业,获取全面、精简的医疗记录对于做出明智的决策至关重要。人工智能驱动的健康图表应用程序是一个开创性的解决方案,旨在为医生提供一种获取和理解健康数据的有效方式。

    主要功能

    - 全面的数据检索: 健康图表应用程序通过提取各种健康数据,包括过敏症、病情、手术、免疫接种、药物、家族史、社会史、生命体征和化验结果,超越了传统记录。这种全面的视角可以让人们深入了解患者的健康历程。

    - 通过人工智能增强洞察力:通过利用人工智能的力量,Health Chart 应用程序可以智能处理数据。人工智能引擎将原始信息转化为可操作的洞察,生成健康摘要和风险评估。这不仅节省了医生的宝贵时间,还提高了患者护理质量。

    公司介绍:https://www.prairiebyte.com

    软件试用

    目标使用者--临床医生

    类别--护理协调, 数据可视化, 疾病管理/基层医疗

    应用程序类型--SMART ON FHIR应用程序

    FHIR 版本--R4

    支持的电子病历系统--Cerner、Epic等支持FHIR API的软件系统

    0
    0 243
    文章 Michael Lei · 七月 7, 2024 1m read

    InterSystems 常见问题系列FAQ

    如果要让超时功能失效, 在DSN设置查询超时为disabled:

    Windows Control Panel > Administrative Tools > Data Sources (ODBC) > System DSN configuration

    如果勾选了Disable query timeout , 超时就会失效.

    如果想在应用侧修改,你可以在ODBC API 层设置:在连接数据源之前,调用ODBC SQLSetStmtAttr功能设置SQL_ATTR_QUERY_TIMEOUT 属性 

    0
    0 195
    文章 Michael Lei · 七月 7, 2024 1m read

    InterSystems 常见问题FAQ

    如果您想在InterSystems 产品启动时执行一个操作系统可执行文件,命令或者程序,可以在SYSTEM^%ZSTART routine里面写明流程 ( %ZSTART routine在 %SYS 命名空间里面创建).

    在 SYSTEM^%ZSTART 里面写代码之前, 请确保他可以在任何情况下能正常工作

    如果 ^%ZSTART routine 写的不对,或者没有响应或者发生错误,InterSystems 产品可能会无法启动。

    更多信息,请参考一下文档。

    About writing %ZSTART and %ZSTOP routines [IRIS]
    About writing %ZSTART and %ZSTOP routines

    0
    0 124
    文章 Michael Lei · 七月 7, 2024 4m read

    InterSystems  常见问题系列FAQ

    InterSystems 产品里数据 (表、对象、实例数据) 是存在global 变量里的。
    每个global 的数据大小可以从管理门户中中点击属性查看Management Portal > System > Configuration > Local Database > Globals page, 然后在global 属性页点击计算大小Calculate Size 按钮。
    你可以在终端上调用^%GSIZE  来在命名空间里显示数据大小,方法如下.

    0
    0 153
    文章 Louis Lu · 七月 1, 2024 2m read

    在 OEX 最近一次编程竞赛之后,我有一些令人惊讶的发现。
    几乎所有的应用程序都是基于人工智能与预制 Python 模块的结合。
    但深入研究后发现,所有示例都使用了 IRIS 的相同技术组件。

    从 IRIS 的角度来看,无论是搜索文本还是搜索图像或其他模式都是一样的。 其底层基本都是一样的。

              这让我想起了我家里的情况。我的妻子和女儿对家里的大量裙子、衬衫和其他衣服的信息进行了整理。
              但无论如何进行整理、分类、归档,我依然通过和我的妻子和女儿说话,来确定我的穿着。
               无论怎样包装,其结果都是如此。

    回到这次竞赛比赛:
    同样的 IRIS 技术内容,却有很多花哨的包装。
    每个人都在同一条高速公路上奔跑。没有人提到它有什么限制。

    于是我试着深入挖掘,找出新数据类型 VECTOR 的使用限制。
    所有向量都有两个基本参数
      - 静态 DATATYPE:"整型integer"(或 "int")、"double"、"十进制decimal"、"字符串 "和 "时间戳"。
      - 半动态 LEN(gth): > 0 通常也称为 POSITION;纯整数。

    0
    0 122
    文章 Louis Lu · 七月 1, 2024 4m read

    迄今为止,我看到的大多数使用向量vector的示例,将它只作为 SQL 中的一种功能,尤其是围绕 VECTOR_Search 的 3 个函数。
    * TO_VECTOR()
    * vector_dot_product ()
    * vector_cosine ()

    iris-vector-search 演示包中隐藏着一个非常有用的摘要。
    从那里,你可以通过多个链接找到所需的一切。

    我还缺少更多的 VECTOR 方法,于是在 Idea Portal 上提出了相关请求。

    接着,我想起每个 SQL 方法或存储过程都有一堆 ObjectScript 代码。
    于是我开始搜索,下面就是我的研究的一些总结:

    %Library.Vector 是对新数据类型的核心描述
          这是一种复杂的结构,就像对象或 %DynamicObjects 或 $Bit Expressions 一样,需要特定的方式去访问。
    我们还可以看到 2 个必备参数: 
          * DATATTYPE - 一旦设置就不能更改。 可接受的类型:  "整数integer"(或 "int")、"双精度浮点double"、"十进制decimal"、"字符串 "和 "时间戳"。
          * LEN >0 时,可以增长,但绝对不能缩小

    0
    0 130
    文章 Louis Lu · 六月 30, 2024 1m read

    你可以使用List query 对 %SYS.Audit 查询审计日志,代码如下:

    Set statement=##class(%SQL.Statement).%New()  
     Set status=statement.%PrepareClassQuery("%SYS.Audit","List")
     Set rs=statement.%Execute()  
     Set tab = $char(9)
     While rs.%Next() {    
       Write rs.%Get("TimeStamp")_tab_rs.%Get("Event")_tab_rs.%Get("Username"),!      
     }
    0
    0 97
    文章 Nicky Zhu · 六月 29, 2024 8m read

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

    创建Schema

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

    Class Prototype.DB.Patients Extends %Persistent [ DdlAllowed ]
    {
    
    Property Name As %String;
    
    Property Title As %String;
    
    Property Gender As %String;
    
    Property DOB As %String;
    
    Property Ethnicity As %String;
    }
    

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

    定义 REST 服务

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

    0
    0 255
    文章 Jingwei Wang · 六月 23, 2024 8m read

    低代码挑战

    想象一下那个场景。您正在 Widgets Direct 愉快地工作,这是互联网上首屈一指的小部件和小部件配件零售商。您的老板有一些毁灭性的消息,一些客户可能对他们的小部件不太满意,我们需要一个帮助台应用程序来跟踪这些投诉。为了让事情变得有趣,他希望代码占用非常小,并挑战您使用 InterSystems IRIS 以少于 150 行代码交付应用程序。这可能吗?

    免责声明:本文记录了一个非常基本的应用程序的构建,为了简洁起见,省略了安全性和错误处理等细节。该应用程序仅供参考,不得用于任何生产应用。本文使用IRIS 2023.1作为数据平台,并非所描述的所有功能在早期版本中都可用

    第 1 步 - 定义数据模型

    我们首先定义一个新的干净的命名空间 - 带有代码和数据数据库。虽然所有内容都可以位于 1 个数据库中,但将它们拆分以便于数据刷新。

    我们的帮助台系统需要 3 个基本类:一个 Ticket 对象,它可以包含用于记录员工顾问 UserAccount 和客户联系人 UserAccount 之间交互的操作。让我们用一些基本属性来定义它们:

    0
    0 184
    文章 Louis Lu · 六月 11, 2024 8m read

    这篇文章介绍了使用由支持 langchain 框架的IRIS来实现问答聊天机器人,其重点介绍了检索增强生成(RAG)。

    文章探讨了IRIS中的向量搜索如何在langchain-iris中完成数据的存储、检索和语义搜索,从而实现对用户查询的精确、快速的响应。通过无缝集成以及索引和检索/生成等流程,由IRIS驱动的RAG应用程序使InterSystems开发者能够利用GenAI系统的能力。

    为了帮助读者巩固这些概念,文章提供了Jupyter notebook一个完整的问答聊天机器人应用程序,以供参考。

    什么是RAG以及它在问答聊天机器人中的角色

    RAG,即检索增强生成,是一种通过整合超出初始训练集的补充数据来丰富语言模型(LLM)知识库的技术。尽管LLM在跨不同主题进行推理方面具有能力,但它们仅限于在特定截止日期之前训练的公共数据。为了使AI应用程序能够有效处理私有或更近期的数据,RAG通过按需补充特定信息来增强模型的知识。这是一种替代微调LLM的方法,微调可能会很昂贵。

    在问答聊天机器人领域,RAG在处理非结构化数据查询中发挥着关键作用,包括两个主要组成部分:索引和检索/生成。

    索引从数据源摄取数据开始,然后将其分割成更小、更易于管理的块以进行高效处理。这些分割的块随后被存储和索引,通常使用嵌入模型和向量数据库,确保在运行时能够快速准确地检索。

    0
    0 418
    文章 Louis Lu · 六月 10, 2024 2m read

    列式存储是 InterSystems IRIS 提供的一项较新的技术。与传统的基于行的存储不同,它通过将数据存储在列而不是行中来优化查询处理,从而实现更快的访问和检索相关信息。

    下面是使用SQL创建此类表的例子

    CREATETABLEtable (column1 type1, column2 type2, column3 type3) WITH STORAGETYPE = COLUMNAR  -- ex 1CREATETABLEtable (column1 type1, column2 type2, column3 type3 WITH STORAGETYPE = COLUMNAR)  -- ex 2

    我们知道InterSystems IRIS 是支持多模型的DMBS, 它可以无缝的通过关系型或对象的方式访问通一数据,

    我们使用下面的方式在使用Object Script类定义的时候定义列存储:

    1. 如果你想对类中的所有属性都定义为列存储,则直接通过在类中添加parameter 的方式实现:

    Parameter STORAGEDEFAULT = "columnar"

    如前面的例子,我们使用object script定义就会是这样:

    0
    0 195
    问题 Tom Ming · 五月 14, 2024

    VIP:192.168.30.111,故障转移节点一(192.168.30.10),故障转移节点二(192.168.30.11),ECP地址192.168.30.100

    在配置时ECP里增加数据服务器IP为【主】故障转移节点一(192.168.30.10)【文档说不能使用VIP地址】后,

    如果主从切换。ECP里的数据服务器IP,会自动变换成故障转移节点二(192.168.30.11)【此时为主】吗?

    如果不能,需要手动变更吗?还是不需要?

    2
    0 119
    InterSystems 官方 Claire Zheng · 五月 30, 2024

    从发布InterSystems IRIS®数据平台2022.3开始,InterSystems修改了许可证强制执行机制,以包括REST和SOAP请求。由于这种变化,在升级后,使用REST或SOAP的非处理器核数的许可证环境下,用户可能会遇到更高的许可证消耗。要确定此警报是否适用于您的InterSystems许可证,请按照下面链接的FAQ中的说明进行操作。

    下表总结了强制执行变更情况:

    产品

    许可证强制执行中是否包含REST & SOAP 请求?

    InterSystems Caché®

    InterSystems Ensemble®

    InterSystems IRIS, InterSystems IRIS® for Health, and Health Connect prior to 2022.3

    InterSystems IRIS, InterSystems IRIS for Health, and Health Connect 2022.3 and later

    1
    0 177
    文章 Hao Ma · 五月 17, 2024 3m read

    最近有某国内三甲医院为满足评级和飞行检查要求,希望提升HIS和IRIS的SQL查询效率,客户和实施工程师整理了一个慢查询的SQL列表, 有一些查询比较慢, 查询时间在甚至大于60分钟。

    在我们和厂商共同努力下,对整个库的SQL查询做了优化。 下表是记录了我们在进行了大部分优化工作后的结果,您可以看到大多查询从几十分钟减少到了几十秒甚至1秒以内。其中有几个慢到几分钟的查询,最后经过细调, 也把查询耗时减少到了一分钟以内。 优化的效果还是很明显的。

    这里我分享一下操作的要点,以便给其他有同样问题的客户一个思路。

    其实如果您看过我前面的帖子,应该已经有了基本的概念。我就把工作流程总结一下,其实就这么几个步骤:

    步骤一:

    检查硬件配置。 配置中和SQL性能相关的有这么几个: 1. 数据缓存大小,应该至少为物理内存的一半以上。 2. BBSIZE, 也就是单个进程最大的内存占用,对应不同的Caché/IRIS版本和不同的应用,这个配置有区别,但当然是越大越好,询问您的实施工程师配置是否正确。 3. 是否使用了大页内存,这个能从messages.log里看到。

    步骤二

    执行Tunetable。 在上面说的这个客户的系统上从来没人执行过Tunetable, 因此SQL引擎其实是没法正确工作的。执行后基本可以解决80%的慢SQL问题。时间短风险小见效快, 找个半夜业务小的时候直接在生产环境执行。

    0
    0 384
    InterSystems 官方 Claire Zheng · 五月 15, 2024

    InterSystems 很高兴地宣布现已推出:

    • InterSystems IRIS Data Platform 2024.1.0.267.2
    • InterSystems IRIS for Health 2024.1.0.267.2
    • HealthShare Health Connect 2024.1.0.267.2

    该版本新增了对 Ubuntu 24.04 操作系统的支持。Ubuntu 24.04 包括 Linux 内核 6.8、安全性改进以及安装程序和用户界面改进。 InterSystems IRIS IntegratedML 在 Ubuntu 24.04 上尚不可用。

    此外,该版本还解决了所有平台的两个缺陷:

    • 修复了某些使用 "NOT %INLIST "的 SQL 查询返回错误结果的问题。我们以前曾就此错误发出过警告
    • 修正了某些特定情况下堆栈跟踪不完整的问题。

    如何获取软件

    与往常一样,Extended Maintenance (EM) 版本附带适用于所有支持平台的经典安装包,以及 Docker 容器格式的容器镜像。有关完整列表,请参阅 "受支持的平台 "页面。

    经典安装包

    安装包可从 WRC 的 "Extended Maintenance Releases"页面获取。此外,还可在Evaluation Services上找到安装包。

    容器

    0
    0 135