我本人和其他技术架构师经常需要向客户和供应商说明 Caché IO 要求以及 Caché 应用程序使用存储系统的方式。 在向客户和供应商说明典型的 Caché IO 配置文件和事务性数据库应用程序的要求时,下面的表格很有用。 原始表格由 Mark Bolinsky 创建。
在以后的帖子中,我将讨论更多关于存储 IO 的内容,所以现在贴上这些表格也作为将来文章的参考。
InterSystems IRIS for Health™ 是全球第一个也是唯一一个专门为医疗应用程序的快速开发而设计的数据平台,用于管理全世界最重要的数据。它包括强大的开箱即用的功能:事务处理和分析、可扩展的医疗保健数据模型、基于 FHIR 的解决方案开发、对医疗保健互操作性标准的支持等等。所有这些将使开发者能够快速实现价值并构建具有突破性的应用程序。了解更多信息。
我本人和其他技术架构师经常需要向客户和供应商说明 Caché IO 要求以及 Caché 应用程序使用存储系统的方式。 在向客户和供应商说明典型的 Caché IO 配置文件和事务性数据库应用程序的要求时,下面的表格很有用。 原始表格由 Mark Bolinsky 创建。
在以后的帖子中,我将讨论更多关于存储 IO 的内容,所以现在贴上这些表格也作为将来文章的参考。
您的应用程序已部署,一切运行正常。 很好,击个掌! 然后电话突然响个不停 – 用户投诉应用程序有时很“慢”。 这是什么意思? 有时? 您有哪些工具,查找和解决这个缓慢问题应查看哪些统计数据? 您的系统基础架构是否能承担用户负载的任务? 在投入生产之前,应该询问哪些基础架构设计问题? 如何自信地为新硬件规划容量,而不会过度规定? 如何停止电话铃声? 如何一开始就不让它响?
本主题描述如何使用InterSystems IRIS发送和接收MIME电子邮件消息。
注意:本主题中的示例是经过组织的,因此管理电子邮件的方法可以用于不同的电子邮件服务器,这在测试和演示期间非常有用。这不一定是最适合生产需要的代码组织。
电子邮件使用标准协议通过Internet发送消息。 InterSystems IRIS支持以下三种协议:
MIME电子邮件的对象表示形式。它支持文本和非文本附件、单部分或多部分邮件正文,以及ASCII和非ASCII字符集的标题。SMTP服务器发送电子邮件。SMTP(简单邮件传输协议)是发送电子邮件的Internet标准。POP3从电子邮件服务器检索电子邮件,POP3是从远程服务器检索电子邮件的最常用标准。注意:InterSystems IRIS不提供邮件服务器。相反,它提供了连接到邮件服务器并与之交互的功能。
MIME电子邮件首先,了解InterSystems IRIS如何表示MIME电子邮件非常有用。
通常,多部分MIME邮件由以下部分组成:
Mime-Type标头和Content-Type标头。创建HTTP请求后,使用以下方法之一发送该请求:
method Delete(location As %String = "",
test As %Integer = 0,
reset As %Boolean = 1) as %Status
发出HTTP DELETE请求。
method Get(location As %String = "",
test As %Integer = 0,
reset As %Boolean = 1) as %Status
发出HTTP GET请求。此方法使Web服务器返回请求的页面。
method Head(location As %String,
test As %Integer = 0,
reset As %Boolean = 1) as %Status
发出HTTP Head请求。此方法使Web服务器仅返回响应头,而不返回正文。
可以设置和获取HTTP标头的值。
%Net.HttpRequest的以下每个属性都包含具有相应名称的HTTP标头的值。如果不设置这些属性,则会自动计算它们:
AuthorizationContentEncodingContentLength(此属性为只读。)ContentType (指定Content-Type标头的Internet媒体类型(MIME类型)。)ContentCharset (指定Content-Type标题的字符集部分。如果设置此属性,则必须首先设置ContentType属性。)DateFromIfModifiedSincePragmaProxyAuthorizationRefererUserAgent%Net.HttpRequest类提供可用于设置和获取主HTTP标头的常规方法。这些方法忽略Content-Type和其他实体标头。
返回包含此请求中的主HTTP标头的字符串。
将主HTTP标头写入当前设备。
返回此请求中设置的任何主HTTP标头的当前值。此方法接受一个参数,即头的名称(不区分大小写);这是一个字符串,如Host或Date
设置标题的值。
随着InterSystems IRIS 2020.1和InterSystems IRIS for Health 2020.1中PEX的发布,客户有了比Java Business Host更好的方式来构建Java的产品。PEX为构建互操作性组件提供了一套完整的API,并有Java和.NET两种版本。
从InterSystems IRIS和InterSystems IRIS for Health的2020.4版本开始,Java Business Host已经被删除。 我们鼓励使用Java商业主机的客户迁移到PEX。
PEX的优势
允许开发人员在Java或.NET中创建任何生产组件
组件之间可以传递更复杂的消息结构
简化设置
S简化了开发工作流程,无需使用ObjectScript。
关于迁移到PEX的更多信息,请参见从Java Business Host迁移到PEX。
由于这是一个预览版,我们渴望在下个月的通用版发布之前了解您对这个新版本的经验。请通过开发者社区分享您的反馈,以便我们能够共同打造一个更好的产品。
InterSystems IRIS数据平台2021.1是一个扩展维护(EM)版本。自2020.1(上一个EM版本)以来,在持续交付(CD)版本中增加了许多重要的新功能和改进。请参考2020.2、2020.3和2020.4的发布说明,了解这些内容的概况。
这个版本的增强功能为开发人员提供了更大的自由度,可以用他们选择的语言构建快速和强大的应用程序,并使用户能够通过新的和更快的分析功能更有效地消费大量的信息。
通过InterSystems IRIS 2021.1,客户可以部署**InterSystems IRIS Adaptive Analytics**,这是一个附加产品,它扩展了InterSystems IRIS,为分析终端用户提供了更大的易用性、灵活性、可扩展性和效率,而不管他们选择何种商业智能(BI)工具。它能够定义一个有利于分析的业务模型,并通过在后台自主构建和维护临时数据结构,透明地加速针对该模型运行的分析查询工作负载。
亲爱的社区开发者们,大家好!
InterSystems开发者竞赛:FHIR加速器 已于5月10日开启! 我们邀请所有FHIR开发者们在AWS上使用InterSystems IRIS FHIR加速器服务 (FHIRaaS)上开发或测试您的应用。
现在,我们为您提供绝佳机会,您可以在AWS上免费访问FHIRaaS! 那么,掌握FHIRaaS的第一步,是使用URL的特殊code在ISC Dev FHIR Portal 门户注册,链接如下:👉🏼 https://portal.trial.isccloud.io/account/signup

点击上面的链接,遵循相应步骤,即可掌控InterSystems FHIRaaS!
关于此次竞赛的任何疑问,请随时跟帖提问,或在 discord-contests channel 中提问。
再次欢迎大家加入此次竞赛,成为InterSystems FHIRaaS 大师! ✌🏼
Happy coding! :)
在上一篇文章《互操作消息统一管理系列: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。
大家如果使用过消息查看器,则能够了解IRIS自动持久化消息并提供界面让大家能够根据消息头中(如发生事件、来源、目标等)或消息体中(如患者姓名、诊断名称等消息的具体属性)来查询消息。 而在Message Bank上进行查询时,如果直接使用消息查看器,能够查询的是Message Bank的Production中传输的消息,而若不是在源系统中出现的消息,这一点一定不要混淆。
企业信息库(MessageBank)是一个可选的远程归档设施,可以从多个来自不同实例的互操作性Production中收集信息、事件日志项目和搜索表项。如下图所示:

这套环境由两种角色的实例构成: 企业信息库服务器,它本身也是一个Production,完全由Message Bank服务组成,接收来自任何数量的客户Production提交的消息、日志等。
客户端Operation(Message Bank Operation),将其添加到一个正在运行的Production中,并用企业信息库服务器的地址进行配置。如连接通畅,消息和日志即可自动转发到Message Bank并在其中存储。
为了使你能方便地看到信息库中的信息,InterSystems IRIS®提供了以下附加选项。
对于企业信息库实例,管理门户自动包括企业监控器页面,在那里你可以监控客户端Production的状态,浏览消息库,并对被监控客户的消息进行检索。
对于每个客户端实例,你在消息库实例中配置一个到企业监控器的链接。
如下所示:

在使用IRIS互操作性时,对于生产环境,为保障其有充足的磁盘空间和即时查询的效率,通常会采用消息和日志过期策略。在生产环境中只保留近期(如一个月)的信息以备回溯,过期数据将定期被清除。
IRIS提供了用于对应用程序进行单元测试的类的%UnitTest包。该包为快速开发单元测试类、执行测试和创建报告提供了便利。可以直接使用该包,也可以扩展其类来自定义单元测试工具。%UnitTest在结构上与用于单元测试的xUnit框架非常相似。熟悉这些框架的开发人员使用%UnitTest会特别容易。
本教程提供对%UnitTest包的快速实践介绍。本教程的第一部分和第二部分是相互独立的,可以按任何顺序完成。
注意:本教程假定基本熟悉ObjectScript和InterSystems IRIS的面向对象开发。
下一期系列将用一个月的时间连载,《Caché 网络实用工具》,敬请期待。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f9VqwzNP-1608850948003)(3E1D939266954ED48BDAEA9B8086B11E)]](https://img-blog.csdnimg.cn/20201225070433434.png)
以通常的方式执行新的单元测试。
^UnitTestRoot的值设置为包含测试类的目录的父级:USER> Set ^UnitTestRoot="c:\unittests"
%UnitTest.Manager执行测试:USER> Do ##class(%UnitTest.Manager).RunTest("mytests")
===============================================================================
Directory: C:\unittests\mytests\cls\MyPackage\
===============================================================================
mytests\cls\MyPackage begins .
Load of directory started on 01/09/2018 14:36:57 '*.xml;*.XML;*.cls;*.mac;*.int;*.我创建了 iris-fhir-portal 来参加当前竞赛 **InterSystems IRIS for Health FHIR,**本篇快速概述旨在介绍我的应用程序提供的功能。
iris-fhir-portal 的目标是说明使用 IRIS for Health 中的 FHIR 功能创建患者图表并让用户拥有自己的数据有多么简单。
现在使用%UnitTest.Manager.RunTest执行单元测试。以下是方法:
^UnitTestRoot全局值设置为包含导出的测试类的目录的父级。DHC-APP>Set ^UnitTestRoot="d:\Temp"
%UnitTest.Manager.RunTest执行测试。DHC-APP>do ##class(%UnitTest.Manager).RunTest("test")
XML文件加载测试类,编译类,执行测试,从服务器删除测试代码,并向终端发送报告。HC-APP>do ##class(%UnitTest.Manager).RunTest("test")
===============================================================================
Directory: D:\Temp\test\
===============================================================================
test begins .FHIR 术语服务规范描述了一组对 CodeSystem、ValueSet 和 ConceptMap 资源的操作。 在这些操作中,以下四种操作似乎是最为广泛采用的:
| CodeSystem | ValueSet |
|---|---|
| $lookup $validate-code |
$expand $validate-code |
开发该规范的部分实现一直是探索 IRIS for Health 2020.1 中引入的全新 FHIR 框架的有效途径。 本实现包括上述四种操作,并支持与 CodeSystem 和 ValueSet 资源的读取和搜索交互。
需要注意的是,本实现使用普通 ObjectScript 持久化类作为源术语表。
本教程的第二部分介绍了如何使用%UnitTest包对InterSystems IRIS代码进行单元测试。完成本教程的这一部分后,将能够:
%UnitTest包中三个主要类的角色。%UnitTest包的单元测试类和方法的要求。%UnitTest.Manager创建的测试报告。%UnitTest.TestCase方法初始化和还原数据库数据。%UnitTest包是一组为IRIS提供测试框架的类。在结构上,它类似于xUnit测试框架。%UnitTest为创建和执行以下各项的单元测试提供类和工具:
以下是创建和执行一套单元测试的基本步骤:
%UnitTest.TestCase的测试类(或多个测试类)。AssertX宏)。每个测试方法名称都以Test开头。本教程的第一部分概述了单元测试。完成本教程的这一部分后,将能够:
%UnitTest包和xUnit测试框架之间的相似性。单元测试是对单个代码模块的正确性的测试,例如,方法或类的测试。通常,开发人员在开发代码时为其代码创建单元测试。典型的单元测试是一种执行方法的方法,该方法测试并验证该方法是否为给定的一组输入生成了正确的输出。
单元测试不同于集成测试。集成测试验证了一组代码模块交互的正确性。单元测试仅单独验证代码模块的正确性。一组代码模块的集成测试可能会失败,即使每个模块都通过了单元测试。
单元测试提供了许多好处,包括:
单元测试框架是为开发和执行单元测试提供支持的类包。
经过快一个月的连载 《Caché Global》 共12篇。对于刚接触M的语言的同学,由浅入深帮助你快速进步,对于老手,丰富更多的细节
涵盖以下主题:
对于某些操作,可能需要全局变量的功能,而不需要无限期保存数据。例如,可能希望使用全局对某些不需要存储到磁盘的数据进行排序。对于这些操作,InterSystems IRIS提供了临时全局机制。该机制的工作方式如下:
IRISTEMP数据库,该数据库是一个特殊的数据库,如下所述。例如,可以定义一个全局映射,以便将名称为^AcmeTemp*的所有全局变量映射到IRISTEMP数据库。
例如,要保存值,代码可能会执行以下操作:
set ^AcmeTempOrderApp("sortedarray")=some value
然后,稍后代码可能会执行以下操作:
set somevariable = ^AcmeTempOrderApp("sortedarray")
通过使用临时全局变量,可以利用IRISTEMP数据库没有日志记录这一事实。因为数据库没有日记记录,所以使用该数据库的操作不会产生日记文件。日志文件可能会变得很大,并可能导致空间问题。但是,请注意以下几点:
不能回滚修改IRISTEMP数据库中的全局变量的任何事务;此行为特定于IRISTEMP
“查找全局变量字符串”页使可以在下标或选定全局变量的值中查找给定的字符串。
要访问和使用此页,请执行以下操作:
然后,页面显示选定全局变量中下标或值包含给定字符串的第一个节点或所有节点。该表左侧显示了节点下标,右侧显示了相应的值。
注意:在进行任何编辑之前,请确保知道IRIS使用哪个全局系统,以及应用程序使用哪个全局系统;参见“一般建议”此选项会永久更改数据。不建议在生产系统中使用。
出于开发目的,“查找全局字符串”页面还提供了对全局节点中的值进行整体更改的选项。要使用此选项:
“查找全局变量字符串”页使可以在下标或选定全局变量的值中查找给定的字符串。
要访问和使用此页,请执行以下操作:
然后,页面显示选定全局变量中下标或值包含给定字符串的第一个节点或所有节点。该表左侧显示了节点下标,右侧显示了相应的值。
注意:在进行任何编辑之前,请确保知道IRIS使用哪个全局系统,以及应用程序使用哪个全局系统;参见“一般建议”此选项会永久更改数据。不建议在生产系统中使用。
出于开发目的,“查找全局字符串”页面还提供了对全局节点中的值进行整体更改的选项。要使用此选项:
本贴提供了在 VMware ESXi 5.5 及更高版本的环境中部署 Caché 2015 及更高版本时,关于配置、系统规模调整和容量规划等方面的指南。
我假定您已经了解 VMware vSphere 虚拟化平台,所以直接给出推荐。 本指南中的推荐不特定于任何具体硬件或站点特定的实现,也不应作为规划和配置 vSphere 部署的全面指南,而是一份您可以做出选择的最佳实践配置清单。 我希望您的 VMware 专家实施团队能针对具体站点对这些推荐进行评估。
这里是 InterSystems 数据平台和性能系列的其他帖子的列表。
_注:_本帖更新于 2017 年 1 月 3 日,强调必须为生产数据库实例设置虚拟机内存预留,以保证 Caché 有足够内存可用,并且不会出现内存交换或膨胀而对数据库性能产生负面影响。 更多详细信息,请参见下面的内存部分。
在本帖中,我将展示使用_外部备份_来备份 Caché 的策略,以及与基于快照的解决方案集成的示例。 如今,大多数解决方案部署在基于 VMware 的 Linux 上,因此许多帖子都以展示解决方案如何集成 VMware 快照技术为例。
Caché 安装后即包含 Caché 在线备份,可提供不间断的 Caché 数据库备份。 但随着系统规模的扩大,您应该考虑更高效的备份解决方案。 集成了快照技术的_外部备份_是推荐的系统(包括 Caché 数据库)备份解决方案。
外部备份的在线文档包含了全部详细信息。 一个关键考虑事项是:
“为确保快照的完整性,Caché 提供了在创建快照时冻结数据库写操作的方法。 在创建快照期间,只冻结对数据库文件的物理写入,从而允许用户进程继续在内存中不间断地执行更新。”
还需要注意的是,虚拟化系统上的部分快照过程会导致正在备份的虚拟机短暂暂停,这段时间通常称为关闭时间。 该时间通常不到一秒,因此不会被用户注意到,也不会影响系统运行,但在某些情况下,关闭时间可能较长。 如果关闭时间长于 Caché 数据库镜像的 QoS 超时时间,那么备份节点将认为主节点出现故障,并将进行故障转移。 在本帖的后面部分,我将说明在需要对镜像 QoS 超时时间进行更改时如何查看关闭时间。
部分 在上个帖子中,我们安排了使用 pButtons 进行 24 小时的性能指标收集。 在本帖中,我们将研究几个收集到的关键指标,以及它们与底层系统硬件的关系。 我们还将开始探索 Caché(或任一 InterSystems 数据平台)指标与系统指标之间的关系。 以及如何使用这些指标来了解系统的每日节拍率并诊断性能问题。
本周,我将关注 CPU - 主要硬件食物群之一 :) 一位客户请我就以下情况提供建议:他们的生产服务器已接近使用寿命终止,是时候更新硬件了。 他们还考虑通过虚拟化来整合服务器,并希望适当调整裸机或虚拟机的容量规模。 今天我们将关注 CPU,在后面的帖子中,我将介绍适当调整其他主要食物群(内存和 IO)规模的方法。
所以问题是:
本帖将展示为 InterSystems 数据平台上运行的数据库应用调整共享内存需求(包括 global 和例程缓冲区、gmheap 以及 locksize)的方法,以及在配置服务器和虚拟化 Caché 应用程序时应考虑的一些性能提示。 和以往一样,当我谈到 Caché 时,我指的是所有数据平台(Ensemble、HealthShare、iKnow 和 Caché)。
当我最初开始使用 Caché 时,大多数客户的操作系统是 32 位的,Caché 应用程序的内存有限且昂贵。 通常部署的英特尔服务器只有几个核心,唯一的扩展方式是选择大型服务器,或者使用 ECP 横向扩展。 现在,即使是基本的生产级服务器也具有多个处理器、几十个核心,并且最小内存为 128 或 256 GB,可能达到 TB。 对于大多数数据库安装,ECP 已被遗忘,我们现在可以在单台服务器上大幅提高应用事务处理速率。
关键字:深度学习,Grad-CAM,X 射线,Covid-19,HealthShare,IRIS
在复活节周末,我谈到了一些针对 Covid-19 肺的深度学习分类器。 演示结果还算不错,似乎与当时有关该主题的一些学术研究刊物相吻合。 但它真的足够“好”吗?
最近,我偶然收听了一个关于“机器学习中的可解释性”的在线午餐网络讲座,Don 在演讲的最后谈到了这个分类结果:

上图也出现在 “Why Should I Trust You?” Explaining the Predictions of Any Classifier 这篇研究论文中。 我们可以看到,分类器实际上经过训练,以背景像素(如雪等野生环境)作为主要输入,对宠物狗和野狼进行分类。
这关乎我过去的兴趣,现在也激起一些好奇:
这也是篇简单的 10 分钟笔记。 最后,我会谈到为什么它也与我们即将推出的全新 IRIS 和 HealthShare 功能有关。
幸运的是,过去几年中,各种 CNN 衍生分类器都有了方便的工具:
持久化类可以定义一个或多个索引;其他数据结构用于提高操作(如排序或条件搜索)的效率。InterSystems SQL在执行查询时使用这些索引。InterSystems IRIS对象和SQL在执行INSERT、UPDATE和DELETE操作时自动维护索引内的正确值。
标准索引将一个或多个属性值的有序集与包含属性的对象的对象ID值相关联。
例如,假设我们定义了一个简单的持久化MyApp.Person类,该类具有两个文本属性和一个关于其Name属性的索引:
Class MyApp.Person Extends %Persistent
{
Index NameIdx On Name;
Property Name As %String;
Property Age As %Integer;
}
如果我们创建并保存此Person类的多个实例,则生成的数据和索引全局变量类似于:
// data global
^MyApp.PersonD = 3 // counter node
^MyApp.PersonD(1) = $LB("",34,"Jones")
^MyApp.PersonD(2) = $LB("",22,"Smith")
^MyApp.本章介绍InterSystems IRIS®对象和SQL引擎如何利用多维存储(全局变量)来存储持久对象、关系表和索引。
尽管InterSystems IRIS对象和SQL引擎会自动提供和管理数据存储结构,但了解其工作原理的详细信息还是很有用的。
数据的对象视图和关系视图使用的存储结构是相同的。为简单起见,本章仅从对象角度介绍存储。
每个使用%Storage.Persistent存储类(默认)的持久化类都可以使用多维存储(全局变量)的一个或多个节点在InterSystems IRIS数据库中存储其自身的实例。
每个持久化类都有一个存储定义,用于定义其属性如何存储在全局变量节点中。这个存储定义(称为“默认结构”)由类编译器自动管理。
用于存储持久对象的默认结构非常简单:
“D”以形成全局数据的名称,而附加“I”作为全局索引。$list结构中。ID值作为下标。默认情况下,对象ID值是通过调用存储在全局变量数据根(没有下标)的计数器节点上的$Increment函数提供的整数。例如,假设我们定义了一个简单的持久化类MyApp.Person,它有两个文本属性:
Class MyApp.InterSystems IRIS提供了使用全局变量实现完整事务处理所需的基本操作。 InterSystems IRIS对象和SQL自动利用这些特性。 如果直接将事务性数据写入全局变量,则可以使用这些操作。
事务命令是TSTART,它定义事务的开始;
TCOMMIT,它提交当前事务;
和TROLLBACK,它将中止当前事务,并撤消自事务开始以来对全局变量所做的任何更改。
例如,下面的ObjectScript代码定义了事务的开始,设置了一些全局变量节点,然后根据ok的值提交或回滚事务:
/// w ##class(PHA.TEST.Global).GlobalTro(0)
ClassMethod GlobalTro(ok)
{
TSTART
Set ^Data(1) = "Apple1"
Set ^Data(2) = "Berry1"
If (ok) {
TCOMMIT
}
Else {
TROLLBACK
}
zw ^Data
q ""
}
TSTART在InterSystems IRIS日志文件中写入事务开始标记。
这定义了事务的起始边界。
在上面的示例中,如果变量ok为true(非零),则TCOMMIT命令标记事务成功结束,并将事务完成标记写入日志文件。