#InterSystems IRIS

0 关注者 · 961 帖子

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

公告 Michael Lei · 三月 19, 2024

InterSystems IRIS ®,InterSystems IRIS ® for Health TMHealthShare ® Health Connect 2024.1版现已全面上市 (GA)。

发布亮点

在此版本中,您可以期待许多令人兴奋的更新,包括:

  1. 在ObjectScript中使用向量Vector: 一种强大优化数据操控的能力.
  2. 向量搜索Vector Search (试验性): 行业领先的高效数据检索.
  3. 多卷数据库: 增强可扩展性和存储管理.
  4. 快速在线备份FastOnline Backup (试验性): 优化备份流程.
  5. 多种端口支持Multiple Super Server Ports: 提供网络配置的灵活性.
  6. FHIR 2.0.0 支持 Smart
  7. FHIR R4 对象模型生成
  8. 改进了 FHIR 查询的性能
  9. 删除专用 Web 服务器 (PWS)

请通过开发者社区分享您的反馈,以便我们共同构建更好的产品。

文档

有关所有突出显示功能的详细信息可通过以下链接获得:

  • InterSystems IRIS 2024.1 文档、 以及。
  • InterSystems IRIS for Health 2024.1 文档、 和。
  • HealthShare Health Connect 2024.1 文档、 和。

此外,请查看此链接

0
0 147
文章 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 190
文章 Hao Ma · 三月 19, 2024 3m read

上个帖子写了TuneTable的执行, 提到了SQL优化器使用的那些统计数据, 这里逐一的介绍一下这些统计项。了解它们看懂和分析SQL执行计划的基础。 如果您不需要做单个查询的优化工作,可以调过这部分内容。 

表的统计项

  • Extent Size: 表的大小,也就是记录数。在执行多表关联(JOIN)的查询时,SQL优化器会根据Extent Size值,从数据量最小的表来开始执行查询。

您还需要了解:表创建的时候Extent Size会获得一个初始值,而之后的插入修改数据并不自动修改这个值。而只有执行TuneTable才会修改这个。 这也就是为什么没有执行过TuneTable的数据库SQL性能好不了的原因。下图中的Patient表,可以看出有1,000,000记录

字段的统计项

请看下面的图

  • 选择性(Selectivity)

选择性取值可以是1或者一个百分数。取值为1说明这是个unique的字段,比如上图的ID, PatientNumber。 %表示的值,取值越高说明唯一性越低。比如上图中的Name的选择性是1.2987%,说明不是唯一值,有重复的姓名,但比例不高。 相反,Sex的选择性是50%, 说明只有两个取值。 

  • 离散值选择性Outlier Selectivity),

始用于Caché2014.

0
0 260
文章 Hao Ma · 三月 19, 2024 2m read

IRIS/Caché查询慢,主要原因有以下几个:

  • 应用是一个事务型的数据库, 数据模型的设计不适合某些复杂的分析查询

        这是慢的原因,不是慢的离谱的原因。数据模型是产品设计的范畴, 这里不讨论, 本文只讨论优化。

  • 历史原因,有些表的索引不够优化

        虽然还是设计问题,但可以在实施中或者维护中给出优化方案。

  • 产品运行中的问题造成的查询效率下降

IRIS/Caché数据平台的一个特点是允许跳过SQL约束,对底层数据的直接修改。坏的代码或者应用可能破坏表数据和表索引的约束,造成SQL性能的下降。维护人员应该知道怎么避免,和处理这样的问题。 

  • 维护工作缺乏造成

 比如Tune Table(调整表), 这是必须做的工作,但可惜很有些项目没有执行过。

还有些其他暂时没想到的原因。我会在以下链接的帖子里和各位分享我的参与的一些知识和经验。这些经验是从一些SQL优化的工作中学到的,包括Caché 2010, 2016, IRIS, HealthConnect/Ensemble的项目。比如在最近的一个IRIS项目中, 我和另一个合作伙伴的工程师将IRIS 2021上的HIS数据库的100个SQL查询的平均查询时间从几十秒降低到几秒, 最慢的查询从50分钟降低到10几秒钟。

0
1 315
文章 Hao Ma · 三月 18, 2024 4m read

TuneTable(调整表)收集数据库中表的统计信息,用来为SQL引擎制定最优的执行计划。在其他数据库产品里,这个动作被称为“gather stats job"或者类似的名字,相比较TuneTable不是那么直白,但作用是一样的。
 

TuneTable是否要人工执行

一定要。

在IRIS 2023版本, 第一次加入了TuneTable的自动执行功能,在此之前的所有IRIS/Caché版本, 如果没有人工执行TuneTable, SQL引擎无法保证给出最好的查询计划。 即使是IRIS2023有了自动执行功能,也还需要人工执行TuneTable的操作,后面解释。

怎么知道有没有执行过TuneTable 

到“管理门户>SQL"页面, 打开一个表, 看“目录详情”,如下图, 如果其中的“选择性”,"离群值选择性“, ”离群值“,“平均字段大小”这些字段有数据, 说明这个表至少做过了一次TuneTable. 

除了“字段”按钮页,在“表信息”还有统计项 “ExtentSize", “索引”页,包含每个索引的统计信息项。

关于这些统计项的想象解释, 我会在下个帖子里介绍。 

什么时候执行TuneTable

简单的说:对于查询所用的表,SQL引擎要有以上有统计信息,而且足够准确。

解释以下“足够准确”。

0
0 267
文章 Qiao Peng · 三月 17, 2024 12m read

近来生成式大语言模型掀起了革命性的AI浪潮。生成式大语言模型是什么原理?我们怎么在业务中利用它?

一. 大语言模型的工作原理

生成式大语言模型是生成式人工智能底层的机器学习模型,是一种用于自然语言处理的深度学习模型。

人工智能、机器学习与大语言模型的关系如下图:

1.1 为什么我们称之为大语言模型?

大语言模型的“大”体现在多个方面:

  • 首先,模型尺寸巨大,尤其是它的参数数量。例如GPT3有1750亿的参数;
  • 其次,大语言模型是在巨大的算力基础上,基于海量语料进行训练的。例如Meta的Llama 2 的训练数据达到了两万亿个词(token);
  • 再次,大语言模型是为解决通用问题,而非特定问题构建的。

1.2 大语言模型是怎么训练的?

大语言模型是事先训练好的模型。

训练时,大语言模型基于各种语料 - 人类知识库(例如Wikipedia)、公共数据集、网络爬虫数据,让模型进行“填空”练习,并经过人工编辑和“校对” 训练出来的,需要成千上万的GPU建立集群进行训练。根据Meta的信息,其Llama 2 的训练数据达到了两万亿个token,上下文长度为4096,对话上也是使用100万人类标记的数据微调。

运行时,训练产生的大语言模型可以在小的多的硬件上运行。

1.3 大语言模型的机器学习算法

冰冻三尺,非一日之寒;滴水穿石,非一日之功。生成式大语言模型能够落地经历了相当漫长的技术积累与进步。

0
0 1008
文章 Qiao Peng · 三月 16, 2024 10m read

IRIS 2024.1已经发布,它引入了诸多新特性,其中之一是JSON_TABLE。

数据表达和交换中,JSON已经是日益主流的存在。在之前的IRIS版本中,可以轻易将JSON数据以对象解析并保存到IRIS,也可以将IRIS数据使用SQL、对象等多种方式输出为JSON。对于得到的JSON序列化的数据,如果我们想通过SQL去解析,甚至进行检索和查询,就可以利用JSON_TABLE这个新特性。

对于一些大规模的JSON序列化数据,例如从FHIR服务器查询获得的FHIR资源Bundle,里面包含了大量数据。例如下面的FHIR查询结果,后面的示例以这个的复杂的JSON作为用例:

{
    "resourceType""Bundle"

通过动态对象实例化这样的数据再进一步解析有些笨拙。如果想快速解析它们,并获得患者的姓名和性别信息,甚至想通过一个SQL语句将这些信息保存到数据库,那么JSON_TABLE就是最好的选择。

JSON_TABLE语法

JSON_TABLE是一个将JSON数据或数据源投射为SQL临时表的技术。它的数据源可以是JSON字符串、返回JSON的函数、或者是保存JSON数据的表字段。

0
0 168
文章 Michael Lei · 二月 18, 2024 11m read

1. IRIS RAG Demo

IRIS RAG Demo

这是 IRIS 与 RAG(检索增强生成)示例的一个简单演示。 后端是使用 IRIS 和 IoP用 Python 编写的,LLM 模型是 orca-mini 并由 ollama 服务器提供。 前端是用 Streamlit 编写的聊天机器人。

    1. IRIS RAG 演示](#1-iris-rag-demo)
    • 1.1. 什么是 RAG](#11-what-is-rag)
    • 1.2. 如何工作?
    • 1.3. 安装演示](#13-installation-the-demo)
    • 1.4. 使用方法
    • 1.5. 演示如何运行](#15-演示如何运行)
      • [1.5.1. 前端](#151-前端)
      • 1.5.2. 后台
        • [1.5.2.1. 业务服务](#1521-业务服务)
        • [1.5.2.2. 业务流程](#1522-业务流程)
        • [1.5.2.3. LLM 操作](#1523-the-llm-operation)
        • 1.5.2.4. 矢量操作](#1524-the-vector-operation)
    • 1.6. 一般性说明](#16-一般性说明)

1.1. 什么是 RAG?

RAG 是 Retrieval Augmented Generation(检索增强生成)的缩写,它带来了使用带有知识库的 LLM 模型(GPT-3.

1
0 665
文章 Lilian Huang · 三月 14, 2024 6m read

人工智能(AI)最近受到广泛关注,因为它可以改变我们生活的许多领域。更好的计算机能力和更多数据帮助人工智能完成了许多惊人的事情,例如改进医学测试和制造自动驾驶汽车。人工智能还可以帮助企业做出更好的决策,提高工作效率,这也是人工智能越来越流行和广泛应用的原因。如何将 OpenAI API 调用集成到现有的 IRIS 互操作性应用程序中?

0
0 273
文章 Hao Ma · 三月 6, 2024 2m read

[翻译文章:大型数据集的存储注意事项]这篇文章其实很有用, 但恐怕注意的人不多,特意写文章介绍一下。

USEEXTENTSET翻译过来就是"使用EXTENT集合“,不够直白,它的工作简单说就是:通过哈希类名,使用更短的Global名字

ObjectScript的持久类编译后会默认使用"^类名D" 和"^类名I"的global来存储数据和索引, 当在类定义里加入`Parameter USEEXTENTSET = 1;` 这句话后, 会使用一个自动生成的短类名。 比如*Class User.EMR.MSG.Items.FirstPageCostsItem1*, 默认的存储为类似“^User.EMR.MEC31.FirstPageCoC0D4D”, 使用USEEXTENTSET“后会定义为“^U3Dx.EOXs.1”。

短Global名字的好处 

global名字缩短了,数据和索引的占用并不会改变。改变的是Journal的尺寸。 同样的表和数据插入, 之前的Journal是这样的:

使用短global名字后的journal记录是这样的:

我的测试中, 使用USEEXTENTSET减少了30%的Journal尺寸。

如原文中提醒, 不仅仅是Journal的减少,对ECP, Mirror, Shadow等都会有性能上的提升,这些Feature都传输了Global名字。

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

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

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

 zpm "install samples-bi"

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

 ClassMethodTODO:

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

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

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

 %Integer

这里有什么问题?假设我们将用户输入作为参数。

0
0 194
文章 Veerarajan Karunanithi · 二月 28, 2024 4m read

什么是非结构化数据?
非结构化数据是指缺乏预定义数据模型或组织的信息。与数据库中具有清晰结构(例如表和字段)的结构化数据相比,非结构化数据缺乏固定的模式。此类数据包括文本、图像、视频、音频文件、社交媒体帖子、电子邮件等。

为什么来自非结构化数据的见解很重要?
根据 IDC(国际数据公司)的报告,预计到 2025 年,全球 80% 的数据将是非结构化的,这将成为 95% 企业的重大担忧。 福布斯文章

人工智能世界如何解决这个问题?
在人工智能领域,生成式人工智能在为非结构化数据提供解决方案方面发挥着至关重要的作用。它擅长从文本/图像/视频中提取有价值的信息、文本摘要和处理文档等任务。

Intersystems 非结构化数据解决方案
Intersystems IRIS 提供了一种称为“SQL 文本搜索”的特殊解决方案,用于搜索非结构化数据。此功能有助于对多种语言的非结构化文本数据进行语义上下文搜索。

使用 SQL 文本搜索有什么优点?

快速搜索: InterSystems IRIS SQL 搜索利用优化的索引生成快速导航大量数据,避免对数据本身进行顺序搜索。

单词感知搜索:与基本字符串搜索不同,SQL 搜索依赖于文本中的语义结构,以单词为基本单位。这种方法最大限度地减少了嵌入字符串或跨越两个单词的字符串引起的误报。

实体感知搜索: SQL 搜索考虑语义关系以将多个单词分组为实体。

1
0 445
问题 huang YG · 二月 27, 2024
02/21/24-18:32:48:515 (7568) 3 InterSystems IRIS Internal Failure

Access Violation (0xC0000005) occurred at 00007FFF3DE9C4E8
Process = 00001D90 Thread = 0000203C
Exception Count=1 b_msyslog=0 b_DumpVar=0 b_DumpVar2=0
b_GRelease=0 b_GRelease2=0 b_DeqRes=0 b_DeqRes2=0
Job Type = CSP server
ContextFlags = 0010005F Registers:
RAX=00007FFF3DE9C4E8 RBX=000000C2E5554800 RCX=000000C2E7AFFC00
RDX=000000C2E7B00000 RSI=00000000FFFFFFC0 RDI=00000000000003FF
RSP=000000C25CEBD2F8 RBP=0000000000000000 R8 =0000000000000001
R9 =00007FFF3DE60000 R10=000000C2E7AFFC00 R11=000000C2E7AFFC00
R12=0000000000005C9D R13=000000C2E46040E6 R14=00000000FFFFFFC0
R15=0000000000000000 RIP=00007FFF3DE9C4E8 EFL=10206
Stack:  Base = 000000C25CEC0000, Limit = 000000C25CEA7000, Size = 00019000
 00007FF74206EB9B 0000147B00000000 000000C2E55B7380 0000000000000000
 00000000FFFFFFC0 0000000000000000 00000000000003FF 0000000000000000
 00000000FFFFFFFE 000000C2E5554800 00007FF74206E727 00000000000015E6
 000000C2E5554CC0 000000C2E5554800 000000C2E46017F0 000000C25CEBD380
 000000C200000000 00007FF70000147B 000000C2E4600020 000000C2E4600020
 00007FF741DFA094 0000000000007D00 0000000000200042 0000000000000000
 00007FF7421FB1A0 000000C2E4600020 00000000FFFFFFC0 000000C2E5554800
 00007FF742071703 000000C200000001 0000000000007D00 00007FF7421ECDC0
 00007FF700000000 000000C200000001 00007FF700007D00 000000C200000000
 00007FF741C38D9F 0000000000007D00 000000C2DAEFD7EE 00000000FFFFFFC0
 0000000000000000 0000000000000000 00007FF741DC38E2 00007FF7421FB198
 00007FF7421FB1A0 0000000000007D00 000000C2E5554800 FFFFFFFFFFFFFFFF
 00007FF741DC7102 0000000000000000 0000000000007D00 00007FF7421FB1A0
 00000000FFFFFFC0 0000000000007D00 00007FF7420490A7 00007FF7421FB198
 00007FF7421ECDC0 000000C2E4600020 00007FF7421FB198 0000000000000001
 00007FF741BFA0B0 00000000000002BB 000000C2E4600020 00007FF7421FB198
 0000000000000175 0000000000000013 000000C2E4600068 000000C2E555BEC2
 0000000000000000 0000000000000004 0000000000000000 000000C25CF3CC10
 0000000000000100 0000000000000000 0000000000000000 0000000000000008
 0000000000000001 0000000000000000 00007FF741F9D179 0000000000000000
 000000C25CF30068 0000000000000004 0000000000000001 000000C25CEBF630
 000000000000FFFF 0000000000000000 000000C2D3F5807F 000000C25CEBD59A
 0000027F00001FA0 000000C25CEBD570 0000000000000000 000000C25CEBD570
 000000C25CF3CC10 0000000000000001 0000000000000000 0000000000000100
 0000000000000000 0000000000000000 0000000000000008 00007FF741F9D0B9
 0000027F00001FA0 0000000000000000 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000
 0000000000000000 0000000000000000 0000000000000000 0000000000000000
 0000000000000000 00007FF7421F185A 00007FF741E0E8E4 00007FF7421F185A
 000000C25CF3CC10 0000000000000001 000000C25CF5E150 0074006100500053

Version = IRIS for Windows (x86-64) 2019.1 (Build 510_4U) Thu Jun 13 2019 15:29:51 EDT
Current Routine = zRead+13^%Stream.FileBinary.1, Principal Device = |TCP|51773|7568
Please contact InterSystems Technical Support with this information.
    Tel: +1 (617) 621-0700  Fax: +1 (617) 494-1631  Email: support@intersystems.com
1
0 175
文章 Jingwei Wang · 二月 15, 2024 4m read

大型语言模型(例如 OpenAI 的 GPT-4)的发明和普及掀起了一波创新解决方案浪潮,这些解决方案可以利用大量非结构化数据,在此之前,人工处理这些数据是不切实际的,甚至是不可能的。此类应用程序可能包括数据检索(请参阅 Don Woodlock 的 ML301 课程,了解检索增强生成的精彩介绍)、情感分析,甚至完全自主的 AI 代理等!

在本文中,我想演示如何使用 IRIS 的嵌入式 Python 功能直接与 Python OpenAI 库交互,方法是构建一个简单的数据标记应用程序,该应用程序将自动为我们插入IRIS 表中的记录分配关键字。然后,这些关键字可用于搜索和分类数据,以及用于数据分析目的。我将使用客户对产品的评论作为示例用例。

先决条件

  • 运行的IRIS实例
  • OpenAI API 密钥(您可以在此处创建)
  • 配置好的开发环境(本文将使用 )

Review类

让我们首先创建一个 ObjectScript 类,该类将定义客户评论的数据模型。为了简单起见,我们将只定义 4 个 %String 字段:客户姓名、产品名称、评论正文以及我们将生成的关键字。该类应该扩展%Persistent,以便我们可以将其对象保存到磁盘。

 ClassExtends%Persistent
0
0 176
文章 聆严 周 · 九月 30, 2022 11m read

使用Prometheus监控Cache集群

Executive Summary

生产级别的Cache集群往往由多个Cache实例组成,而Cache自带的管理界面不能满足对整个集群的监控,因此在实际使用中,往往需要投入人力对实例进行性能巡检。即便如此,这种巡检模式实时性低、告警的漏报错报率高、对既往数据追溯能力差。针对Cache/IRIS集群管理的这一缺憾,本文提出以Prometheus监控Cache集群的方案,最终实现了对集群全实例监控指标的自动化采集,以及准实时监控数据展示和告警提示。

监控大屏3.主机实例监控

Prometheus及Grafana简介

Prometheus是一个开源的监控收集框架。它内置了一个数据收集服务、一个时序数据库、和一个Web UI管理界面。 Prometheus采用PULL模式拉取监控数据,使得它在众多监控解决方案中脱颖而出。这种PULL模式只需被监控对象暴露出符合Prometheus要求的接口即可,而无需配置监控服务器地址,也无需管理定时任务,对应用程序的侵入性极小。 Prometheus也有一个健全的生态。它提供各种管理接口API,如自动服务发现、告警、查询等接口,和已有开源软件互操作性好,也方便接入机构内部系统。其中Grafana是最重要的生态伙伴,它是一个开源的数据可视化工具,支持动态的更改数据源、灵活地配置报表、编写Prometheus查询语句、定义告警等。

8
0 1093
文章 Qiao Peng · 一月 31, 2024 21m read

InterSystems IRIS、Health Connect和上一代的Ensemble提供了优秀的互操作架构,但即便有低代码开发能力,很多开发者还是希望能用自己的技术栈语言在InterSystems的产品上开发互操作产品。

考虑到互操作产品本身的开放性要求和各个技术栈背后庞大的生态价值,InterSystems IRIS和Health Connect提供了Production EXtension (PEX)架构,让开发者使用自己的技术栈语言来开发互操作解决方案。目前PEX支持Java、.net、Python。

这里我们介绍使用Java利用PEX进行互操作产品的开发。

一 InterSystems IRIS上使用Java开发的基础

在进入PEX主题前,需要简单介绍一下Java在InterSystems IRIS上开发的各种技术选项,因为PEX也是以这些技术选项为基础的。

  • 如果仅把InterSystems IRIS作为一个数据库看待,可以使用JDBC对它进行SQL访问,这是最传统的开发方式;
  • Java是一个面向对象的开发语言,而InterSystems IRIS也是支持面向对象的数据平台。
0
1 347
公告 Claire Zheng · 一月 28, 2024

近日,InterSystems宣布 InterSystems IRIS® Cloud SQL 和 InterSystems IRIS® Cloud IntegratedML® 服务全面上市。 这些全面托管的云原生智能数据服务使开发人员能够轻松地在SQL环境中构建云原生数据库和机器学习(ML)应用程序。

通过 Cloud SQL和 Cloud IntegratedML,开发人员可以访问下一代关系数据库即服务(DBaaS),DBaaS快速且易于配置和使用。 嵌入式AutoML功能支持开发人员在全面托管的、弹性的云原生环境中,仅仅通过几条类似SQL的命令即可轻松开发并执行机器学习模型。

0
0 141
文章 Louis Lu · 一月 28, 2024 2m read

这里介绍三个SQL函数 JSON_ARRAY 、 JSON_OBJECT和JSON_ARRAYAGG,可以直接通过SQL语句返回JSON格式数据

1. JSON_ARRAY 函数通过逗号(,)分割的多个表达式,返回JSON array格式的数据

SELECT3Name

也可以忽略空值(null) ,添加“ABSENT ON NULL”

Name

获取到的返回结果

如果想显示空值(null),使用"NULL ON NULL",如果没有特意标明,则该设置为默认值。

下面语句获取客户所有电话号码,并以JSON array格式返回:

FROM
["055-8263371","052-4957286","054-4951066"]

2. JSON_OBJECT函数通过逗号(,)分割的多个键值对(key:value) ,返回JSON 对象的数据

'title'

忽略空值,则添加“ABSENT ON NULL”

'title'

同样的如果要显示空值,则添加“NULL ON NULL”,该设置为默认设置。

3. JSON_ARRAYAGG 函数将多个JSON_OBJECT汇聚到一个JSON array中

0
0 347
文章 Michael Lei · 一月 26, 2024 2m read

InterSystems 常见问题解答

如果系统24小时没有停止,旧的日志文件将根据“日志文件删除设置”在0:30删除。

导致日志文件保留的时间早于“日志文件删除设置”的一个可能原因是存在仍处于开放状态的事务。

在这种情况下,您将能够通过搜索执行事务的进程并完成事务来删除日志文件。

下面的示例检查是否存在未完成的事务,如果存在,则输出目标文件名和日志记录信息。

(示例可以从这里下载

*注意*如果要检查的日志文件较大或日志文件较多,则执行需要时间,因此请联系我们的支持中心。

 ClassClassMethodAs

执行示例如下。

 USER> 
0
0 119
文章 Michael Lei · 一月 15, 2024 2m read

作为针对数据导入处理性能和错误(锁定表已满)的衡量标准,可能需要调整常规内存堆 (gmheap) 和锁定表大小 (locksiz) 参数。

事实上,您可以使用终端和管理门户来检查当前分配了多少通用内存堆。


★终端用

// 一般メモリヒープサマリUSER> w $system .Config.SharedMemoryHeap.GetUsageSummary() 4992226 , 6029312 , 59441152

通用内存堆摘要以使用量、分配量和配置量(字节)的形式显示返回值。

使用量是分配的锁表、进程表等实际使用的量。
分配量是gmheap区域中锁表、进程表等分配的量。
配置量为gmheap(KB)+IRIS系统附加区,即当前最大可用量(实际通用内存堆区值)。

如上所述,配置数量与配置参数 gmheap 的独立值不匹配。
这是因为IRIS自动将内部使用的内存区域添加到配置参数gmheap中来配置通用内存堆区域。详情请参阅下面的文档。

关于gmheap

您可以使用以下命令获取锁表的使用情况:
返回值显示为可用量、用户可用量和已用量(字节)。详情请参阅这篇文章

 %SYS##class


★用于管理门户

您可以从“系统操作”>“系统使用情况”>“共享内存堆使用状态”进行检查。

对于整个通用内存堆来说,

0
0 150
文章 Claire Zheng · 一月 15, 2024 2m read

Gartner魔力象限是业内知名的分析报告,针对特定市场进行严谨、基于事实的研究后发布的魔力象限报告,可为用户提供全面视图,以便其了解在高速增长、差异化明显的市场中供应商的相对位置。在魔力象限中,供应商被定位在四个象限中:领导者(Leader)、挑战者(Challenger)、远见者(Visionary)和利基玩家(Niche Player)。

2023年年底,在 Gartner 2023年最新发布的“云数据库管理系统(Cloud DBMS)魔力象限”中,InterSystems再次荣膺“挑战者”(Challenger)称号,这是InterSystems第三次入围这一报告并得到认可(2022年“远见者”,)。

Gartner此次评估面向包括InterSystems在内的19家云数据库管理系统供应商进行。我们相信,Gartner魔力象限“挑战者”这一定位,证明了InterSystems有能力挑战现状、推动创新,为市场提供独特的解决方案。

InterSystems IRIS数据平台提供的结缔组织(connective tissue)可将不同来源的分散数据转换为单一、完整的视图,从而在医疗保健、金融服务和供应链等关键市场中为具有关键数据需求的客户提供更好的结果。

0
0 121
公告 Michael Lei · 一月 10, 2024

嗨,大家好,

我们想重点介绍 2023 年布拉格欧洲欧洲医疗健康黑克松Hackathon期间创建的一些杰出项目。
IKEM 和阿斯利康向参与者提出了九个现实世界的医疗保健挑战
InterSystems 向参与者介绍了使用 FHIR 存储库并通过在 AWS 上提供 FHIR 云服务来在其解决方案中执行 FHIR 可用性的机会。

来认识一下我们挑战的获胜者:

第一名Čarodějové (PathoSync)

“PathoSync 软件是复杂病理学家平台的坚实基础。通过使用自定义映射,任何实验室都可以将其数据投影到 FHIR7 标准,该标准很快将在全球范围内强制执行。这使得数字化过程更加顺利。与 InterSystems 的连接确保了质量并实现了很多医疗保健功能。此外,使用位于欧洲的FHIR服务器严格遵循GDPR规范,因此软件的使用遵循欧洲标准。

0
0 195
文章 姚 鑫 · 十二月 27, 2023 2m read

第七章 创建Callout Library - 创建 ZFEntry 表

创建 ZFEntry

每个 Callout 库必须定义一个 ZFEntry 表,该表允许 IRIS 加载和访问 函数。 表由以 开头、以 结尾的宏代码块生成。在这两个宏之间,必须为要公开的每个函数调用一次 宏。

每个 调用都采用三个参数:

   ZFENTRY(zfname,linkage,entrypoint)

其中 zfname 是用于在 调用中指定函数的字符串, 是指定如何传递参数的字符串, 是 函数的入口点名称。

要创建 库,代码必须包含 指令,该指令是一个开关,可生成用于定位库函数的内部 函数。加载 库时, 调用此函数来初始化该库,以便后续查找库函数名称。

注意: 序列号

表中条目的位置可能很重要。 和 接口(在“调用标注库函数”中描述)都通过指定表中的序列号(从 开始)来调用库函数。例如, 将通过以下调用调用 表中的第三个函数:

   x = $ZF(-6,libID,3)

其中 是库标识符, 是表中第三个条目的序列号。

注意:预编译头文件

某些编译器(例如 Microsoft Visual Studio)支持预编译头。如果使用预编译头,则 #define ZF_DLL

0
0 99
文章 Nicky Zhu · 十二月 27, 2023 7m read

在医疗行业中,处方是个非常重要的临床工作数据概念。因此,在考察用FHIR能如何构造我国所需医疗行业数据模型时,就会需要考虑如何用FHIR表达处方。

在2019年,FHIR的工作组已否认需要使用特定的资源来表达处方(不是药嘱)这个概念,见:

https://jira.hl7.org/browse/FHIR-24905

奇妙的是,IHE规范中却明确有处方(Prescription)的定义并需要引用药嘱(Medication Treatment Plan Item)。

https://www.ihe.net/uploadedFiles/Documents/Pharmacy/IHE_Pharmacy_Suppl_PRE.pdf?#page=12

FHIR官网指出这种复合式的request有三种表达方式:

• Shared requisition id

• "Based on" chain

• RequestOrchestration

在FHIR实际应用中,则可以见到多种形态使用容器类资源表达处方并包含药嘱的表达形式,例如:

  1. 中国2023 FHIR Connectathon中使用消息Bundle来进行处方流转

http://wiki.hl7.org.cn:81/static/fhir-2023/spec-specialty-rx.html

0
0 397
文章 Louis Lu · 十二月 24, 2023 2m read

在此文章中将分享,当使用InterSystems IRIS 做后端时如何接收并保存通过POST方式发送过来的 Base64文件。

前后端之间传输文件,我认为较简单的方式是:前端将文件转为Base64格式,调用POST方法并将Base64内容附加在JSON消息中的一个参数中,在JSON消息中的另一个参数可以是文件名,比如消息定义如下:

{
    "fileData""JVBERi0xLjQKJdPr6eEKMSAwIG..."

在IRIS中,可以定义一个web application用于处理POST请求,同时定义一个分派类继承于%CSP.REST,在类中定义一个方法,具体保存文件。

代码示例:

%Status

下面具体解释下其中较重要的部分:

  1. 获取到请求的消息内容,并将其转化为%Library.DynamicAbstractObject对象,这样我们可以后面通过对象的方式进行处理
    set%FromJSON%request.Content

     

  2. 下面是比较重要的一步,我们将Base64 转化为 %Stream 类型,我们可以直接通过%Library.DynamicObject类下面的%Get方法实现
    "fileData"
0
0 291
文章 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 276
文章 Qiao Peng · 十二月 4, 2023 10m read

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


InterSystems IRIS 提供了一组通用的RESTful 业务服务和业务操作类,用户无需开发自定义的业务服务和业务操作类,就可以直接向外提供RESTful服务和调用外部的RESTful API。

BS EnsLib.REST.GenericService 通用REST业务服务
BS EnsLib.REST.SAMLGenericService 检查SAML令牌的签名和时间戳的REST业务服务
BO EnsLib.REST.GenericOperation 通用REST业务操作
BO EnsLib.REST.GenericOperationInProc 用于透传模式的通用REST业务操作

2. 通用RESTful 消息

通用的RESTful 业务服务和业务操作类使用一个通用的RESTful消息类 - EnsLib.REST.GenericMessage,它是EnsLib.HTTP.GenericMessage的子类,二者数据结构都是

HTTPHeaders 记录http头的数组
Stream 记录http体的数据流
Type 数据流类型,例如是字符流还是二进制流。
0
2 285