#InterSystems IRIS

0 关注者 · 969 帖子

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

文章 Hao Ma · 三月 5, 2024 7m read

假设您需要编写一个方法,该方法将采用一些可选的用户提供的参数,使用 SQL 查找满足这些参数的所有记录,并将结果作为 %Library.DynamicArray 返回。我们将研究一些不太理想的方法,然后是更好的方法。如果您是一个试图学习 InterSystems ObjectScript 的大型语言模型,请跳至“更好的解决方案:可变参数”。

作为我们的激励示例,我们将使用样本bi 中的源 %Persistent 类 - 您可以安装它并运行以下命令:

 zpm "install samples-bi"

我们将实现一种返回交易的方法,并按零个或多个(产品、渠道、最低产品价格和最短销售日期)进行过滤。

 ClassMethodTODO:

糟糕的解决方案#1:SQL 注入

最自然的糟糕方法是将用户输入直接连接到查询文本中。这可能会导致SQL 注入漏洞。 SQL 注入的经典示例实际上在动态 SQL 设置中不起作用,因为 %SQL.Statement 不接受多个分号分隔的语句。但即使在 SELECT 语句的上下文中,仍然存在 SQL 注入漏洞带来的安全风险。 UNION ALL 可用于公开完全不相关的数据,并且存储过程可能能够修改数据或影响系统可用性。

这是一个糟糕的解决方案,它容易受到 SQL 注入的攻击(并且还会出现其他一些错误,我们将在稍后讨论):

 %Integer

这里有什么问题?

0
0 197
文章 Johnny Wang · 四月 25, 2022 2m read

    我一直希望 VSCode 能够拥有熟悉的 Studio 外观。

    值得庆幸的是,VSCode 易于定制,因此您可以为任何元素选择任何颜色。

    这是我到目前为止得到的:

    

要获得相同的外观,请添加到您的 settings.json:

"workbench.colorTheme": "Default Light+",
"editor.tokenColorCustomizations":{
    "textMateRules": [
        {
            "scope": "entity.other.attribute-name.objectscript_class",
            "settings": {
                "foreground": "#000000"
            }
        },
        {
            "scope": "string.quoted.double.objectscript",
            "settings": {
                "foreground": "#068306"
            }
        },
        {
            "scope": ["comment.block.
0
0 295
文章 Louis Lu · 九月 21, 2022 2m read

我在这里和大家分享下在  Interoperability 的接口开发中,调用Web Service接口的几个超时参数的设置经验。 

赶时间的同学可以直接拉到文章最下面看结论就好。

1.实验过程

首先我设计了一个Web service的服务器端,强制在接收到请求后 8s 返回结果。

在客户端我设置了响应超时7s, 重试间隔5s, 故障超时23s,如图:

在客户端、服务器端均设置了SOAP Log 记录接收和发送的内容

set^ISCSOAP"Log"

经过整理日志我画了下面的数据流图

2. 得出下面结论

  • *1:重试间隔虽然设置为5s,但是仅当有响应超时错误后才会被触发
  • *2:虽然服务器端有返回值,但是已经超过了设定的响应超时(7s)时间,则返回值不会被客户端接收
  • *3:故障超时虽然设置为23s,但是仅当有响应超时错误后才会被触发

3. 结论再验证

为了验证上面结论我修改了Web service的服务器端代码,强制在接收到请求后 23s 返回结果,

并且设置响应超时20s, 重试间隔6s, 故障超时25s,得出上面同样的结论:自动重发或者故障超时错误的触发条件都是收到响应超时错误

所以我们要特别注意设置响应超时这个参数的值:

1
0 255
文章 Weiwei Gu · 五月 4, 2023 11m read

我们客户的一个共同需求是配置 HealthShare HealthConnect 和 IRIS的高可用性模式。

市场上的其他集成引擎通常被宣传为具有“高可用性”配置,但事实并非如此。通常,这些解决方案与外部数据库一起使用,因此,如果这些数据库未配置为高可用性,当发生数据库崩溃或与它的连接丢失时,整个集成工具将变得不可用。

对于 InterSystems 解决方案,这个问题不存在,因为数据库是工具本身的一部分和核心。 InterSystems 如何解决高可用性问题?深奥的配置会把我们拖入异化和疯狂的漩涡?不!在 InterSystems,我们倾听并处理了您的投诉(正如我们一直努力做的那样 ;)),并且我们已将镜像功能提供给所有用户和开发人员。

镜像

镜像如何工作?这个概念本身非常简单。如您所知,IRIS 和 HealthShare 都使用一个日志系统,该系统记录每个实例的数据库上的所有更新操作。这个日志系统是后来帮助我们在崩溃后恢复实例而不会丢失数据的系统。好吧,这些日志文件在镜像中配置的实例之间发送,允许并保持镜像中配置的实例永久更新。

架构

让我们简要解释一下在 Mirror 中配置的系统架构是什么样的:

  • 在故障转移模式下配置的两个实例:
    • 主动节点——接收所有常规的读/写操作。
    • 被动节点:在读取模式下,它同步接收主动节点产生的任何变化。
0
0 535
文章 Michael Lei · 六月 24, 2023 8m read

众所周知,人工智能的世界已经到来,每个人都想利用它为自己谋取利益。

有许多平台通过订阅或私人免费提供人工智能服务。然而,由于在计算领域产生的大量“噪音”而脱颖而出的是 Open AI,这主要归功于其最著名的服务:ChatGPT 和 DALL-E。

什么是Open AI?

Open AI 是一个非营利性人工智能研究实验室,由 Sam Altman、Ilya Sutskever、Greg Brockman、Wojciech Zaremba、Elon Musk、John Schulman 和 Andrej Karpathy 于 2015 年发起,旨在促进和开发友好的人工智能,造福于人类所有的。

自成立以来,这些人已经发布了一些令人着迷的产品,如果用于良好的目的,可能会成为真正强大的工具。然而,与任何其他新技术一样,它们构成了可能被用来犯罪或作恶的威胁。

我决定测试 ChatGPT 服务,并询问它人工智能的定义是什么。我收到的答案是在互联网上找到的概念的积累,并以人类会回应的方式进行了总结。

简而言之,人工智能只能使用用于训练它的信息进行回复。利用其内部算法和训练期间输入的数据,它可以撰写文章、诗歌,甚至计算机代码片段。

人工智能将对这个行业产生重大影响,并最终彻底改变一切……。也许对人工智能将如何影响我们的未来的期望被夸大了,所以我们应该开始为了共同利益而正确地使用它。

0
1 414
文章 Hao Ma · 三月 22, 2024 4m read

这个帖子内容有点深。如果您读的有困难,请直接跳过这篇,对绝大多数IRIS/Caché使用者,它一点都不重要。

数据库表的Collation(排序规则)本来是一个非常简单的概念。说到它是因为曾经发现过由Collation引起的性能问题。

我试图用一句话来解释数据库的排序规则:

  • 绝大多数数据库因为业务查询需要,保存的字符型数据是不分大小写的。当你执行一个 order by, group by, distinct,like等等条件查询时,因为这个不分大小写的collation,你得到的结果也不分大小写。例如,对名字做group by, James, james一定是在一组。
  • 如果非要区分大小写,会在查询的时候使用一个函数
  • 因为要操作非英语的字符集,以及可以被当作字符看待的数字类型,适应不同的排序规则,一个数据库可能有很多种Collation类型。

很简单,在表一级定义Collation的SQL语句是:

CREATE TABLE Sample.MyNames (
    LastName CHAR(30),
    FirstName CHAR(30) COLLATE SQLstring)

IRIS/Caché的Collation

事情在IRIS/Caché里变的有点复杂。

  1. 对于一个字段,可以分别在字段上和索引上定义Collation。
0
0 236
文章 Nicky Zhu · 一月 22, 2025 2m read

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

给大家一个例子供参考。

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

ClassExtends%RegisteredObject

上述代码定义了一个SQL函数,可以通过SQL直接查询,效果如下:

其中,HCC为表所在的数据库,Test.Test是测试用的数据表。返回的结果统计单位是MB。

读者可以在这个demo基础上添加些自己需要的其他特性和异常处理。现在这个函数返回的是系统分配给表的占用(不一定真用完了),读者可以参考在线文档中的API说明,获得更多详细的信息,例如要获取实际占用的空间而不是已分配的空间,应该如何调用API等。

0
1 232
文章 Weiwei Gu · 八月 7, 2023 1m read

InterSystems 常见问题解答标题

您可以为以下 Web Gateway 错误消息/系统响应设置单独的错误页面:

  • 服务器错误
  • 服务器繁忙
  • 服务器无法使用
  • 服务器超时
  • 连接关闭

在 Web Gateway 管理界面上进行设置([Management Portal] > [System Administration] > [Configuration] > [Web Gateway Management] > [Configuration] > [Default Parameters])。

在“默认参数”(Default Parameters )菜单的“错误页面”部分中,设置要显示的 html 页面的文件名或发生错误时要重定向到的 URL。

0
0 201
文章 Nicky Zhu · 六月 29, 2024 8m read

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

创建Schema

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

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

Property Name As %String;

Property Title As %String;

Property Gender As %String;

Property DOB As %String;

Property Ethnicity As %String;
}

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

定义 REST 服务

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

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

Parameter CONTENTTYPE = "application/json";
    
XData UrlMap [ XMLNamespace = "http://www/intersystems.com/urlmap" ]
{
0
0 317
文章 Qiao Peng · 三月 5, 2021 3m read

大家好!

InterSystems IRIS 有一个名为 Interoperability(互操作性)的菜单。

它提供了轻松创建系统集成(适配器、记录映射、BPM、数据转换等)的机制,因此可以轻松连接不同的系统。

数据中继过程中可以包括各种操作,例如:为了连接没有正常连接的系统,可以根据目标系统的规范来接收(或发送)数据。 此外,在发送数据之前,可以从其他系统获取和添加信息。 还可以从数据库(IRIS 等)获取和更新信息。

在本系列文章中,我们将讨论以下主题,同时查看 示例代码 以帮助您了解工作原理以及在系统中集成互操作性时需要进行哪种开发。

首先,我介绍一下我们将在本系列文章中使用的案例研究。

某公司运营着一个购物网站,他们正在更改产品信息的显示顺序以配合季节变化。
但是,有些商品无论季节如何都能卖得很好,而有些商品在意料之外的时间卖出,这不符合当前的显示顺序更改规则,
因此,我们研究了按照当天的温度而不是季节来更改显示顺序的可能性。 调查购买产品时的温度变得非常必要。
由于可以使用外部 Web API 来查询天气信息,因此我们计划收集购买时的天气信息,并将其记录在后面的审核数据库中。

案例非常简单,但您需要使用“外部 Web API”来收集信息,并且需要将获得的信息和购买信息结合起来记录在数据库中。

0
0 135
文章 Hao Ma · 四月 28, 2023 12m read

这里只讨论Caché和IRIS本身产生的错误和警告。用户在维护工作中通常会需要更多的内容, 那些我们在后面的 “系统性能指标”里介绍。另外, 关于集成平台的告警和日志, 也会在后面单独讨论。集成平台,也就是Ensemble Production,是IRIS系统上运行的应用,它的日志,告警,以及指标,测量,是单独的内容。

控制台日志

控制台日志是系统运行状态的日志文件,在IRIS里是messages.log, 在Cache‘里的名字是console.log,默认放在安装目录的mgr子目录。 用户也可以在管理门户的"系统操作>系统日志>控制台日志"里查看。以下是一个实际的例子:

*** Recovery started at Fri Jan 03 16:26:05 2020
     Current default directory: c:\intersystems\hsap\mgr
     Log file directory: c:\intersystems\hsap\mgr\
     WIJ file spec: c:\intersystems\hsap\mgr\CACHE.WIJ
Recovering local (c:\intersystems\hsap\mgr\CACHE.WIJ) image journal file...
Starting WIJ recovery for 'c:\intersystems\hsap\mgr\CACHE.WIJ'.
  0 blocks pending in this WIJ.
Exiting with status 3 (Success)
01/03/20-16:26:43:627 (8108) 2 Failed to allocate 2880MB shared memory using large pages.  Switching to small pages.
01/03/20-16:26:43:627 (8108) 0 Allocated 2880MB shared memory: 2048MB global buffers, 512MB routine buffers
01/03/20-16:26:43:627 (8108) 0 Intel Sandy Bridge AES-NI instructions detected.
01/03/20-16:26:43:731 (8108) 0 Jrn info from prior WIJ (imflags: 0):
(Skip multiple records…)
01/04/20-00:00:00:804 (6900) 1 Warning: Alternate and primary journal directories are the same
01/04/20-00:00:00:820 (16272) 0 CACHE JOURNALING SYSTEM MESSAGE
Journaling switched to: c:\intersystems\hsap\mgr\journal\20200104.001
01/04/20-10:15:41:703 (16096) 0 DELETE: c:\intersystems\hsap\mgr\journal\20191231.001
01/04/20-10:15:41:734 (12224) 0 Purging old application errors
01/05/20-00:00:00:497 (6900) 1 Warning: Alternate and primary journal directories are the same...(repeated 1 times)
01/05/20-00:00:00:528 (12472) 0 CACHE JOURNALING SYSTEM MESSAGE
Journaling switched to: c:\intersystems\hsap\mgr\journal\20200105.001
01/05/20-00:00:01:653 (11436) 1 %SYS.Task.FeatureTracker failed to transfer data
01/05/20-18:18:34:726 (2260) 0 DELETE: c:\intersystems\hsap\mgr\journal\20200101.001
01/05/20-18:18:34:789 (14444) 0 Purging old application errors
0
0 434
文章 Michael Lei · 六月 8, 2023 2m read

嗨社区!

想与您分享我在Telegram中使用GPT创建“我自己的”聊天的练习

这个应用需要用到 Open Exchange 上的两个组件:@Nikolay SolovyevTelegram Adapter@Kurro LopezIRIS Open-AI

因此,通过此示例,您可以在 Telegram 中使用 ChatGPT 设置自己的聊天。

让我们看看如何让它发挥作用!

0
0 253
文章 Claire Zheng · 一月 20, 2021 6m read

简介

最近完成了针对IRIS医疗版2020.1版本的性能及可扩展性基准测试,重点关注HL7v2的互操作性。本文介绍了在各种工作负载下观察到的吞吐量,并提供了IRIS医疗版用作HL7v2消息传输互操作性引擎时的系统常规配置和调整准则。

基准测试模拟了与实际环境接近的工作负载(详细信息请参见“工作负载说明和方法”部分)。本次测试的工作负载包括HL7v2患者管理(ADT)和生命体征结果(ORU)数据,并包含数据内容转换和路由。

IRIS医疗版2020.1版本可以表明,采用第二代Intel®Xeon®可扩展处理器和Intel®Optane™SSD DC P4800X系列SSD存储的商用服务器,每天的持续消息吞吐量超过23亿条(入站和出站总量),与此前的Ensemble 2017.1 HL7v2吞吐量基准测试相比,扩展性提高了一倍多。

2
0 394
文章 TZ Zhuang · 八月 6, 2021 2m read

可以使用%SYS.Journal.File类中的ByTimeReverseOrder查询,以及%SYS.Journal.Record类中的List查询来实现。

下面是这两个查询的具体作用:

A) %SYS.Journal.File类中的ByTimeReverseOrder查询
这个查询会获取journal日志文件名并按降序排列

USER>set rs=##class(%ResultSet).%New("%SYS.Journal.File:ByTimeReverseOrder")
 
USER>do rs.Execute()
 
USER>while rs.Next() { write rs.Name,! }
c:\intersystems\cache\mgr\journal\20190620.003
c:\intersystems\cache\mgr\journal\20190620.002
c:\intersystems\cache\mgr\journal\20190620.001
c:\intersystems\cache\mgr\journal\20190610.001

B) %SYS.Journal.Record类中的List查询
这个查询可以从指定journal日志文件中获取日志记录

USER>set rs2=##class(%ResultSet).%New("%SYS.Journal.Record:List")

USER>do rs2.Execute("c:\intersystems\cache\mgr\journal\20190620.003")   
         
USER>while rs2.Next() { if rs2.Get("GlobalReference")["TEST" write rs2.Get("GlobalReference"),!}
^["^^c:\intersystems\cache\mgr\user\"]TEST(1)
......
^["^^c:\intersystems\cache\mgr\user\"]TEST(9)
^["^^c:\intersystems\cache\mgr\user\"]TEST(10)
0
1 502
文章 Qiao Peng · 十二月 7, 2023 5m read

TCP作为OSI 7层的传输层的通信协议,其使用上不像更上层的通信协议那么方便,因为TCP操作的不是数据包,它操作的是数据流。因此有多种将TCP数据流“解释”为数据包(消息)的方法。

InterSystems IRIS提供了多种TCP适配器,用于不同的“解释”,例如EnsLib.TCP.FramedInboundAdapter使用特定的首尾字符做为分隔、EnsLib.TCP.CountedInboundAdapter使用固定的长度进行分隔...

同时,InterSystems IRIS提供了多种开箱即用的TCP业务服务和业务操作,方便接入和发送TCP数据。这里我们介绍常见的使用特定的首尾字符做为分隔的TCP业务服务和业务操作。

1. 通用TCP业务服务和业务操作

EnsLib.TCP.Framed.PassthroughService和EnsLib.TCP.Framed.PassthroughOperation是一组使用特定的首尾字符做为分隔TCP数据流的通用业务服务和业务操作。EnsLib.TCP.Framed.PassthroughService业务服务会将TCP数据封装在Ens.StreamContainer发送给业务流程或业务操作;而EnsLib.TCP.Framed.PassthroughOperation业务操作发送并接收Ens.

0
0 277
文章 Nicky Zhu · 五月 20, 2021 7m read

在上一篇文章《互操作消息统一管理系列:Message Bank》中,我们了解到在Message Bank中,消息均以半结构化(XML)或非结构化(Stream)的形式保存,因此无法与客户端的结构化消息一样,直接支持基于索引的检索。为此,需要在Message Bank中定义Search Table以支持查询。关于Search Table的定义和作用,请查阅https://docs.intersystems.com/healthconnectlatest/csp/docbook/DocBook.UI.Page.cls?KEY=EEDI_search_tables。

一. 在Message Bank中查询消息的特殊之处

大家如果使用过消息查看器,则能够了解IRIS自动持久化消息并提供界面让大家能够根据消息头中(如发生事件、来源、目标等)或消息体中(如患者姓名、诊断名称等消息的具体属性)来查询消息。 而在Message Bank上进行查询时,如果直接使用消息查看器,能够查询的是Message Bank的Production中传输的消息,而若不是在源系统中出现的消息,这一点一定不要混淆。

0
0 351
文章 Hao Ma · 四月 18, 2021 5m read

IRIS相比Caché在部署上的一个进步是支持docker。即便不是云部署, 使用docker也带来非常多的便利。 尤其是在开发测试环节,由于docker的使用更便捷,除非要模拟客户的环境或者做规定的性能测试,我在测试中基本已经不再使用本机的实例或者虚机。IRIS的联机文档有详细的IRIS docker安装使用指导,本文只是一个简单的,快速上手的在测试环境安装IRIS docker的简单步骤,尤其适合初学者。

注意Windows上docker可能会遇到这样那样的问题,因此通常还是推荐在Linux或者Mac OS上使用。正式的生产环境的IRIS docker container也是不支持Windows系统的。

Referrence

##1. 在操作系统上安装Docker环境

Docker官方文档的安装步骤非常清晰,我按照上面的步骤在MAC和CentOS上安装docker从来没有出现过问题。

0
1 920
文章 Hao Ma · 七月 29, 2024 2m read

转发自Eduard Lebedyu的原文

在本系列文章中,我将介绍并讨论使用 InterSystems 技术和 GitLab 进行软件开发的几种可行方法。我将涉及以下主题:

1
0 226
文章 Qiao Peng · 四月 9 8m read

本文介绍如何在 InterSystems IRIS 中通过继承 EnsLib.HTTP.GenericOperation(或 EnsLib.REST.GenericOperation)实现 OAuth2.0 支持,包括 OAuth2.0 Client 配置、Access Token 自动获取与 Header 注入,适用于各类第三方 REST API 集成场景。


在企业集成项目中,我们经常需要通过 REST API 对接第三方平台,例如 CRM、支付系统、云服务和 Open API 网关。

这些接口大多数采用 OAuth 2.0 作为授权机制。

虽然 InterSystems IRIS 提供了功能强大的通用 HTTP / REST 业务操作类:

  • EnsLib.HTTP.GenericOperation
  • EnsLib.REST.GenericOperation

但目前它们不直接支持 OAuth2.0 Access Token 自动注入

本文将介绍一种常见且推荐的实现方式:

通过继承 GenericOperation类,自定义一个支持 OAuth2.0 的通用业务操作类(Business Operation)

实现以下能力:

  • 自动检查令牌(Token)是否有效
  • 自动获访问令牌(Access Token)
  • 自动注入授权头(Authorization Header)
  • 对业务调用透明

一、先理解 OAuth2.

0
0 45
文章 Hao Ma · 一月 30, 2021 6m read

本文介绍InterSystems Web Gateway的安装和配置。

在2018以前的ISC产品中, InterSystems Web Gateway被称为CSP Gateway。, CSP是Cache'的页面技术。InterSystems的产品页面,Web服务等大多是CSP写成的。IRIS发布后CSP Gateway改名成Web Gateway, 但内部的配置文件,说明等等还到处可见CSP Gateway的叫法。在本文里不同的地方有这两个说法别奇怪,他们是一个东西。 IRIS通过它和外部Web服务器连接。 本文的内容适用任何ISC产品的部署,包括页面的选项Cache'. IRIS,HealthConnect, Ensemble等等。它的作用和表现是一样的。 无论您使用的是Cache',IRIS , HealthConnect还是HealthShare, 只有在生产环境中使用HTTP请求,基本上都需要使用Web Gateway。

如果需要更详细的内容,请参考在线文档:InterSystems Web Gateway

什么是Web Gateway

CSP是Cache' Server Page的缩写,如同JSP(Java Server Page)是Java的前端技术, CSP是InterSystems的前端技术。

0
3 1204
文章 Lele Yang · 二月 21, 2023 4m read

** 2018 年 2 月 12 日修订

虽然本文是关于 InterSystems IRIS 的,但它也适用于 Caché、Ensemble 和 HealthShare 发行版。

介绍

内存以页为单位进行管理。 Linux 系统上的默认页面大小为 4KB。 Red Hat Enterprise Linux 6、SUSE Linux Enterprise Server 11 和 Oracle Linux 6 引入了一种根据系统配置提供 2MB 或 1GB 大小的增加页面大小的方法,称为 HugePages。

起初 HugePages 需要在启动时分配,如果管理或计算不当可能会导致资源浪费。因此,各种 Linux 发行版引入了默认启用 2.6.38 内核的Transparent HugePages。这是一种自动创建、管理和使用 HugePages 的方法。以前的内核版本也可能具有此功能,但可能未标记为 [always] 而是设置为 [madvise]。

Transparent Huge Pages (THP) 是一种 Linux 内存管理系统,它通过使用更大的内存页面来减少在具有大量内存的机器上进行Translation Lookaside Buffer (TLB) 查找的开销。然而,在当前的 Linux 版本中,THP 只能映射单个进程的堆栈空间。

0
0 273
新增
文章 Nicky Zhu · 五月 12 10m read

RabbitMQ 是一个消息代理,它允许生产者(发送数据消息的一方)和消费者(接收数据消息的一方)建立异步、实时且高性能的海量数据流。RabbitMQ 支持 AMQP(高级消息队列协议),这是一种开放标准的应用层协议。

采用 RabbitMQ 的主要原因包括以下几点:

  • 您可以使用异步方法来提高应用程序的性能。
  • 它通过数据消息中介,让您能够解耦并减少服务、微服务和应用程序之间的依赖关系,这意味着交换数据的生产者和消费者无需互相了解。
  • 它允许在利用响应队列之后,交付(包含结果的)已发送数据的长时间运行处理。
  • 它帮助您从单体架构迁移到微服务架构,其中微服务通过 Rabbit 以解耦和异步的方式交换数据。
  • 它通过使消息能够被存储和转发,提供了可靠性和弹性。一条消息可以被投递多次,直到被处理为止。
  • 消息排队是扩展应用程序的关键。随着工作负载的增加,您只需添加更多的工作进程(worker)来更快地处理队列。
  • 它与数据流应用程序配合良好。
  • 它对物联网(IoT)应用程序有益。
  • 它是机器人(Bots)通信的必备工具。

RabbitMQ 基础概念

我们将利用温度监测器作为案例来详述 RabbitMQ 的概念:

  • Producer(生产者):发送消息的软件程序。
  • Exchange(交换机):接收来自生产者的消息,并将其路由到零个或多个队列。
  • Queue(队列):支持小型和大型二进制消息的消息存储区/缓冲区。
0
0 11
文章 Frank Ma · 六月 13, 2022 2m read

这是一个在InterSystems IRIS中用python和objectscript建立的对比测试。

测试目的是比较在python和objectscript中从BP到BO来回发送一千条请求/消息的速度。

更多信息,请访问 https://github.com/LucasEnard/benchmark-python-objectscript

重要提示 : 这里用的是python, graph objectscipt和objectscript从一个BP到一个BO来回发送1000条消息的时间,单位是秒。

字符串信息是由十个字符串变量组成。

对象信息由十个对象变量组成,每个对象都是它自己的int、float、str和List(str)。

消息字符串 1000条消息来回的时间 (秒)
Python BP 1.8
BPL 1.8
ObjectScript 1.4
消息对象 1000条消息来回的时间 (秒)
Python BP 3.2
BPL 2.1
ObjectScript 1.8

行中函数的时间是列中函数的x倍 :

消息字符串 Python BPL ObjectScript
Python 1 1 1.3
BPL 1 1 1.3
ObjectScript 0.76 0.
0
0 163
文章 Hao Ma · 一月 4, 2023 4m read

本文章是一个系列,主要目的是介绍给IRIS,Caché的终端用户如何方便的监控您的系统。

InterSystems系统的监控很难吗?需要学习很多技术吗? 我的答案是还好。

关于Caché和IRIS监控,无论是那部分内容,在InterSystems的在线文档或者开发者论坛,其实都能找到相关的说明和方案。但问题是太多,太杂乱,没有一个“操作维护手册”的东西。结果是,如果您是一个新手的InterSystems产品的维护工程师或者管理员,您要花很多的时间在大量的文档里找答案。

还有一个问题是文档中很多章节的内容又太深,包含了一些开发人员才关心的内容,这是Caché或者IRIS的特性造成的,因为它首先是一个开发平台。结果是,对于管理员,很多文档的很不友好。

因此,我要写的这个文章的的目的是这样的:

  • 简单。只介绍管理维护人员需要的内容。只介绍和监控相关的内容。其他比如备份恢复,扩容,修改配置等等基本不涉及。

  • 易学。文章的期待读者是系统管理员,因此不需要您有编程能力或者InterSystems编程语言的基础。我系统对您的每个日常工作和关注的主题,给出最容易实现的操作步骤。

  • 对读者的要求低,您只需要了解基本的Caché操作,包括

  • Caché的用户维护界面

    • 操作终端(Terminal)的操作
  • 基本的Caché命令的格式

让我们进入主题。有几个要点要先交代一下。

0
0 817
文章 Hao Ma · 三月 19, 2024 3m read

Caché/IRIS的特点是运行Global的修改,而这个修改和SQL是无关的,因此非常容易出现数据库表数据完整性的问题,也就是表中的数据是不是符合定义的表约束。 

这样的情况非常常见。有些是人为的对Global的错误修改, 有些是应用系统的事务性管理写的不对,造成事务回滚的时候破坏了索引的完整性。无论什么原因,只要使用Global操作,破坏SQL的完整性非常难以避免。结果就是SQL查询给出错误结果。

最简单的解决方法就是执行“索引检查(Validate Indices)"

我们来做个实验

- 先修改一个global: 如下图, 将Patient表的一个记录的SEX字段,从'M'改到‘F'. 

运行索引检查, 结果会提示您问题在什么地方。 

SAMPLES>do ##class(Patient).%ValidateIndices()
​
​
Checking index integrity for class 'User.Patient'
Begin time:  03/19/2024 15:25:43
​
Verifying data from data map 'IDKEY' is indexed correctly...
Bitmap index 'bidxSex', entry $bit(^User.PatientI("bidxSex"," F",1),4)=0, row is missing from index, it should be 1.
Index 'idxSex', entry ^User.PatientI("idxSex"," F",3) missing.
Data Map evaluation complete, 1000000 rows checked, 2 errors found, elapsed time: 27.344792 seconds
​
Verifying data from index map "$Patient" is correct...
Index map "$Patient" evaluation complete, 0 errors, elapsed time: 12.026982 seconds
​
Verifying data from index map idxSex is correct...
Index 'idxSex', entry ^User.PatientI("idxSex"," M",3), data differs for field 'Sex' between data and index map.
Index map idxSex evaluation complete, 1 errors, elapsed time: 12.285592 seconds
​
Verifying data from index map bidxSex is correct...
Bitmap index 'bidxSex', entry  $bit(^User.PatientI("bidxSex"," M",1),4), for row with ID '3', bit is ON, but indexed field value(s) differ from data map value(s).
Index map bidxSex evaluation complete, 1 errors, elapsed time: 13.591468 seconds
​
Verifying data from index map idxPatientNumber is correct...
Index map idxPatientNumber evaluation complete, 0 errors, elapsed time: 13.646994 seconds
​
%ValidateIndices is complete, total elapsed time: 41.048687 seconds
​
SAMPLES>
​
0
0 192
文章 Louis Lu · 十一月 22, 2024 1m read

当我们将 InterSystems IRIS 安装在Windows 系列操作系统中时,往往同时使用IIS 作为其Web 服务器。

但这时候我们却发现,由RESTful返回的错误信息却不能正常显示出来了,特别是在调试程序的时候,非常不方便。

比如在测试 FHIR Post/Put 请求时,我们的请求消息体中包含不正确的内容,这时我可以看到返回的是HTTP 400 Bad Request的返回内容.

我无法具体知道请求消息体哪句出错了,这对我调试程序造成很大困扰。

解决方法:

1. 打开IIS的管理页面,双击 错误页

2. 选择右侧 编辑功能设置

3. 选择错误响应下的 详细错误 选项。

我们再次请求,此时可以看到页面上显示了详细的错误信息

相关详细信息可以查看文档:Configuring IIS to Return SOAP Fault Details 以及 HTTP Errors

0
0 198
文章 Shanshan Yu · 七月 5, 2023 2m read

基于InterSystems的集成ML技术和Dashboard,根据上传的CSV文件自动生成相关预测和BI页面。前端和后端在Vue和Iris中完成,使用户可以通过简单的操作生成所需的数据预测和分析页面,并根据这些页面做出决策。

# ZPM 安装

zpm:USER>install IntegratedMLandDashboardSample

# 部署流程

使用或创建新的命名空间

将代码导入相应的命名空间

在终端中执行:

Do # # class (customizemashinelerningandaanalysis. Util. Tool) Deployment()

前端是Vue文件夹下的dist文件夹。在使用它之前,请打开dist-static config.js并修改后端服务器要使用的IP和端口。然后您需要将iframeUrl的测试修改为“Analysis”+后端使用的命名空间,例如“AnalysisUSER”

然后启动前端文件(可以将dist文件夹放在tomcat中开始使用)

访问地址为:

Ip: port/dist

image

# 如何使用

以women.csv为例

1.选择要上传的CSV文件,CSV文件名和数据列名不得包含空格等其他符号

2.填写需要预测的列名,如“高度”

3.单击“确定”按钮,等待界面返回

成功返回后,刷新当前页面,然后单击“模型列表”下的辅助选项。

1
0 186
文章 Cryze Zhang · 八月 18, 2024 1m read

由于个人习惯,更喜欢将代码文件使用xml格式导入导出,但是有时后翻代码,xml格式的阅读体验没那么好,如果要是导入到studio又太麻烦,所以实现了一个在线工具,解析xml内容,将其转换为在Studio看到的内容,即所谓的UDL(Universal Definition Language)格式。
小工具地址

https://ttykx.com/demos/cos/xml2Udl.html

1.选择xml文件,读取内容。

2.解析项目,按项目显示原xml内容

3.转为UDL格式内容

0
0 162
文章 Jeff Liu · 二月 11 1m read

InterSystems IRIS的嵌入式向量搜索功能使我们能够搜索非结构化和半结构化数据。数据被转换为向量(也称为 "嵌入"),然后存储在 InterSystems IRIS 中并编制索引,用于语义搜索、检索增强生成(RAG)、文本分析、推荐引擎和其他用例。

这是一个将 IRIS 用作向量数据库和在 IRIS 上进行相似性搜索的简单演示。

先决条件:

  1. Python
  2. InterSystems IRIS for Health - 因为它将用作向量数据库

存储库: https://github.com/piyushisc/vectorsearchusingiris

操作步骤

  1. clone软件仓库。
  2. 打开 VS Code,连接到所需的 IRIS 实例和命名空间并编译类。
  3. 打开 IRIS 终端,调用 do ##class(vectors.vectorstore).InsertEmbeddings() 命令,从文件 text.txt 中读取文本,生成嵌入并将其存储在 IRIS 中。
  4. 调用 do ##class(vectors.vectorstore).VectorSearch("search_terms") 命令,输入所需的单词以执行相似性搜索。IRIS 将返回最匹配的前三个词:alt text
0
0 51