清除过滤器
文章
Michael Lei · 五月 12, 2021
本贴提供了在 VMware ESXi 5.5 及更高版本的环境中部署 Caché 2015 及更高版本时,关于配置、系统规模调整和容量规划等方面的指南。
我假定您已经了解 VMware vSphere 虚拟化平台,所以直接给出推荐。 本指南中的推荐不特定于任何具体硬件或站点特定的实现,也不应作为规划和配置 vSphere 部署的全面指南,而是一份您可以做出选择的最佳实践配置清单。 我希望您的 VMware 专家实施团队能针对具体站点对这些推荐进行评估。
[这里是 InterSystems 数据平台和性能系列的其他帖子的列表。](https://cn.community.intersystems.com/post/intersystems-数据平台的容量规划和性能系列文章)
_注:_本帖更新于 2017 年 1 月 3 日,强调必须为生产数据库实例设置虚拟机内存预留,以保证 Caché 有足够内存可用,并且不会出现内存交换或膨胀而对数据库性能产生负面影响。 更多详细信息,请参见下面的*内存*部分。
### 参考
本文中的信息基于经验和对公开的 VMware 知识库文章及 VMware 文档(例如 [VMware vSphere 性能最佳实践](https://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/techpaper/performance/vsphere-esxi-vcenter-server-67-performance-best-practices.pdf))的研究以及对 Caché 数据库部署要求的反映。
## ESXi 支持 InterSystems 的产品吗?
针对处理器类型和操作系统(包括虚拟化操作系统)验证和发布 InterSystems 产品是 InterSystems 的策略和程序。 有关详情,请参见 [InterSystems 支持策略](http://www.intersystems.com/services-support/product-support/virtualization/)和[版本信息](http://www.intersystems.com/services-support/product-support/latest-platform/)。
> 例如,在 x86 主机上的 ESXi 中,支持在 Red Hat 7.2 操作系统上运行 Caché 2016.1。
注:如果您不编写自己的应用程序,还必须检查应用程序供应商支持策略。
### 支持的硬件
在配合使用当前服务器和存储组件的情况下,VMware 虚拟化很适合 Caché。 使用 VMware 虚拟化的 Caché 已在客户站点成功部署,并且性能和可伸缩性已在基准测试中得到验证。 在配置正确的存储、网络和搭载较新型号的英特尔至强处理器(具体为英特尔至强 5500、5600、7500、E7 系列和 E5 系列,包括最新的 E5 v4)的服务器上使用 VMware 虚拟化不会对性能产生明显影响。
通常,Caché 和应用程序在客户机操作系统上的安装和配置方式与裸机操作系统上的安装和配置方式相同。
客户有责任查看 [VMware 兼容性指南](http://www.vmware.com/resources/compatibility/search.php),以了解所使用的特定服务器和存储。
# 虚拟化架构
VMware 常用于 Caché 应用程序的两种标准配置:
- 主生产数据库操作系统实例在“裸机”集群上,而 VMware 只用于其他生产和非生产实例,如 Web 服务器、打印、测试、训练等。
- 所有操作系统实例(包括主生产实例)均已虚拟化。
本帖可用作任一方案的指南,不过重点是第二个方案,即包括生产实例在内的所有操作系统实例均已虚拟化。 下图显示了该配置的典型物理服务器设置。
_图 1. 简单的虚拟化 Caché 架构_
图 1 显示了一个常见的包含至少三台物理主机服务器的部署,可通过 VMware HA 集群中的主机服务器提供 N+1 容量和可用性。 要扩展资源,可能要向集群添加额外的物理服务器。 备份/还原媒体管理和灾难恢复也可能需要额外的物理服务器。
有关特定于 _VMware vSAN_、VMware 的超融合基础架构解决方案的推荐,请参见以下帖子:[第 8 部分 超融合基础架构容量和性能规划](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-%E2%80%93-part-8-hyper-converged-infrastructure-capacity)。 本贴中的大部分推荐可以应用于 vSAN,除了下面的“存储”部分有一些明显差异。
# VMWare 版本
下表给出了针对 Caché 2015 及更高版本的主要推荐:
vSphere 是包括 vCenter Server 在内的产品套件,允许通过 vSphere 客户端对主机和虚拟机进行集中系统管理。
> 本帖假定将使用 vSphere,而不是“免费的”ESXi Hypervisor 单独版本。
VMware 有多种授权模式;最终选择取决于哪个模式最适合您当前和将来的基础架构规划。
我通常推荐“企业版”,因为它增加了功能,例如让硬件得到更有效利用的动态资源调度 (DRS),以及用于存储阵列整合(快照备份)的存储 API。 VMware 网站给出了版本比较。
还有高级套件,允许捆绑 vSphere 的 vCenter Server 和 CPU 许可证。 套件有升级限制,因此通常只推荐给不期望增长的小型站点。
# ESXi 主机 BIOS 设置
ESXi 主机是物理服务器。 在配置 BIOS 前,您应该:
- 向硬件供应商核实服务器是否正在运行最新的 BIOS
- 检查是否有服务器/CPU 型号特定的 BIOS 设置专门用于 VMware。
服务器 BIOS 的默认设置对于 VMware 可能不是最佳设置。 以下设置可以用来优化物理主机服务器以获得最佳性能。 并非下表中的所有设置在所有供应商的服务器上都可用。
# 内存
内存分配应考虑以下关键规则:
在单台物理主机上运行多个 Caché 实例或其他应用程序时,VMware 有多种技术可以实现高效的内存管理,如透明页共享 (TPS)、膨胀、交换和内存压缩。 例如,当多个操作系统实例在同一主机上运行时,TPS 可去除内存页的冗余副本,从而允许内存过载而不会降低性能,这使得虚拟机运行所占用的内存少于物理机所需内存。
> 注:必须在操作系统中安装 VMware Tools,才能利用 VMware 的这些功能和许多其他功能。
虽然这些功能的存在是为了允许内存过载,但建议务必先调整所有虚拟机的 vRAM 大小,以适应可用的物理内存。 在生产环境中,尤其重要的是要仔细考虑内存过载的影响,只有在收集数据以确定可能的过载量后,才能进行内存过载。 要确定给定 Caché 实例的内存共享有效性和可接受的过载程度,请运行工作负载并使用 Vmware 命令 `resxtop` 或 `esxtop` 来观察实际的内存节省情况。
在规划 Caché 实例内存要求时,建议回顾一下[本系列中关于内存的第四个帖子](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-part-4-looking-memory)。 尤其是“VMware 虚拟化注意事项”部分,其中的重点是:
> 在生产系统上设置 VMware 内存预留。
您想要*必须*避免任何共享内存交换,所以将生产数据库虚拟机内存预留设置为至少是 Caché 共享内存的大小加上 Caché 进程和操作系统及内核服务的内存。 如果有疑虑,则**预留整个生产数据库虚拟机内存(100% 预留)**,以保证 Caché 实例有足够内存可用,这样就不会出现内存交换或膨胀而对数据库性能产生负面影响。
注:较大的内存预留将影响 vMotion 运行,因此在设计 vMotion/管理网络时必须考虑到这一点。 只有目标主机的可用物理内存大于或等于预留内存的大小时,才能使用 Vmware HA 实时迁移虚拟机或在另一台主机上启动虚拟机。 这对于 Caché 生产虚拟机特别重要。 例如,要特别注意 HA 准入控制策略。
> 确保容量规划允许在 HA 发生故障转移时分配虚拟机。
对于非生产环境(测试、训练等),可以应用更积极的内存过载,但不要让 Caché 共享内存过载,而是通过减少全局缓冲区来限制 Caché 实例的共享内存。
当前的英特尔处理器架构具有 NUMA 拓扑。 处理器有自己的本地内存,并且可以访问同一主机中其他处理器上的内存。 毫无疑问,访问本地内存的延迟要低于远程内存。 有关 CPU 的讨论,请查看[本系列的第三个帖子](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-%E2%80%93-part-3-focus-cpu),_评论部分_中包括了关于 NUMA 的讨论。
如上面的 BIOS 部分所述,实现最佳性能的策略是,在理想情况下,将虚拟机规模调整为只达到单个处理器支持的最大核心数和内存量。 例如,如果容量规划显示最大的生产 Caché 数据库虚拟机将具有 14 个 vCPU 和 112 GB 内存,则考虑具有 2 个 E5-2680 v4(14 核处理器)和 256 GB 内存的服务器集群是否合适。
> **理想情况下**,调整虚拟机规模以使内存在 NUMA 节点本地。 但不要太过执着于此。
如果需要一个比 NUMA 节点大的“怪兽虚拟机”,那也没问题,VMware 将管理 NUMA 以获得最佳性能。 合理调整虚拟机的规模并且分配的资源不超过所需资源也很重要(参见下文)。
## CPU
虚拟 CPU 分配应考虑以下关键规则:
Caché 生产系统的规模应根据实际客户站点的基准测试和测量结果来确定。 对于生产系统,使用一开始就将系统规模调整为与裸机 CPU 核心数相同的策略,并根据最佳实践进行监测,看是否可以减少虚拟 CPU (vCPU)。
### 超线程和容量规划
根据物理服务器的规则调整__生产数据库__虚拟机规模的一个良好起点是,针对启用了超线程功能的目标处理器计算物理服务器 CPU 要求,然后简单地进行转换:
> 一个物理 CPU(包括超线程)= 一个 vCPU(包括超线程)。
一个常见的误解是,超线程以某种方式使 vCPU 容量增加了一倍。 这对于物理服务器或逻辑 vCPU 来说并不正确。 裸机服务器上的超线程可能会比没有超线程的相同服务器提升 30% 的性能,但这也会根据应用情况的不同而有所不同。
对于初始规模调整,假定 vCPU 具有完整的内核专用资源。 例如,如果您有一台 32 核(2 个 16 核)E5-2683 V4 服务器 – 总共多达 32 个 vCPU 的容量规模,且可能还有余量。 此配置假定在主机级别启用了超线程。 VMware 将管理主机上所有应用程序和虚拟机之间的调度。 在您花时间监测应用程序、操作系统和 VMware 在峰值处理期间的性能后,您可以决定是否进行更高度的整合。
### 授权
在 vSphere 中,可以为虚拟机配置一定数量的插槽或核心。 例如,如果有一个双处理器虚拟机(2 个 vCPU),则可以将其配置为两个 CPU 插槽,或一个具有两个 CPU 核心的插槽。 从执行的角度看,并没有多大区别,因为虚拟机监控程序将最终决定虚拟机是在一个还是两个物理插槽上执行。 但是,指定双 CPU 虚拟机实际有两个核心而不是两个插槽,会对软件许可证产生影响。 注:Caché 许可证以核心数为准(而非线程数)。
# 存储
> 本部分适用于更为传统的使用共享存储阵列的存储模型。 有关 _vSAN_ 的建议,另请参见以下帖子:[第 8 部分 超融合基础架构容量和性能规划](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-%E2%80%93-part-8-hyper-converged-infrastructure-capacity)
对于存储,应考虑以下关键规则:
## 针对性能调整存储大小
存储瓶颈是影响 Caché 系统性能的最常见问题之一,对于 VMware vSphere 配置也是如此。 最常见的问题是简单地按 GB 容量来调整存储大小,而不是分配足够多的磁盘主轴来支持预期的 IOPS。 在 VMware 中,存储问题可能更加严重,因为可能有更多主机通过相同的物理连接访问同一存储。
## VMware 存储概述
VMware 存储虚拟化可以分为三层,例如:
- 存储阵列是底层,由物理磁盘组成,以逻辑磁盘(存储阵列卷或 LUN)的形式呈现给上面的层。
- 下一层是 vSphere 占用的虚拟环境。 存储阵列 LUN 以数据存储的形式呈现给 ESXi 主机,并格式化为 VMFS 卷。
- 虚拟机由数据存储中的文件组成,所包含的虚拟磁盘以磁盘的形式呈现给客户机操作系统,可以对这些磁盘进行分区并在文件系统中使用。
VMware 为管理虚拟机中的磁盘访问提供了两种选择 — VMware 虚拟机文件系统 (VMFS) 和原始设备映射 (RDM),两者的性能相似。 为了简化管理,VMware 通常推荐 VMFS,但在某些情况下可能需要 RDM。 作为一般建议 – 除非有特别的理由使用 RDM,否则请选择 VMFS,_VMware 的新开发针对 VMFS 而非 RDM_。
### 虚拟机文件系统 (VMFS)
VMFS 是 VMware 开发的一种文件系统,专门针对集群虚拟环境(允许从多个主机进行读/写访问)和大型文件存储进行优化。 VMFS 的结构使虚拟机文件可以存储在一个文件夹中,从而简化了虚拟机管理。 VMFS 还支持 vMotion、DRS 和 VMware HA 等 VMware 基础架构服务。
操作系统、应用程序和数据存储在虚拟磁盘文件(.vmdk 文件)中。 vmdk 文件存储在数据存储中。 一个虚拟机可以由分布在几个数据存储上的多个 vmdk 文件组成。 如下图中的生产虚拟机所示,一个虚拟机可以包括分布在多个数据存储上的存储。 对于生产系统,每个 LUN 使用一个 vmdk 文件可实现最佳性能,对于非生产系统(测试、训练等),多个虚拟机 vmdk 文件可以共享一个数据存储和一个 LUN。
虽然 vSphere 5.5 支持的最大 VMFS 卷大小为 64TB,VMDK 大小为 62TB,但在部署 Caché 时,通常使用映射到不同磁盘组上的 LUN 的多个 VMFS 卷来分离 IO 模式并提高性能。 例如,随机或顺序 IO 磁盘组,或者将生产 IO 与其他环境的 IO 分开。
下图显示了与 Caché 一起使用的 VMware VMFS 存储示例的概览:
_图 2. VMFS 上的 Caché 存储示例_
### RDM
RDM 允许将原始 SCSI 磁盘或 LUN 作为 VMFS 文件来进行管理和访问。 RDM 是 VMFS 卷上的特殊文件,用作原始设备的代理。 对于大多数虚拟磁盘存储,推荐使用 VMFS,但在某些情况下可能需要使用原始磁盘。 RDM 仅适用于光纤通道或 iSCSI 存储。
### 用于阵列集成的 VMware vStorage API (VAAI)
为获得最佳存储性能,客户应考虑使用支持 VAAI 的存储硬件。 VAAI 可以在几个方面(包括虚拟机置备和精简置备的虚拟磁盘)提高性能。 对于较旧的阵列,可以向阵列供应商索取固件更新来支持 VAAI。
### 虚拟磁盘类型
ESXi 支持多种虚拟磁盘类型:
**厚置备** – 在创建时分配空间。 进一步分为:
- 快速置零 – 将 0 写入整个驱动器。 这会增加创建磁盘所需的时间,但可获得最佳性能,即使是第一次写入每个块。
- 延迟置零 – 首次写入每个块时写入 0。 延迟置零缩短了创建时间,但第一次写入块时会使性能降低。 不过,后续写入的性能与快速置零的厚磁盘相同。
**精简置备** – 在写入时分配空间并置零。 对未写入的文件块进行第一次写入时,会有较高的 I/O 成本(类似于延迟置零的厚磁盘),但在随后写入精简置备的磁盘时,性能与快速置零的厚磁盘相同。
_在所有磁盘类型中,VAAI 都可以通过将操作卸载到存储阵列来提高性能。_某些阵列还在阵列级别支持精简置备,请勿在精简置备的阵列存储上精简置备 ESXi 磁盘,因为置备和管理可能存在冲突。
### 其他备注
如上文所述,为了符合最佳实践,请使用与裸机配置相同的策略;生产存储可以在阵列级别分成多个磁盘组:
- 随机访问 Caché 生产数据库
- 顺序访问备份和日志,但也可以放置其他非生产存储,如测试、训练等
请记住,数据存储是存储层的抽象表示,因此,它是存储的逻辑表示而不是物理表示。 创建专门的数据存储以隔离特定的 I/O工作负载(无论是日志还是数据库文件),并且不隔离物理存储层,并不会对性能产生预期的影响。
虽然性能是关键,但共享存储的选择更多取决于站点现有或计划的基础架构,其次才是 VMware 的影响。 与裸机实现一样,FC SAN 的性能最好,推荐使用。 对于 FC,建议至少使用 8Gbps 的适配器。 只有在适当的网络基础架构到位的情况下,才能支持 iSCSI 存储,这包括:服务器和存储之间的网络中的所有组件上都必须支持至少 10Gb 的以太网和巨型帧 (MTU 9000),并且与其他流量分开。
对于数据库虚拟机或具有高 I/O 负载的虚拟机,使用多个 VMware 准虚拟 SCSI (PVSCSI) 控制器。 PVSCSI 可以提高整体存储吞吐量,同时降低 CPU 利用率,从而带来显著效益。 通过使用多个 PVSCSI 控制器,可以在客户机操作系统内执行多个并行 I/O 操作。 此外,建议通过单独的虚拟 SCSI 控制器将日志 I/O 流量与数据库 I/O 流量分开。 作为最佳实践,您可以将一个控制器用于操作系统和交换,另一个控制器用于日志,另外一个或多个控制器用于数据库数据文件(取决于数据库数据文件的数量和大小)。
众所周知,对齐文件系统分区是针对数据库工作负载的存储最佳实践。 物理机和 VMware VMFS 分区上均对齐分区可以防止因 I/O 跨越磁道边界而导致的 I/O 性能下降。 VMware 测试结果显示,将 VMFS 分区与 64KB 磁道边界对齐,可降低延迟并提高吞吐量。 按照存储和操作系统供应商的建议,使用 vCenter 创建的 VMFS 分区应与 64KB 边界对齐。
# 网络
对于网络,应考虑以下关键规则:
如上文所述,VMXNET 适配器比默认的 E1000 适配器具有更好的性能。 VMXNET3 允许 10Gb,并且使用更少的 CPU,而 E1000 只支持 1Gb。 如果各主机之间只有 1 Gb 的网络连接,那么客户端与虚拟机的通信不会有太大变化。 但是,VMXNET3 将允许同一主机上的虚拟机之间建立 10Gb 网络连接,这确实会带来改变,特别是在多层部署或者实例之间有高网络 IO 要求的情况下。 在计划关联性和反关联性 DRS 规则以将虚拟机保持在相同或不同的虚拟交换机上时,也应考虑此功能。
E1000 使用可用于 Windows 或 Linux 的通用驱动程序。 在客户机操作系统上安装 VMware Tools 之后,即可安装 VMXNET 虚拟适配器。
下图显示了一个典型的具有四个物理网卡端口的小型服务器配置,在 VMware 中配置了两个端口用于基础架构流量:用于管理和 vMotion 的 dvSwitch0,两个端口用于 VM 使用的应用程序。 使用网卡绑定和负载平衡来实现最佳吞吐量和 HA。
_图 3. 典型的具有四个物理网卡端口的小型服务器配置。_
# 客户机操作系统
推荐如下:
> 将 VMware Tools 加载到所有虚拟机操作系统中并保持该工具为最新是非常重要的。
VMware Tools 是一套实用工具,可增强虚拟机的客户机操作系统的性能,并改进对虚拟机的管理。 如果客户机操作系统中未安装 VMware Tools,则客户机性能会缺乏重要功能。
在所有 ESXi 主机上正确设置时间至关重要 - 这最终会影响客户机虚拟机。 虚拟机的默认设置是不将客户机的时间与主机同步 - 但在某些时候,客户机还是会与主机同步时间,并且如果超时,则已知会导致重大问题。 VMware 建议使用 NTP 而不是 VMware Tools 定期进行时间同步。 NTP 是行业标准,可确保客户机的计时准确。 可能需要开放防火墙 (UDP 123) 才能允许 NTP 流量。
# DNS 配置
如果 DNS 服务器托管在虚拟化基础架构上并且不可用,它会阻止 vCenter 解析主机名,使虚拟环境无法管理 - 然而虚拟机本身保持运行,没有问题。
# 高可用性
高可用性由 VMware vMotion、VMware Distributed Resource Scheduler (DRS) 和 VMware High Availability (HA) 等功能提供。 Caché 数据库镜像也可以用于增加正常运行时间。
为 Caché 生产系统设计 n+1 个物理主机是非常重要的。 在单个主机发生故障时,必须有足够的资源(例如 CPU 和内存)让其余主机上的所有虚拟机都能运行。 在服务器发生故障时,如果 VMware 无法在其余服务器上分配足够的 CPU 和内存资源,VMware HA 将不会在其余服务器上重新启动虚拟机。
## vMotion
vMotion 可以与 Caché 一起使用。 vMotion 允许以完全透明的方式将一个正常运行的虚拟机从一台 ESXi 主机服务器迁移到另一台。 虚拟机中运行的操作系统和 Caché 等应用程序没有服务中断。
使用 vMotion 进行迁移时,只有虚拟机的状态和内存(及其配置)会移动。 虚拟磁盘不需要移动;它保留在相同的共享存储位置。 虚拟机迁移后,它将在新的物理主机上运行。
vMotion 只能在共享存储架构(如共享 SAS 阵列、FC SAN 或 iSCSI)下工作。 由于 Caché 通常配置为使用大量共享内存,因此为 vMotion 提供充足的网络容量是非常重要的,1Gb 网络可能还可以,但也可能需要更高带宽,或者可以配置多网卡 vMotion。
## DRS
分布式资源调度器 (DRS) 是一种通过在集群中的不同主机服务器之间共享工作负载来在生产环境中自动使用 vMotion 的方法。 DRS 还具有对虚拟机实例实施 QoS 的能力,通过阻止非生产虚拟机过度使用资源来保护生产虚拟机的资源。 DRS 会收集有关集群主机服务器使用情况的信息,并通过在集群的不同服务器之间分配虚拟机工作负载来优化资源。 这种迁移可以自动或手动进行。
## Caché 数据库镜像
对于要求最高可用性的任务关键型一级 Caché 数据库应用实例,还应考虑使用 [InterSystems 同步数据库镜像](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GHA_mirror#GHA_mirror_set_bp_vm)。同时使用镜像的其他优势包括:
- 最新数据的单独副本。
- 故障转移在数秒内完成(比先重启虚拟机再重启操作系统再恢复 Caché 要快)。
- 在应用程序/Caché 发生故障(VMware 未检测到)时进行故障转移。
# vCenter Appliance
vCenter Server Appliance 是基于 Linux 的预配置虚拟机,针对 vCenter Server 和相关服务的运行进行了优化。 我一直建议拥有小型集群的站点使用 VMware vCenter Server Appliance 作为在 Windows 虚拟机上安装 vCenter Server 的替代方案。 在 vSphere 6.5 中,建议将该设备用于所有部署。
# 总结
本帖是在 VMware 上部署 Caché 时应考虑的关键最佳实践的综述。 这些最佳实践大多不是 Caché 独有的,而是可以应用于 VMware 上的其他一级业务关键型部署。
如果您有任何问题,请通过下面的评论告诉我。
文章
Louis Lu · 九月 22, 2021
技术概要(First Look)有助于您了解在InterSystems IRIS ®数据平台中如何使用SQL:标准的SQL功能、特有功能以及如何快速上手使用。
要体验技术概要(First Look)的所有内容 ,您可以在InterSystems IRIS的免费评估实例上执行相关操作 ,请参阅InterSystems First Looks(《InterSystems 技术概要》)。
1. InterSystems SQL: 特性和性能
InterSystems IRIS 提供高性能、功能完善的 SQL。在 InterSystems IRIS 中使用SQL,包括在单个CPU内核上运行查询,到使用数十个内核的CPU上并行执行查询,已至在InterSystems IRIS服务器集群上运行分布式查询。
在InterSystems IRIS中,可以使用 SQL 的范围包括:
联接(Joins)
灵活、高性能索引
聚合函数和分组
以SQL或InterSystems ObjectScript (以下简称“ObjectScript” )编写的存储过程
JDBC和ODBC连接
自动并行查询
透明分布式查询
InterSystems SQL提供了强大的工具来实现最佳的SQL查询性能。其中一个工具是使用压缩位图索引:使用紧凑、高度有效的结构和向量化的CPU指令, InterSystems SQL可以只用单个内核即可执行每秒数十亿行的聚合操作以及检查逻辑判断条件。本指南的后续内容将提供位图索引的示例。
想要快速尝试InterSystems IRIS的SQL功能吗?查看SQL QuickStart!
2. 演示:SQL Shell
可以通过各种应用程序接口、交互式客户端和标准协议在InterSystems IRIS中执行SQL ,包括:
用于交互式SQL语句执行的InterSystems IRIS SQL Shell
ODBC和JDBC客户端、交互式应用(例如, SQuirreL SQL或WinSQL )或通过将InterSystems IRIS驱动程序嵌入使用的应用程序
InterSystems IRIS管理门户中的System Explorer,为执行SQL提供了交互式的Web界面
在ObjectScript类中执行嵌入式SQL或动态SQL
如果在阅读本指南后,想了解这些主题的更多有关信息,请参阅下面的“了解有关InterSystems SQL的更多信息”。
此示例向您展示如何使用SQL Shell交互式执行SQL语句,或执行文件中的SQL语句。
2.1 用前须知
要使用该程序,需要一个正在运行的InterSystems IRIS实例。可以选择多种类型的已授权的免费评估实例;该实例不必存储在正在运行的系统(尽管它们可以互相进行网络访问)。如何部署每个类型的实例(如果您还没有要使用的实例)的有关信息,请参阅 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的Deploying InterSystems IRIS(部署 InterSystems IRIS)。
还需要从GitHub存储库https://github.com/intersystems/FirstLook- SQLBasics获取本指南的实用程序文件。应该克隆存储库来下载以下文件:
stock_table_demo_one.sql ,其中包含用于创建和加载小型( 20行)存量数据的表格的SQL语句
stock_table_demo_two.csv ,其中包含一百万行存量表数据
Loader.xml ,包含实用程序方法的类文件,用于将数据从stock_table_demo_two.csv加载到InterSystems IRIS表中
注意: stock_table_demo_two.csv 非常大 ,要下载它之前需要安装Git Large File Storage。
必须通过该实例访问FirstLook-SQLBasics源。下载文件的程序取决于所使用的实例类型,如下所示:
如果使用的是ICM部署的实例:
1.使用具有-machine 和-interactive 选项的 icm ssh 命令在储存该实例的节点上打开默认shell ,例如:
icm ssh -machine MYIRIS-AM-TEST-0004 -interactive
2. 在Linux命令行上,使用以下命令之一将存储库克隆到该实例的数据存储卷(data storage volume)。 例如,对于部署在Azure上的配置,数据卷的默认装入点为 /dev/sdd ,因此应使用如下命令:
$ git clone https://github.com/intersystems/FirstLook-SQLBasics /dev/sdd/FirstLook-SQLBasics
或者使用命令:
$ wget -qO- https://github.com/intersystems/FirstLook-SQLBasics/archive/master.tar.gz | tar xvz -C /dev/sdd
这些文件现在可以通过容器文件系统的/irissys/data/FirstLook-SQLBasics 目录被InterSystems IRIS获取。
如果您使用的是通过其他方式部署的容器化实例(授权的版本或社区版本):
1. 在主机上打开Linux命令行。(如果您在云节点上使用社区版本 ,请使用SSH连接到节点,如部署和浏览InterSystems IRIS中所述。)
2. 在Linux命令行上,使用git clone或wget命令,如上所述,将存储库克隆到加载为容器中的数据卷的存储位置。
对于社区版实例,可以克隆到该实例的%SYS 目录(社区版实例指定的配置数据存储的位置)。在Linux文件系统上,此目录为/opt/ISC/dur。该文件可以在容器文件系统的/ISC/dur/FirstLook-SQLBasics目录下被InterSystems IRIS获取。
对于授权的容器化实例,选择加载为容器中的数据卷的存储位置(包括durable%SYS 目录,如果使用的话)。例如,如果您的docker run命令包括选项 -v /home/user1:/external,然后将存储库克隆到/home/user1 ,这些文件在容器文件系统上的/external/FirstLook-SQLBasics目录中可被Inter- Systems IRIS获取。
如果您使用的是InterSystems Learning Labs实例:
1. 在集成的IDE中打开命令行终端。
2. 将目录更改为/home/project/shared ,并使用 git clone命令克隆存储库:
$ git clone https://github.com/intersystems/FirstLook-SQLBasics
该文件夹添加到“Shared”下左侧的Explorer面板,且该目录可在InterSystems IRIS 选择路径的 /home/project/shared下被获取。
如果您使用的是已安装的实例:
如果实例的主机是安装有GitHub Desktop和GitHub Large File Storage 的Windows系统:
a. 在主机的web浏览器中转到 https://github.com/intersystems/FirstLook-SQLBasics。
b. 选择Clone or download ,然后选择 Open in Desktop。
这些文件可在GitHub目录中被InterSystems IRIS 获取,例如 C:\ Users\ User1\ Documents\ GitHub\ FirstLook-SQLBasics。
如果主机是Linux系统,只需使用Linux命令行上的git clone命令或wget命令将存储库克隆到您选择的位置即可。
2.2 使用SQL脚本文件创建和填充表
为达到演示目的,我们使用一个SQL脚本文件,stock_table_demo_one.sql,来创建并加载包含几行示例数据的表。
创建和加载表格:
打开InterSystems 终端terminal。将看到如下交互式提示:
USER>
此提示表示您目前在 USER 命名空间(namespace)中,默认情况下该空间为空,可供客户自由使用。从该提示开始,可以执行ObjectScript。
通过输入如下命令立刻打开SQL Shell
DO $SYSTEM.SQL.Shell()
这将输出以下内容:
SQL Command Line Shell
The command prefix is currently set to: <<nothing>>. Enter q to quit, ? for help.
[SQL]USER>>
将当前SQL数据库方言设置为IRIS:
SET DIALECT=IRIS
要运行stock_table_demo_one.sql中的语句,请输入命令
RUN <Path>stock_table_demo_one.sql
其中Path是放置文件的位置(请参阅前面的用前须知)。系统会提示您为日志文件指定名称,日志文件包含文件中的语句及其输出结果、如何处理错误以及语句分隔符。接受所有默认值。
语句创建一个表格并插入20行。文件的前几行是:
CREATE TABLE FirstLook.StockTableDemoOne (ClientID INTEGER, BrokerID INTEGER, Symbol VARCHAR(10), TransactionType VARCHAR(4), TransactionDate TIMESTAMP,Quantity INTEGER, Price DECIMAL(15,2), CommmissionRate DECIMAL(15,2))
GO
INSERT INTO FirstLook.StockTableDemoOne (ClientID, BrokerID, Symbol, TransactionType, TransactionDate, Quantity, Price, CommmissionRate) VALUES (29834783, 3103, 'RTYU', 'SELL', '2016-01-03', 342, 5.05, 3.25)
GO
当脚本运行时,在处理每个SQL语句后将看到输出结果:
1. INSERT INTO FirstLook.StockTableDemoOne (ClientID, BrokerID, Symbol,
2. TransactionType, TransactionDate, Quantity,
3. Price, CommissionRate)
4. VALUES (92609349, 3103, 'HWVT', 'BUY', '2017-10-25', 1500, 451.09, 3.25)
1 Row Affectedu
处理完所有语句后, SQL Shell会列出编译的语句数量以及报告的错误和警告,并报告已用时间:
Statements
.................compiled: 21
.....with errors reported: 0
...with warnings reported: 0
Elapsed time: .125181 seconds
2.3 在SQL Shell中直接运行查询
有了已填充的表后,可以对它运行查询。可以使用单行或多行模式来执行此操作,但后者可能更方便。
若要进入多行模式,请根据提示按Enter键。将看到处于多行模式的确认信息。
输入以下SQL语法,逐行输入。关键字GO 指示shell执行查询并退出多行模式:
SELECT BrokerID, TO_CHAR((Quantity * Price),'9,999,999.99') as SubTotal, TransactionDate FROM FirstLook.StockTableDemoOne
WHERE TransactionType='SELL' ORDER BY SubTotal DESC
GO
您输入的语句将与SQL Shell呼应,后附查询结果。
BrokerID
SubTotal
TransactionDate
5001
302780.00
2017-11-06 09:51:24.735
5002
92350.00
2018-01-15 22:21:17.638
3103
57645.00
2017-09-24 19:36:43.079
3103
45015.00
2016-10-31 19:21:08.913
5001
23180.50
2017-07-31 23:05:49.83
5001
13113.60
2015-11-13 22:13:49.457
5001
12636.00
2015-10-13 05:50:23.209
3103
1727.10
2016-01-03 13:59:01.098
1009
1693.50
2016-01-15 18:18:15.346
在查询结果后,您将看到准备和执行语句所需时间的信息:
9 Rows(s) Affected
statement prepare time(s)/globals/cmds/disk: 0.0625s/47683/263292/0ms execute time(s)/globals/cmds/disk: 0.0006s/64/2903/0ms
cached query class: %sqlcq.USER.cls47
准备步骤包括从一条SQL语句的语法到生成可执行代码。此代码被缓存,以供重复使用,因此一条语句通常仅完全准备一次。后续准备只需要使用语句文本的hash来定位已经缓存的代码。
执行步骤包括执行针对查询生成的代码并返回其结果。在每个步骤的列表中都包含以下指标:
每个步骤所花费的时间。
Globals计数,即为准备或执行SQL语句而引用InterSystems IRIS存储的数量。如需进一步了解全局有关信息,请参阅Orientation Guide for Server-Side Programming(《服务器端编程入门指南》)中的“Introduction to Globals (Globals简介)”一章。
为准备或执行SQL语句而执行的ObjectScript命令的数目。
显示结果的结尾是缓存的查询类(cached query class),这是首次准备语句时生成的缓存代码的ObjectScript类。
3. 也可以使用聚合函数和 GROUP BY。请注意,可以对聚合函数的别名排序:
SELECT BrokerID, TO_CHAR(SUM(Quantity * Price), '9,999,999.99') as SubTotal FROM FirstLook.StockTableDemoOne
GROUP BY BrokerID ORDER BY SubTotal DESC
GO
BrokerID
SubTotal
3103
868,993.60
1009
808,453.50
5001
593,242.82
5002
187,560.00
4 Rows(s) Affected
statement prepare time(s)/globals/cmds/disk: 0.1665s/45832/237712/77ms
execute time(s)/globals/cmds/disk: 0.0025s/122/2434/2ms
cached query class: %sqlcq.USER.cls9
3. 演示:使用位图索引提高查询性能
如果您正在使用大型数据集,寻找改善查询性能的方法,位图索引是您可以使用的几种方法之一。
如果一个表有一个或多个字段,字段的可能值集合较小,则创建位图索引特别适合。
有关位图索引运行的详细信息,请参阅InterSystems SQL Optimization Guide(《InterSystems SQL优化指南》)的 Bitmap Indices(位图索引)章节。
在本演示中,您将看到在股票交易数据的百万行数据表格中创建目标位图索引引发的变化。您将使用几个简单的 ObjectScript 命令;很容易地从SQL Shell内无缝访问 ObjectScript 类库。
要运行演示:
按照“使用SQL脚本文件创建和填充表格”(Creating and Populating a Table With a SQL Script File)所述,在终端中启动SQL Shell。
创建表:
CREATE TABLE FirstLook.StockTableDemoTwo (ClientID INTEGER, BrokerID INTEGER,
Symbol VARCHAR(10), TransactionType VARCHAR(4),
TransactionDate TIMESTAMP, Quantity INTEGER,
Price DECIMAL(15,2), CommissionRate DECIMAL(15,2))
0 Rows Affected
statement prepare time(s)/globals/cmds/disk: 0.0063s/1811/22260/0ms
execute time(s)/globals/cmds/disk: 0.2138s/76495/655985/76ms
cached query class: %sqlcq.USER.cls1
导入Loader类( Loader.xml文件)。OBJ前缀表示 SQL Shell 按照 ObjectScript 处理以下命令; “c”标志指示InterSystems IRIS编译代码, “k”标志确保源代码存储在活动命名空间(active namespace)中。
OBJ DO $ system.OBJ.Load ("< Path > Loader.xml", "ck")
其中Path是放置文件的位置(请参阅用前须知)。将输出如下结果:
Load started on 04/19/2018 15:17:53
Loading file C:\Users\user\repos\FirstLook-SQLBasics\Loader.xml as xml Imported class: FirstLook.Loader
Compiling class FirstLook.Loader Compiling routine FirstLook.Loader.1 Load finished successfully.
要将stock_table_demo_two.csv中的数据加载到表中,请在终端中运行以下命令:
OBJ WRITE ##class(FirstLook.Loader).LoadStockTableCSV("<Path>stock_table_demo_two.csv")
其中Path是放置文件的位置。此命令的输出结果1000000仅表示已加载100万行。
运行以下查询:
SELECT DISTINCT BrokerID FROM FirstLook.StockTableDemoTwo
输出结果显示,可能的经纪人ID的数量非常小,因此该字段是位图索引的好选择。
BrokerID
115
107
101
114
119
104
109
108
20 Rows(s) Affected
statement prepare time(s)/globals/cmds/disk: 0.0645s/43430/197693/9ms
execute time(s)/globals/cmds/disk: 1.2569s/2000039/9001314/0ms
cached query class: %sqlcq.USER.cls10
6. 要在添加位图索引之前查看涉及BrokerID字段的COUNT查询的性能,请运行以下查询:
SELECT BrokerID, COUNT(*) As Transactions FROM FirstLook.StockTableDemoTwo GROUP BY BrokerId ORDER BY Transactions DESC
BrokerId
Transactions
103
50386
118
50304
107
50247
112
50207
101
50174
109
50088
115
50088
104
50048
111
50031
105
50008
113
49996
119
49942
114
49919
116
49894
110
49888
108
49882
102
49843
120
49768
106
49742
117
49545
20 Rows(s) Affected
观察查询返回结果后显示的查询性能统计信息:所用总时间(包括准备和执行时间)约为0.65秒。
statement prepare time(s)/globals/cmds/disk: 0.0695s/45048/225490/13ms
execute time(s)/globals/cmds/disk: 0.5878s/1000250/11002218/0ms
cached query class: %sqlcq.USER.cls7
7. 在BrokerID上添加位图索引:
CREATE BITMAP INDEX BrokerIDIdx ON TABLE FirstLook.StockTableDemoTwo (BrokerID)
0 Rows Affected
statement prepare time(s)/globals/cmds/disk: 0.0056s/1723/15958/0ms
execute time(s)/globals/cmds/disk: 0.9805s/2071557/18505697/1ms
cached query class: %sqlcq.USER.cls11
8. 运行与上述相同的SELECT查询。请注意性能提升:在下面的示例中,查询总共花费了大约0.35秒,减少了近50%。
SELECT BrokerID, COUNT(*) As Transactions FROM FirstLook.StockTableDemoTwo GROUP BY BrokerId ORDER BY Transactions DESC
...
statement prepare time(s)/globals/cmds/disk: 0.0573s/45585/231374/0m
execute time(s)/globals/cmds/disk: 0.2926s/622/15004397/0ms
cached query class: %sqlcq.USER.cls1
4. 了解有关InterSystems SQL的更多信息
要了解有关SQL和InterSystems IRIS的更多信息,请参阅:
4.1 介绍材料
Using InterSystems SQL(使用InterSystems SQL)
InterSystems SQL Reference(InterSystems SQL参考书目)
InterSystems SQL Overview(InterSystems SQL概述)
4.2 SQL开发
SQL –Things You Should Know (SQL-您应该知道的事情)
Developing with InterSystems Objects and SQL(使用InterSystems Objects和SQL开发)
4.3 查询优化
First Look: Optimizing SQL Performance with InterSystems IRIS(技术概要:使用InterSystems IRIS优化SQL性能)
InterSystems SQL Optimization Guide(InterSystems SQL优化指南)
Academy – Optimizing SQL Performance(学院派–优化SQL性能)
Optimizing SQL Queries(优化SQL查询)
4.4 分片和可扩展性
First Look: Scaling for Data Volume with Sharding(技术概要:带分片的数据卷扩展)
Scalability Guide(可扩展性指南)
4.5 SQL Search
SQL Search First Look: SQL Search with InterSystems IRIS(技术概要:使用InterSystems IRIS进行)
Using InterSystems SQL Search(使用InterSystems SQL Search)
Creating iFind Indices for Searching Text Fields(创建用于搜索文本字段的iFind索引)
4.6 JDBC
First Look: JDBC and InterSystems IRIS(技术概要:JDBC和InterSystems IRIS)
Using Java JDBC with InterSystems IRIS (documentation)(使用InterSystems IRIS进行Java JDBC <文档>)
Java Overview(Java概述)
Using JDBC with InterSystems IRIS (online learning)(在InterSystems IRIS中使用JDBC <在线学习>)
公告
Michael Lei · 一月 3
InterSystems IRIS® 数据平台、InterSystems IRIS® for Health 和 HealthShare® Health Connect 2025.1 的首个开发者预览版已发布到 WRC 开发者预览网站。容器可在我们的容器注册表中找到,并已添加 latest-preview 标签。
这些开发者预览版包含用于迁移到 IBM Open XL C/C++ for AIX 17.x 编译器的功能,从而在旧版编译器接近支持终止时确保与未来的 AIX 版本兼容。 此迁移侧重于 aixopenssl30 目标,支持 AIX 7.2 和 7.3 上的 SSL3。
可以在以下链接中找到初始文档:
InterSystems IRIS 数据平台 2025.1 | 文档首页
HealthShare Health Connect 2025.1 | 文档首页
可用性和软件包信息
此版本提供适用于所有受支持平台的经典安装包。有关完整列表,请参阅“支持的平台”文档。
安装包和预览版密钥可从 WRC 的预览版下载网站或通过评估服务网站(勾选“Show Preview Software”(显示预览软件)框)获取。
公告
Claire Zheng · 一月 7, 2021
大家好!InterSystems Global Masters 倡导中心与开发者社区紧密联系并不是秘密。 为开发者社区做出任何贡献都会带来 Global Masters 积分。 所以, 我们准备了一份关于如何在 Global Masters 以最佳方式获得积分的简短指南。
如何在 GLOBAL MASTERS 获得积分
在开发者社区上发布英文帖子
100
第一次在社区评论
回答一个问题 / 发表一个评论(英文)
300
30
第 1 个被标记为“已接受”的回答
1000
之后的每一个“已接收”回答
150
第5/10/25/50个“已接收”回答
4000/8000/20000/40000
翻译一篇文章
50
在 DC 上问第1/5/10/25/50个问题
500/2000 /5000 /15000/30000
在 DC 上发布第1/5/10/25/50个帖子
1500/7500/15000/40000/75000
在 Open Exchange 发布一个应用程序
800
对每一个ZPM应用积分奖励
400
在Open Exchange发布第1/5/10/25个应用程序
1000/10000/25000/75000
帖子浏览量达到750+/2000+/5000+/15000+
600/2500/7000/20000
在开发者社区阅读一篇帖子
10
看一个视频
20
通过社交媒体分享一次(帖子/视频)
40
发布的第1/2/3/4/5 篇带“最佳实践”标签的文章
1000/3000/7000/10000/15000
在Open Exchange上您的应用第50/100/250/500/1000次下载
2500/5000/7500/12500/25000
对 InterSystems / InterSystems 产品作一次评述
2 000-3 000
邀请成员加入开发者社区
600
为您的OEX应用创建一个video
3000
*仅计算在 Global Masters 倡导中心注册后发布的帖子。
完成挑战,获得徽章并升级:Insider > Advocate > Specialist > Expert > VIP。 您的级别越高,可获得的奖励越有趣!
欢迎点击查看更多有关 Global Masters 的其他信息:
如何加入 InterSystems Global Masters
Global Masters 徽章说明
Global Masters 级别说明
Global Masters 计划的变更
如果您尚未加入 InterSystems Global Masters 倡导中心,现在就开始行动吧! 欢迎在本帖评论中提出您的问题。 欢迎大家多参与Global Master,多积分,多贡献,提高等级,赢取礼品!
@Young Zheng @An Xingqi @jinhui hu @wenyang zhang @guoguo wang @shikai ren @chaolong huang @yabin duan @鹏飞 楚 @智辉 李 @SHAN HU @Wendy Wu
@Hao Wang @Z C @Zhaoying Li @Neal Wu @liu yaquan @qu qu @wang wei @guo meiya@yajing xu @yue li @权权 苏 @xiaohu xiong @yadong zhao @Yi Han @Wen Zhou @jie zhang @张 恒 @guo wenheng @Jing Li @迪 文
文章
Claire Zheng · 二月 1, 2021
大家好!
如您所知,我们发布了 InterSystems Open Exchange — 面向 InterSystems 数据平台上的解决方案和工具的市场!
但是如何在 OE 上发布应用程序?
在开始前,我先回答几个基本问题。
谁可以发布?
基本上,每个人都可以。 您可以使用您的 InterSystems 开发者社区帐户或 WRC 帐户登录 Open Exchange。
什么是应用程序?
Open Exchange 应用程序是使用任何 InterSystems 数据平台产品(Caché、Ensemble、HealthShare、InterSystems IRIS 或 InterSystems IRIS for Health)开发的解决方案、工具、互操作性适配器或接口。
或者该工具或解决方案应该有助于 InterSystems 数据平台上的开发、测试、部署或管理解决方案。
什么是 Open Exchange 的应用程序?
实际上,它是应用程序条目的名称、描述和链接集:下载页面、文档、代码仓库(如果有)、许可证等。
让我用我个人的示例来介绍这个过程。
将应用程序提交到 Open Exchange
为了说明这个过程,我在 ObjectScript for InterSystems IRIS 上开发了一个出色的应用程序,并希望将其与开发者社区分享:Ideal ObjectScript。
它演示了 ObjectScript 编码准则在各种 ObjectScript 用例中的理想用法。
有一些必需字段需要出现在每个 Open Exchange 应用程序上。
1. 名称 - 对于 Open Exchange 唯一的应用程序名称
2. 描述 - 应用程序的描述。 该字段支持 markdown。
3. 产品 URL - 应用程序下载页面的链接。
4. 许可证 - 显示应用程序许可证的页面的链接。
5. InterSystems 数据平台 - 应用程序面向的 InterSystems 数据平台集。
其余所有字段都是可选的。
那么,让我们来提交我的应用程序。
名称: Ideal ObjectScript
描述: Ideal ObjectScript 演示了 InterSystems ObjectScript 编码准则在各种 ObjectScript 用例中的理想用法。
产品URL: https://github.com/evshvarov/ideal_objectscript/releases/tag/1.0 - 应用程序的 Github 发行版部分中 1.0 版本的链接。
许可证URL: https://github.com/evshvarov/ideal_objectscript/blob/1.0/LICENSE - 应用程序的 LICENSE 文件的链接。
InterSystems数据平台: 该应用程序支持 InterSystems IRIS、Caché 和 Ensemble - 这是我自己测试过该应用程序的 InterSystems 产品列表。
这样,我们就可以提交应用程序了。
应用程序版本
在点击“Send For Approval”(发送以供批准)后,您需要提供应用程序的版本和版本说明。 我们使用 Semver 进行版本控制。 版本说明将发布在 Open Exchange 新闻、DC 社交媒体和应用程序的版本历史部分中。
在该应用程序进入批准工作流程后(结果是审批通过并自动在 OpEx 上发布,或者提供一些关于如何更正应用程序描述和链接的建议)。
输入
其他参数
图片 URL
在您的应用程序的图片图标上放置一个 URL,以使其显示在图块上。 您可以省略此参数,将显示标准 OpEx 图标。
Github URL
如果您的应用程序有 Github 仓库,则放置它的链接。 我们在 Open Exchange 上与 Github 进行了整合,因此,如果您引入指向应用程序的 Github 仓库的链接,Open Exchange 将自动显示来自 Github 的描述(Readme.md 中列出的所有内容)。 例如, 查看 Ideal ObjectScript 页面如何 显示在Open Exchange上。
社区文章URL
当然,您可以在开发者社区上用精彩的文章介绍您的应用程序,所以在这里放上文章的 URL!
如您所见,这个过程非常简单! 期待在 Open Exchange 上看到您的 InterSystems 数据平台应用程序!
敬请期待!
公告
Claire Zheng · 六月 20, 2021
亲爱的社区开发者们,大家好!
欢迎积极参与新一轮InterSystems开发者竞赛!
🏆 InterSystems 编程大赛:人工智能与机器学习 🏆
竞赛时间: 2021年6月28日 - 7月25日
奖金总额: $8,750
奖项设置
1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出:
🥇 第一名- $4,000
🥈 第二名 - $2,000
🥉 第三名 - $1,000
2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用:
🥇 第一名 - $1,000
🥈 第二名 - $500
🥉 第三名 - $250
如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金。
谁可以参加
任何开发者社区的成员均可参加,InterSystems内部员工除外。还没有账号?现在来建一个!
👥 开发者可以组团 创建一个协作应用程序,组团限定人数为2-5人。
请注意,要在您的README文件中标注您的团队成员——社区用户profile
参赛时间安排
🛠 6月 28日 - 7月18日: 应用开发、提交阶段
✅ 7月19日 - 7月 25日: 投票阶段
🎉 7月26日: 宣布优胜者!
注意:在整个参赛期间(开发与投票期间,即6月28日-7月25日),开发者可持续编辑、提升其应用
主题
🤖 人工智能与机器学习 🤖
利用InterSystems IRIS开发一个AI/ML解决方案。您的应用程序可以是一个库(library)、包(package)、工具(tool)或任何使用InterSystems IRIS的AI/ML解决方案。
以下是参赛须知:
有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。
利用InterSystems IRIS构建使用AI/ML功能的应用程序。
该应用应该在 IRIS Community Edition or IRIS for Health Community Edition or IRIS Advanced Analytics Community Edition 上工作。
该应用需开源并在GitHub上发布。
该应用的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。
(如果有),那么InterSystems ObjectScript部分的源代码应该以UDL(而非XML)格式提交, 举例说明。
上述要求可能会按需修订
资源助力
1. 我们建议从以下模板开始:
InterSystems IntegragedML template
IRIS R Gateway template
2. 数据导入工具
Data Import Wizard
CSVGEN - CSV import util
CSVGEN-UI - the web UI for CSVGEN
3. 文档
Using IntegratedML
4. 在线资源
Learn IntegratedML in InterSystems IRIS
Preparing Your Data for Machine Learning
Predictive Modeling with the Machine Learning Toolkit
5. 如何将您的APP提交给大赛::
如何在InterSystems Open Exchange上发布应用程序
如何把参赛APP提交给大赛
参赛评比
投票规则即将发布,敬请期待!
期待您的精彩提交!加入我们的编程马拉松,赢取大奖!
❗️点击此处,查看 官方竞赛条款解读❗️
成为社区活跃客户后即可参与投票:https://cn.community.intersystems.com/post/%E5%A6%82%E4%BD%95%E6%9B%B4%E5%A5%BD%E5%9C%B0%E6%88%90%E4%B8%BA%E7%A4%BE%E5%8C%BA%E8%B4%A1%E7%8C%AE%E8%80%85%E6%B4%BB%E8%B7%83%E7%94%A8%E6%88%B7%EF%BC%9F
文章
Jeff Liu · 三月 1, 2021
大数据的 5 个 V 与 InterSystems IRIS
参见下表:
Velocity(速度):水平和垂直节点扩展传递出的弹性速度 实现者:分布式内存缓存、分布式处理、分片和多模型架构 https://www.intersystems.com/isc-resources/wp-content/uploads/sites/24/ESG_Technical_Review-InterSystems-IRIS.pdf 和 https://learning.intersystems.com/course/view.php?id=1254&ssoPass=1
Value(价值):Analytics 和 AI产生的指数数据价值实现:BI、NLP、ML、AutoML 和多模型架构 https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=SETAnalytics 和 https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GIML_AUTOML
Veracity(真实性):在公司层面统一的单一真实数据源--实现者:连接器、数据总线、数据集成的 BPL 以及 API 管理 https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=PAGE_interoperability 和 https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=AFL_iam
Volume(容量):多个性能出色的 TB/PB 级数据存储库 实现者:分布式内存缓存、分布式处理、分片和多模型架构 https://www.intersystems.com/isc-resources/wp-content/uploads/sites/24/ESG_Technical_Review-InterSystems-IRIS.pdf 和 https://learning.intersystems.com/course/view.php?id=1254&ssoPass=1
Variety(多样性):同一位置多种数据格式(XML、JSON、SQL、对象)实现者:Repositório e Arquitetura Multimodelohttps://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=PAGE_multimodel
文章
Qiao Peng · 三月 5, 2021
大家好!
InterSystems IRIS 有一个名为 **Interoperability**(互操作性)的菜单。
它提供了轻松创建系统集成(适配器、记录映射、BPM、数据转换等)的机制,因此可以轻松连接不同的系统。
数据中继过程中可以包括各种操作,例如:为了连接没有正常连接的系统,可以根据目标系统的规范来接收(或发送)数据。 此外,在发送数据之前,可以从其他系统获取和添加信息。 还可以从数据库(IRIS 等)获取和更新信息。
在本系列文章中,我们将讨论以下主题,同时查看 示例代码 以帮助您了解工作原理以及在系统中集成互操作性时需要进行哪种开发。
* 工作原理
* 什么是Production
* 消息
* 组件创建
* 业务操作
* 业务流程
* 业务服务
首先,我介绍一下我们将在本系列文章中使用的案例研究。
> 某公司运营着一个购物网站,他们正在更改产品信息的显示顺序以配合季节变化。但是,有些商品无论季节如何都能卖得很好,而有些商品在意料之外的时间卖出,这不符合当前的显示顺序更改规则,因此,我们研究了按照当天的温度而不是季节来更改显示顺序的可能性。 调查购买产品时的温度变得非常必要。由于可以使用外部 Web API 来查询天气信息,因此我们计划收集购买时的天气信息,并将其记录在后面的审核数据库中。
案例非常简单,但您需要使用“外部 Web API”来收集信息,并且需要将获得的信息和购买信息结合起来记录在数据库中。
具体说明将在相关文章中讨论(不包括网站的创建)。 请移步观看!
至于我们这次使用的“外部 Web API”,我们使用的是 OpenWeather的 当前天气数据.
(如果您想要尝试一下,您需要注册一个帐户并获得 API ID).
以下是一个 REST 客户端发出的 GET 请求的结果(我们将以在 Interoperability 中实现的机制来运行此流程)。

HTTP 响应的 JSON 如下所示:
```json
{
"coord": {
"lon": 135.5022,
"lat": 34.6937
},
"weather": [
{
"id": 803,
"main": "Clouds",
"description": "broken clouds",
"icon": "04d"
}
],
"base": "stations",
"main": {
"temp": 17.05,
"feels_like": 13.33,
"temp_min": 16,
"temp_max": 18,
"pressure": 1017,
"humidity": 55
},
"visibility": 10000,
"wind": {
"speed": 4.63,
"deg": 70
},
"clouds": {
"all": 75
},
"dt": 1611635756,
"sys": {
"type": 1,
"id": 8032,
"country": "JP",
"sunrise": 1611612020,
"sunset": 1611649221
},
"timezone": 32400,
"id": 1853909,
"name": "Osaka",
"cod": 200
}
```
在 下一篇文章中,我们将讨论如何使用 Interoperability 菜单进行系统集成。
[OpenWeather]: https://openweathermap.org/
文章
Qiao Peng · 三月 28, 2021
如果您正打算学习FHIR、或者正在基于FHIR开发,最佳的学习和开发环境需要一个完备的FHIR 服务器,帮助您理解FHIR标准和调试FHIR应用。使用InterSystems IRIS医疗行业版可以快速配置出FHIR服务器和FHIR资源仓库。这篇文章介绍如何在5分钟内在InterSystems IRIS医疗行业版上配置FHIR服务器和FHIR资源仓库;同时对初学者介绍FHIR测试数据生成与加载的方法,和基本的FHIR REST API操作。
软件准备
1. InterSystems IRIS医疗行业版
您可以使用已有的2020.1及以上的InterSystems IRIS医疗行业版。如果您还没有,那么就在社区里下载一个最新的、免费的社区版吧。
2. 测试用的FHIR数据
如果您正在做FHIR开发,应该有很多FHIR测试数据。如果您正在学习FHIR,那么Synthea是一个不错的FHIR测试数据生成器选项。
3. REST测试工具
您或许已经有趁手的REST测试工具了。如果还没有,POSTMAN是个不错的选择。我的例子里用到的就是POSTMAN。
FHIR服务器配置
1. 安装InterSystems IRIS医疗行业版或社区版
如果您还没有安装过InterSystems IRIS医疗行业版或社区版,社区里有很多很好的介绍文章。
2. 配置FHIR服务器
2.1 创建一个FHIR 服务器命名空间
在InterSystems IRIS医疗行业版或社区版上,需要创建一个FHIR服务器命名空间。HS.HC.Util.Installer类的方法InstallFoundation可以创建这样的命名空间,例如,我们创建一个名为FHIRSERVER的命名空间:
HSLIB>D ##class(HS.HC.Util.Installer).InstallFoundation("FHIRSERVER")
2.2 为这个命名空间配置FHIR访问端点 (FHIR endpoint)
进入管理门户,切换到FHIRSERVER命名空间,然后Health > FHIR Configuration, 然后点击“Server Configuration”。这里会列出已有的FHIR服务器的访问端点,并可以配置新的端点。
这里点击+号,在弹出的配置页面中进行设置,其配置项是:
选中支持的FHIR版本 (Select a metadata set): 如果要支持最新的FHIR版本4,选中HL7V40,就是FHIR R4;
选中交换策略 (Select an interaction strategy): 默认情况下只会有一个选项 - HS.FHIRServer.Storage.Json.InteractionsStrategy,它会将InterSystems IRIS同时配置为FHIR资源仓库。
设置FHIR服务器REST服务端点 (Enter a name(URL)): 例如/csp/healthshare/fhirserver/fhir/r4
然后点击Finish,让它完成后台的配置,这可能会花费1分钟。
2.3 修改这个FHIR服务端点
因为我们是想利用它来学习和测试FHIR,所以我们先跳过访问认证部分。在端点列表中选中刚才创建的/csp/healthshare/fhirserver/fhir/r4,滚动到最下方,找到Edit按钮,并选中“Debugging”下的“Allow Unauthenticated Access”,让FHIR服务器接受匿名访问。然后点击Update进行更新。
如果您按上述步骤执行完成,并且没有错误,那么FHIR服务器和FHIR资源仓库已经就绪了。看看表,您用了多久完成FHIR服务器的创建。
下面测试一下FHIR服务器是否工作正常。
测试FHIR服务器
即便您还没有任何FHIR测试数据,也可以先看看这个FHIR服务器的能力声明。
通过POSTMAN,使用GET方法,进行REST调用:http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/metadata。这里localhost:52776是我的测试InterSystems IRIS的服务器地址和Web服务端口号,您换成自己的就行。如果您不知道,那么用您访问InterSystems IRIS管理门户的地址和端口号。
因为我们在上一步配置时,允许匿名访问REST API,所以POSTMAN无需设置任何登陆账户,非常方便测试。正常情况下,您应该看到和我一样的结果:
您的FHIR服务器已经正常工作了,如果还没有测试数据,是时候加载一些FHIR数据进来了。
产生FHIR数据
如果您有自己的FHIR测试数据,请跳过此步,查看“加载FHIR数据”。
如果您还没有自己的FHIR数据,试试Synthea,它能方便的产生大量FHIR测试数据。Synthea有清晰的文档,告诉我们如何产生测试数据。(注:如果您是FHIR初学者,建议先少量创建FHIR测试数据文件,例如先创建5个)
通常它会产生3类JSON文件:
医院信息:hospitalInformation******.json, 每批次只会产生一个医院信息文件。
医生信息:practitionerInformation******.json, 每批次只会产生一个医生信息文件。
患者信息:<患者姓名>******.json, 每批次会根据设置产生一个或多个患者信息文件。
这些FHIR文件都是Bundle资源,Bundle里面会有很多FHIR资源数据。其中医院信息文件和医生信息文件的Bundle类型为batch,而患者信息的Bundle是transaction。
而Synthea产生的患者信息Bundle中的资源使用literal reference来引用医院/地点和医生信息,但它产生的literal reference信息不完整,例如:
"serviceProvider": {
"reference": "Organization?identifier=https://github.com/synthetichealth/synthea|731e0f3a-075d-37ab-9ba7-fbf1ab2f45e9",
"display": "THE GENERAL HOSPITAL CORPORATION"
}
需要将reference改为完整的地址,例如:
"serviceProvider": {
"reference": "http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Organization?identifier=https://github.com/synthetichealth/synthea|731e0f3a-075d-37ab-9ba7-fbf1ab2f45e9",
"display": "THE GENERAL HOSPITAL CORPORATION"
}
也就是增加FHIR服务器的端点。
需要替换/补齐的引用分别是:Location、Organization和Practitioner。
您可以通过文本编辑器进行全局替换,将FHIR服务器的端点信息补充到reference里。如果您产生了很多FHIR数据文件,当然可以用您熟悉的语言写几行代码做这个补充替换。
这里我也附上使用IRIS的Object Script做补充替换的代码示例,它会对指定目录下的所有json文件进行扫描和补充替换,供您参考:
Class Demo.FHIRTools Extends %RegisteredObject
{
/// 修正FHIR文件的引用
/// pFilePath为FHIR json文件目录
/// pFHIREndpoint为FHIR REST的服务端点
ClassMethod CorrectSyntheaFiles(
pFilePath As %String = "C:\Temp\Synthea\output\fhir",
pFHIREndpoint As %String = "http://localhost:52776/csp/healthshare/fhirserver/fhir/r4") As %Status
{
Set tSC = $$$OK
// 遍历目录下的json文件
Set tSM = ##class(%SQL.Statement).%New()
Set tSC = tSM.%PrepareClassQuery("%File", "FileSet")
If $$$ISERR(tSC)
{
Do $system.OBJ.DisplayError(tSC)
Return tSC
}
Set tRS = tSM.%Execute(pFilePath, "*.json", "Name")
While tRS.%Next()
{
// 创建临时文件
Set tFileName = tRS.%Get("Name"),tTempFileName=$Replace(tFileName,".json","temp.json")
Set tFile=##class(%Stream.FileCharacter).%New()
Set tTempFile = ##class(%Stream.FileCharacter).%New()
Set tSC=tTempFile.LinkToFile(tTempFileName)
Set tSC=tFile.LinkToFile(tFileName)
// 从源文件逐行读取,替换后写入临时文件
While 'tFile.AtEnd
{
Set tLine=tFile.ReadLine()
// 执行替换
For tKeyword="Location?identifier=","Organization?identifier=","Practitioner?identifier="
{
Set tLine = $Replace(tLine,tKeyword,pFHIREndpoint_"/"_tKeyword)
}
Set tSC = tTempFile.WriteLine(tLine)
}
Do tTempFile.%Save()
Do tFile.%Close(), tTempFile.%Close()
Kill tFile,tTempFile
// 删除源文件,并将临时文件改名为源文件名
Set tSC = ##class(%File).Delete(tFileName,.tRtn)
Set tSC = ##class(%File).Rename(tTempFileName, tFileName, .tRtn)
}
Return tSC
}
}
加载FHIR数据
当然可以通过FHIR REST API来加载数据,不过,InterSystems IRIS提供了后台的API,可以快速加载特定目录下的大量的FHIR数据文件。
这里我们用后台API:HS.FHIRServer.Tools.DataLoader的SubmitResourceFiles方法进行大量FHIR文件加载:
FHIRSERVER>Set sc=##class(HS.FHIRServer.Tools.DataLoader).SubmitResourceFiles("C:\Temp\Synthea\upload","FHIRSERVER","/csp/healthshare/fhirserver/fhir/r4")
其中第一个入参是需要加载的文件目录;第二个参数是加载的FHIR服务器类型,这里用FHIRSERVER;第三个参数是FHIR REST服务端点。
这个方法同样适用于加载NDJSON格式的FHIR数据文件。
如果您是通过Synthea产生的测试FHIR JSON文件,那么应该先加载 医院信息文件(hospitalInformation******.json)和医生信息文件(practitionerInformation******.json),以确保患者数据加载时,Location、Organization和Practitioner的引用能正确关联到FHIR资源仓库中已保存的对应资源上。
注意:2020.* 版本中有一个bug,需要将医院信息文件(hospitalInformation******.json)和医生信息文件(practitionerInformation******.json)里的"type": "batch"改为"type": "transaction"。这个bug在2021.1版本中已经得到修复,我已经验证过,但如果您在使用2020的版本,请记得提前修改。
加载完医院信息文件(hospitalInformation******.json)和医生信息文件(practitionerInformation******.json)后,再执行相同的方法加载所有患者数据json文件。
使用FHIR 服务器
有了测试数据,现在您可以使用FHIR服务器进行学习或开发测试了。使用POSTMAN,您可以调用FHIR服务器的REST API,查询、更改、提交FHIR资源数据。
如果您是初学者,对FHIR的REST API不熟悉,建议您从FHIR Cheat Sheet开始,它是一个FHIR标准的汇总单页,里面告诉大家如何使用REST API进行操作。
例如:
1. 查询已经加载到FHIR资源仓库中的患者:
使用GET 方法调用REST:
http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Patient
2. 使用查询参数,查询名为Pedro316的患者:
使用GET 方法调用REST:
http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Patient?given=Pedro316
或使用POST 方法调用REST:
http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Patient/_search?given=Pedro316
3. 更复杂的查询参数用例,查询拥有观察项目编码为8302-2(体重)的患者:
使用GET 方法调用REST:
http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Patient?_has:Observation:patient:code=8302-2
4. 使用operation: $everything 来获取特定患者的所有相关FHIR资源(示例是id为95的患者):使用GET 方法调用REST:
http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Patient/95/$everything
5. 加载FHIR Bundle资源:
使用POST 方法调用REST:
http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/
,并在Body中直接贴入FHIR资源数据到raw,或选择FHIR资源数据文件到binary。
注意:如果您是想让FHIR服务器解析Bundle中的FHIR资源,应该用http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/,而不是http://localhost:52776/csp/healthshare/fhirserver/fhir/r4/Bundle。后者把POST的FHIR数据按Bundle进行处理,并不会解析其中包含的FHIR资源内容并逐一保存!
注意:记得根据FHIR数据的格式设置Content-Type为application/json+fhir 或 application/xml+fhir,然后将数据贴在Body里:
好了,开启您的FHIR之旅吧 :)
后续我还会更新InterSystems IRIS医疗版作为FHIR服务器和FHIR资源仓库的更多内容,欢迎关注。
公告
Nicky Zhu · 三月 30, 2021
现已推出三套新的维护版本:
Caché 2018.1.5, Ensemble 2018.1.5, and HSAP 2018.1.5
InterSystems IRIS 2019.1.2, IRIS for Health 2019.1.2, and HealthShare Health Connect 2019.1.2
InterSystems IRIS 2020.1.1, IRIS for Health 2020.1.1, and HealthShare Health Connect 2020.1.1
安装包和容器版本可从以下网站下载 WRC Software Distribution site。
这些都是维护版本,在广泛的领域内有许多更新。 有关这些版本中的修正信息,请参考该版本的文档,其中包括发行说明和升级检查表、发行变更列表,以及类参考资料和全套指南、参考资料、教程和文章。所有的文档都可以通过以下方式获得 docs.intersystems.com 。
在这些版本中也加入了新的平台支持。 特别是,Ubuntu 20.04 LTS的支持已经添加到所有版本中,IBM AIX 7.1和7.2对System p-64的支持已经添加到2019.1.2中(并且已经在2020.1中),而对Linux的ARM64支持已经添加到2020.1.1中。 详情请参见各版本的支持平台文档。
这些版本的构建号如下表所示:
版本
产品
构建号
2018.1.5
Caché and Ensemble
2018.1.5.659.0
2018.1.5
Caché Evaluation
2018.1.5.659.0su
2018.1.5
HealthShare Health Connect (HSAP)
2018.1.5HS.9056.0
2019.1.2
InterSystems IRIS
2019.1.2.718.0
2019.1.2
IRIS for Health
2019.1.2.718.0
2019.1.2
HealthShare Health Connect
2019.1.2.718.0
2020.1.1
InterSystems IRIS
2020.1.1.408.0
2020.1.1
IRIS for Health
2020.1.1.408.0
2020.1.1
HealthShare Health Connect
2020.1.1.408.0
2020.1.1
InterSystems IRIS Community
2020.1.1.408.0
2020.1.1
IRIS for Health Community
2020.1.1.408.0
2020.1.1
IRIS Studio
2020.1.1.408.0
文章
Li Yan · 一月 18, 2021
企业需要快速有效地扩展和管理其全球计算基础设施,同时优化和管理资本成本及支出。 Amazon Web Services (AWS) 和 Elastic Compute Cloud (EC2) 计算和存储服务提供高度稳健的全球化的计算基础设施,可满足最苛刻的基于 Caché 的应用程序的需求。Amazon EC2 基础设施使各公司能够迅速预置计算能力和/或快速灵活地将其现有内部基础架构扩展到云端。 AWS 针对安全、网络、计算和存储提供了一套丰富的服务和强大的企业级机制。
AWS 的核心是 Amazon EC2。 它是支持各种操作系统和机器配置(例如 CPU、RAM、网络)的云计算基础设施。 AWS 提供预先配置的虚拟机 (VM) 映像(称为 Amazon 系统映像或 AMI),客户操作系统包括各种 Linux® 和 Windows 发行版及版本。 可以将其它软件用作 AWS 中运行的虚拟化实例的基础。 您可以将这些 AMI 用作实例化以及安装或配置其他软件、数据等的起点,以创建特定于应用程序或工作负载的 AMI。
与任何平台或部署模式一样,必须留心以确保考虑到应用程序环境的各个方面,例如性能、可用性、操作和管理程序。
本文将详细介绍以下每个方面。
网络设置和配置。 此部分介绍基于 Caché 的应用程序在 AWS 中的网络设置,包括为参考架构内不同层级和角色的逻辑服务器组提供支持的子网。
服务器设置和配置。 此部分介绍为每一层设计各种服务器时涉及的服务和资源。 还包括用于跨可用区实现高可用性的架构。
安全。 此部分讨论 AWS 中的安全机制,包括如何配置实例和网络安全以实现对整体解决方案以及层和实例之间的授权访问。
部署和管理。此部分提供有关打包、部署、监控和管理的详细信息。
架构和部署方案
本文提供了几个在 AWS 内实现的参考架构,作为提供基于 InterSystems 技术(包括 Caché、Ensemble、HealthShare、TrakCare)以及相关嵌入式技术(如 DeepSee、iKnow、CSP、Zen 和 Zen Mojo)的高性能和高可用性应用程序的示例。
为了了解如何在 AWS 上托管 Caché 及相关组件,我们先来回顾一下典型 Caché 部署的架构和组件,并探讨一些常见的方案和拓扑。
Caché架构回顾
InterSystems 数据平台不断发展,提供先进的数据库管理系统和快速的应用程序开发环境,以在处理和分析复杂数据模型以及开发 Web 和移动应用程序方面实现突破。
这是新一代的数据库技术,提供多种数据访问模式。 数据只在单个集成数据字典中描述一次,并且可以通过对象访问、高性能 SQL 和强大的多维存取即时进行访问 – 所有这些方式可以同时访问相同数据。
图 1 说明了可用的 Caché 高级架构组件层和服务。 这些通用层也适用于 InterSystems TrakCare 和 HealthShare 产品。
图 1:高级组件层
常见部署方案
部署有许多可能的组合,但本文将介绍两种方案:混合模型和完整的云托管模型。
混合模型
在此方案中,公司希望在需要时将企业内部资源和 AWS EC2 资源都用于灾难恢复、内部维护应急、重新平台化计划或短期/长期扩容。 此模型可以为内部故障转移镜像成员集群提供业务连续性和灾难恢复的高可用性。
在该方案中,此模型的连接依赖于内部部署和 AWS 可用区之间的 VPN 隧道,将 AWS 资源作为企业数据中心的扩展。 还有其他连接方法,例如 _AWS Direct Connect_。 但是,这不是本文涵盖的内容。 有关 AWS Direct Connect 的更多详细信息,可以在here找到。
有关设置此 Amazon Virtual Private Cloud (VPC) 示例以支持内部数据中心灾难恢复的详细信息可以在here找到。
图 2:使用 AWS VPC 提供内部灾难恢复的混合模型
上面的示例展示了一个故障转移镜像对通过与 AWS VPC 的 VPN 连接在内部数据中心的运行。 所示的 VPC 在给定 AWS 区域的双可用区中提供了多个子网。 有两个灾难恢复 (DR) 异步镜像成员 (每个可用区有一个) 提供弹性。
云托管模型
在此方案中,基于 Caché 的应用程序(包括数据层和表示层)完全放在 AWS 云中,使用了单个 AWS 区域内的多个可用区。 可以使用相同的 VPN 隧道 AWS Direct Connect, 甚至纯互联网连接模型。
图 3:支持完整生产工作负载的云托管模型
图 3 中的示例说明了在 VPC 中支持整个应用程序生产部署的部署模型。 此模型利用双可用区,在可用区之间同步故障转移镜像,同时将负载均衡 Web 服务器和相关应用程序服务器作为 ECP 客户端。 每个层都隔离在一个单独的安全组中,以进行网络安全控制。 IP 地址和端口范围仅根据应用程序的需要开放。
存储和计算资源
存储
有多种类型的存储选项可供选择。 就本参考架构而言,将针对几种可能的用例讨论 Amazon Elastic Block Store (Amazon EBS) 和 (也称为临时驱动器)卷。 各种存储选项的更多详细信息可以在 here 和 here 找到。
Elastic Block Storage (EBS)
EBS 提供了可与 Amazon EC2 实例(虚拟机)配合使用的持久块级存储,在 Linux 或 Windows 中可以将其格式化并挂载为传统文件系统,最重要的是,这些卷是非实例存储,独立于单个 Amazon EC2 实例的运行寿命而持续存在,这对于数据库系统非常重要。
此外,Amazon EBS 还提供了创建卷的时间点快照的功能,这些快照会持久保存在 Amazon S3 中。 这些快照可以用作新的 Amazon EBS 卷的起点,并保护数据以实现长期耐久性。 同一快照可用于实例化任意数量的卷。 这些快照可以跨 AWS 区域复制,因此可以更容易地利用多个 AWS 区域进行地理扩张、数据中心迁移和灾难恢复。 Amazon EBS 卷的大小范围为 1 GB 到 16 TB,以 1 GB 为增量进行分配。
Amazon EBS 内有三种不同的类型:磁介质卷、通用型 (SSD) 和预置 IOPS (SSD)。 以下各小节提供了每种类型的简要介绍。
磁介质卷
磁介质卷为具有中等或突发 I/O 要求的应用程序提供经济高效的存储。 磁介质卷设计为平均每秒提供约 100 次输入/输出操作 (IOPS),最大突发能力为数百 IOPS。 磁介质卷也非常适合用作启动卷,其突发能力提供了快速的实例启动时间。
通用型 (SSD)
通用型 (SSD) 卷提供具有成本效益的存储,是各种工作负载的理想选择。 这些卷的延迟只有个位数毫秒,能够长时间突发至 3,000 IOPS,基准性能为 3 IOPS/GB,最高可达 10,000 IOPS (3,334 GB)。 通用型 (SSD) 卷的大小范围为 1 GB 到 16 TB。
预置 IOPS (SSD)
预置 IOPS (SSD) 卷设计用于为 I/O 密集型工作负载(例如对存储性能和随机访问 I/O 吞吐量的一致性敏感的数据库工作负载)提供可预测的高性能。 在创建卷时指定 IOPS 速率,然后 Amazon EBS 在给定一年的 99.9% 的时间内提供 10% 内的预置 IOPS 性能。 预置 IOPS (SSD) 卷的大小可以为 4 GB 到 16 TB,每个卷最多可预置 20,000 IOPS。 预置的 IOPS 与请求的卷大小之比最大为 30;例如,IOPS 为 3,000 的卷必须至少为 100 GB 大小。 预置 IOPS (SSD) 卷对每个预置的 IOPS 的吞吐量限制为 256 KB,最高 320 MB/秒(1,280 IOPS)。
本文讨论的架构使用 EBS 卷,因为这些卷更适合需要可预测的低延迟每秒输入/输出操作 (IOPS) 和吞吐量的生产工作负载。 选择特定的虚拟机类型时必须小心,因为并非所有 EC2 实例类型都可以访问 EBS 存储。
注意: 由于 Amazon EBS 卷是网络附加设备,Amazon EC2 实例执行的其他网络 I/O 以及共享网络上的总负载可能会影响单个 Amazon EBS 卷的性能。 为了让 Amazon EC2 实例充分利用 Amazon EBS 卷上的预置 IOPS,可以将选定的 Amazon EC2 实例类型作为 Amazon EBS 优化的实例启动。
有关 EBS 卷的详细信息,可以在here 找到。
EC2 实例存储(临时驱动器)
EC2 实例存储由托管您的正在运行的 Amazon EC2 实例的同一台物理服务器上的磁盘存储的预配置和预附加块组成。 提供的磁盘存储量因 Amazon EC2 实例类型而异。 在提供实例存储的 Amazon EC2 实例系列中,较大的实例往往提供更多更大的实例存储量。
存储优化 (I2) 和密集存储 (D2) 的 Amazon EC2 实例系列提供针对特定用例的专用实例存储。 例如,I2 实例提供了非常快的 SSD 实例存储,能够支持超过 365,000 的随机读取 IOPS 和 315,000 的写入 IOPS,并提供具有成本吸引力的定价模型。
与 EBS 卷不同,该存储不是永久性的,只能用于实例的生命周期,不能分离或附加到其他实例。 实例存储用于临时存储不断变化的信息。 在 InterSystems 技术和产品领域中,诸如将 Ensemble 或 Health Connect 用作企业服务总线 (ESB) 的项目、使用企业缓存协议 (ECP) 的应用程序服务器或将 Web 服务器与 CSP 网关一起使用,对于这种类型的存储和存储优化的实例类型,以及使用预置和自动化工具来提高有效性和支持弹性的操作来说,都是很好的用例。
有关实例存储卷的详细信息,可以在here 找到。
计算
EC2 实例
有多种实例类型可供使用,它们针对各种用例进行了优化。 实例类型包括 CPU、内存、存储和网络容量的不同组合,从而实现无数种组合来合理调整您的应用程序的资源要求。
就本文档而言,将参考_通用 M4_ Amazon EC2 实例类型作为优化环境大小的方法,这些实例提供 EBS 卷的功能和优化。 根据您的应用程序的容量要求和定价模型,还可能有替代方案。
M4 实例是最新一代的_通用_实例。 此系列提供了计算、内存和网络资源的平衡配置,对于许多应用程序来说是很好的选择。 容量范围为 2 到 64 个虚拟 CPU 和 8 到 256GB 的内存,以及相应的专用 EBS 带宽。
除了各个实例类型,还有分层的分类,例如专用主机、Spot 实例、预留实例和专用实例,每个类别的定价、性能和隔离都不同。
在 here 确认当前可用实例的可用性和详细信息。
可用性和操作
Web/App 服务器负载均衡
您的基于 Caché 的应用程序可能需要外部和内部负载均衡的 Web 服务器。 外部负载均衡器用于通过互联网或 WAN(VPN 或 Direct Connect)进行的访问,内部负载均衡器可用于内部流量。 AWS Elastic Load Balancing 提供两种类型的负载均衡器 – 应用程序负载均衡器和传统负载均衡器。
传统负载均衡器
传统负载均衡器根据应用程序或网络信息对流量进行路由,是在多个需要高可用性、自动扩展和强大安全性的 EC2 实例之间实现简单的流量负载均衡的理想选择。 具体的详细信息和功能可在here 找到。
应用负载均衡器
应用程序负载均衡器是 Elastic Load Balancing 服务的负载均衡选项,该服务在应用程序层运行,允许您根据一个或多个 Amazon EC2 实例上运行的多个服务或容器中的内容定义路由规则。 此外,还支持 WebSockets 和 HTTP/2。 具体的详细信息和功能可在here找到。
示例
在以下示例中,定义了一组三个 Web 服务器,每个服务器都在一个单独的可用区,以提供最高级别的可用性。 必须为 Web 服务器负载均衡器配置粘性会话 ,才能支持使用 cookie 将用户会话固定到特定 EC2 实例的功能。 当用户继续访问您的应用程序时,流量将路由到相同实例。
图 4 给出了 AWS 中的传统负载均衡器的一个简单示例。
图 4:传统负载均衡器示例
数据库镜像
在 AWS 上部署基于 Caché 的应用程序时,如果要为 Caché 数据库服务器提供高可用性,则需要在给定的主 AWS 区域使用同步数据库镜像来提供高可用性,还可能需要使用异步数据库镜像将数据复制到辅助 AWS 区域中的热备份以实现灾难恢复,具体取决于正常运行时间服务水平协议要求。
数据库镜像是两个数据库系统的逻辑分组,也就是所说的故障转移成员,它们在物理上是仅通过网络连接的独立系统。 在这两个系统之间进行仲裁后,镜像会自动将其中一个系统指定为主系统; 另一个成员自动成为备份系统。 外部客户端工作站或其他计算机通过镜像虚拟 IP (VIP) 连接到镜像,该虚拟 IP 在镜像配置期间指定。 镜像 VIP 会自动绑定到主镜像系统上的接口。
注意: 在 AWS 中,无法以传统方式配置镜像 VIP,因此设计了替代解决方案。 不过,镜像可跨子网获得支持。
目前在 AWS 中部署数据库镜像的建议是,在跨越三个不同可用区的同一个 VPC 中配置三个实例(主要、备份、仲裁器)。 这可以确保在任何给定时间,AWS 都将保证可以从外部连接其中的至少两个虚拟机,SLA 达到 99.95%。 这样可以为数据库数据本身提供充分的隔离和冗余。 有关 AWS EC2 服务水平协议的详细信息,可在here 找到。
故障切换成员之间的网络延迟没有硬性上限。延迟增加所产生的影响因应用程序而异。如果故障转移成员之间的往返时间与磁盘写入服务时间相似,则预计不会产生影响。 但是,当应用程序必须等待数据变为持久保存(有时称为日志同步)时,响应时间可能是一个问题。 有关数据库镜像和网络延迟的详细信息,可在here 找到。
虚拟 IP 地址和自动故障转移
大多数 IaaS 云提供商缺乏提供虚拟 IP (VIP) 地址的能力,这种地址通常用在数据库故障转移设计中。 为解决这一问题,Caché、Ensemble 和 HealthShare 中增强了几种最常用的连接方法,尤其是 ECP 客户端和 CSP 网关,从而不再依赖 VIP 功能使它们实现镜像感知。
xDBC、直接 TCP/IP 套接字等连接方法或其他直接连接协议仍需要使用 VIP。 为解决这些问题,InterSystems 数据库镜像技术通过使用 API 与 AWS Elastic Load Balancer (ELB) 进行交互以实现类似 VIP 的功能,使得在 AWS 中为这些连接方法提供自动故障转移成为可能,从而在 AWS 中提供完整而强大的高可用性设计。
此外,AWS 最近推出了一种新类型的 ELB,称为应用程序负载均衡器。 这种类型的负载均衡器在第 7 层运行,支持基于内容的路由,并支持在容器中运行的应用程序。 基于内容的路由对于使用分区数据或数据分片部署的大数据类型项目尤其有用。
与虚拟 IP 一样,这是网络配置的突然变化,不涉及任何应用逻辑,不会向已连接到发生故障的主镜像成员的现有客户端发出正在进行故障转移的通知。 根据故障的性质,这些连接终止的原因可能是故障本身、应用程序超时或错误、新的主镜像实例强制旧的主镜像实例停机,或者客户端使用的 TCP 保持连接定时器过期。
结果,用户可能必须重新连接并登录。 您的应用程序的行为将决定此行为。 有关各种类型的可用 ELB 的详细信息,可在here找到。
AWS EC2 实例对 AWS Elastic Load Balancer 方法的调用
在此模型中,ELB 可以定义一个包含故障转移镜像成员和潜在 DR 异步镜像成员的服务器池,其中只有一个活动条目是当前主镜像成员,或者只定义一个具有单个活动镜像成员条目的服务器池。
图 5:与 Elastic Load Balancer 交互的 API 方法(内部)
当某个镜像成员成为主镜像成员时,会从您的 EC2 实例向 AWS ELB 发出一个 API 调用,以调整/指示新主镜像成员的 ELB。
图 6:使用负载均衡器的 API 故障转移到镜像成员B
如果主镜像成员和备份镜像成员都变得不可用,同一模型也适用于升级 DR 异步镜像成员。
图 7:使用负载均衡器的 API 将 DR 异步镜像成员升级为主镜像成员
按照标准推荐的 DR 过程,上面的图 6 中的 DR 成员升级需要人为决策,因为异步复制可能会造成数据丢失。 不过,一旦执行该操作,就不再需要对 ELB 执行管理操作。 在升级期间调用 API 后,将自动路由流量。
API 详细信息
这个用于调用 AWS 负载均衡器资源的 API 在 ^ZMIRROR 例程中专门定义为以下过程调用的一部分:
$$CheckBecomePrimaryOK^ZMIRROR()
在此过程内,插入您选择的要从 AWS ELB REST API、命令行界面等使用的任何 API 逻辑或方法。 与 ELB 进行交互的一种有效且安全的方法是使用 AWS Identity and Access Management (IAM) 角色,这样不必为 EC2 实例分配长期凭据。 IAM 角色提供了 Caché 可以用来与 AWS ELB 进行交互的临时权限。 有关使用分配给 EC2 实例的 IAM 角色的详细信息,可在 here 找到。
AWS Elastic Load Balancer 轮询方法
2017.1 提供了一种使用 CSP 网关的mirror_status.cxw 页的轮询方法,可以将其用作 ELB 监控每个已添加到 ELB 服务器池的镜像成员运行状况的轮询方法。只有主镜像会响应“SUCCESS”,因而网络流量只定向到活动的主镜像成员。
此方法不需要向 ^ZMIRROR 添加任何逻辑。 请注意,大多数负载均衡网络设备对运行状态检查的频率有限制。 通常,最高频率不少于5秒,这通常是可接受的,可支持大多数正常运行时间服务水平协议。
一个对以下资源的 HTTP 请求将测试本地缓存配置的镜像成员状态。
/csp/bin/mirror_status.cxw
对于所有其他情况,这些镜像状态请求的路径应解析到适当的缓存服务器和命名空间,它们与用于请求实际 CSP 页的缓存服务器和命名空间使用相同的分层机制。
示例:在 /csp/user/ 路径中测试服务于应用程序的配置的镜像状态:
/csp/user/mirror_status.cxw
注意:调用镜像状态检查不消耗 CSP 许可证。
根据目标实例是否为活动的主要成员,网关将返回以下 CSP 响应之一:
** Success (Is the Primary Member)
===============================
HTTP/1.1 200 OK
Content-Type: text/plain
Connection: close
Content-Length: 7
SUCCESS
** Failure (Is not the Primary Member)
===============================
HTTP/1.1 503 Service Unavailable
Content-Type: text/plain
Connection: close
Content-Length: 6
FAILED
** Failure (The Cache Server does not support the Mirror_Status.cxw request)
===============================
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain
Connection: close
Content-Length: 6
FAILED
下图说明了各种使用轮询方法的方案。
图 8:轮询所有镜像成员
如上面的图 8 所示,所有镜像成员都在运行,只有主镜像成员向负载均衡器返回“SUCCESS”,因此网络流量将只定向到该镜像成员。
图 9:使用轮询故障转移到镜像成员 B
上图演示了将 DR 异步镜像成员升级到负载均衡池中的过程,这通常假定同一台负载均衡网络设备为所有镜像成员提供服务(本文稍后将介绍按地理位置划分的方案)。
按照标准推荐的 DR 过程,DR 成员升级需要人为决策,因为异步复制可能会造成数据丢失。 不过,一旦执行该操作,就不再需要对 ELB 执行管理操作。 它会自动发现新的主镜像成员。
图 10:使用轮询对 DR 异步镜像成员进行故障转移和升级
备份和还原
备份操作有多个选项。 对于 InterSystems 产品的 AWS 部署,可以使用以下三个选项。 前两个选项包括一个快照类型过程,该过程在创建快照前会暂停将数据库写入磁盘,然后在快照成功建立后恢复更新。 执行以下高级步骤使用任一快照方法创建干净备份:
通过数据库冻结 API 调用暂停对数据库的写入。
创建操作系统和数据磁盘的快照。
通过数据库解锁API 调用恢复 Caché 写入。
将设施存档备份到备份位置。
可以定期添加完整性检查等其他步骤,以确保备份干净一致。 决定使用哪个选项取决于组织的运营要求和策略。 InterSystems 可与您详细讨论各种选项。
EBS 快照
EBS 快照是在高度可用和成本较低的 Amazon S3 存储上创建时间点快照的非常快速且有效的方法。 EBS 快照连同 InterSystems 外部冻结和解锁API 功能,可以实现真正的 24x7 弹性运行,并确保干净的定期备份。 使用 AWS 提供的服务(如 Amazon CloudWatch Events)或市场上的第三方解决方案(如 Cloud Ranger 或 N2W Software Cloud Protection Manager 等等),有许多选项可以使该过程自动化。
此外,还可以使用 AWS 直接 API 调用,以编程方式创建您自己的自定义备份解决方案。 有关如何利用 API 的详细信息,请参见here 和here.
注意:InterSystems 不为上述任何第三方产品背书或明确进行验证。 测试和验证取决于客户.
逻辑卷管理器快照
或者,通过在虚拟机自身内部署单独的备份代理,并利用文件级备份与 Linux 逻辑卷管理器 (LVM) 快照或 Windows 卷影复制服务 (VSS) 相结合,可以使用市场上的许多第三方备份工具。
此模型的主要优点之一是能够对基于 Windows 或 Linux 的实例进行文件级还原。 该解决方案有几点需要注意,由于 AWS 和大多数其他 IaaS 云提供商不提供磁带介质,因此所有备份存储库都基于磁盘进行短期归档,而且能够利用 Amazon S3 低成本存储并最终使用 Amazon Glacier 实现长期保留 (LTR)。 如果使用此方法,强烈建议使用支持去重技术的备份产品,以最有效地利用基于磁盘的备份存储库。
这些具有云支持的备份产品的示例包括但不限于:Commvault、EMC Networker、HPE Data Protector 和 Veritas Netbackup。
注意:InterSystems 不为上述任何第三方产品背书或明确进行验证。 测试和验证取决于客户.
Caché 在线备份
对于小型部署,内置 Caché 在线备份工具也是一个可行选项。 该 InterSystems 数据库在线备份实用工具通过捕获数据库中的所有块来备份数据库文件中的数据,然后将输出写入顺序文件。 这种专有的备份机制旨在使生产系统的用户不停机。
在 AWS 中,在线备份完成后,必须将备份输出文件和系统使用的所有其他文件复制到用作文件共享的 EC2 (CIFS/NFS)。 该过程需要在虚拟机中编写脚本并执行。
在线备份是入门级方法,适合于希望实施低成本备份解决方案的小型站点。 但是,随着数据库的增大,建议将使用快照技术的外部备份作为最佳做法,其优势包括:备份外部文件、更快的恢复时间,以及企业范围的数据视图和管理工具。
灾难恢复
在 AWS 上部署基于 Caché 的应用程序时,建议将 DR 资源(包括网络、服务器和存储)放在不同的 AWS 区域中,或者至少放在单独的可用区中。指定的 DR AWS 区域所需的容量取决于您组织的需求。 在大多数情况下,以 DR 模式运行时需要 100% 的生产能力,但作为一个弹性模型,可以先预置较少的能力,直到需要更多能力。 较少的能力可以体现为较少的 Web 和应用程序服务器,甚至可能使用较小的 EC2 实例类型作为数据库服务器,升级后,EBS 卷将附加到较大的 EC2 实例类型。
异步数据库镜像用于连续复制到 DR AWS 区域的 EC2 实例。 镜像使用数据库事务日志以对主系统性能影响最小的方式通过 TCP/IP 网络复制更新。 强烈建议对这些 DR 异步镜像成员配置日志文件压缩和加密。
公共互联网上所有希望访问应用程序的外部客户端都将通过作为附加 DNS 服务的 Amazon Route53 进行路由。Amazon Route53 用作将流量定向至当前活动数据中心的交换机。 Amazon Route53 执行三种主要功能:
域注册 –允许您注册 example.com 之类的域名。
域名系统 (DNS) 服务 – Amazon Route53 将类似 www.example.com 的友好域名转换为 192.0.2.1 之类的 IP 地址。 Amazon Route53 使用全球权威 DNS 服务器网络来响应 DNS 查询,从而降低延迟。
运行状况检查–Amazon Route53 通过互联网向您的应用程序发送自动请求,以验证其是否可达、可用和正常运行。
这些功能的详细信息可在 here找到。
就本文档而言,将讨论 DNS 故障转移和 Route53 运行状况检查。 运行状况检查监控和 DNS 故障转移的详细信息可在 here 和here找到。
Route53 的工作方式是向每个端点发出常规请求,然后验证响应。 如果某个端点未能提供有效响应, 它将不再包含在 DNS 响应中,而是返回一个替代的可用端点。 这样,用户流量就会从发生故障的端点转向可用的端点。
使用上述方法,将只允许流量转向特定区域和特定镜像成员。 这是由端点定义控制的,它是本文先前讨论过的 mirror_status.cxw 页,由 InterSystems CSP 网关提供。 只有主镜像成员会在运行状况检查中报告 HTTP 200 来表示“SUCCESS”。
下图演示了高级别的故障转移路由策略。 此方法和其他策略的详细信息可在here找到。
图 11:Amazon Route53 故障转移例程策略
在任何给定时间,只有一个区域会根据端点监控进行在线报告。 这样可以确保流量在给定时间只流向一个区域。 区域之间的故障转移无需增加步骤,因为端点监控将检测到指定的主 AWS 区域中的应用程序已关闭,并且该应用程序此时在次要 AWS 区域中处于活动状态。 这是因为 DR 异步镜像成员已被手动升级为主镜像成员,随后允许 CSP 网关将 HTTP 200 报告给 Elastic Load Balancer 端点监控。
上述解决方案有很多替代方案,可以根据您组织的运营要求和服务水平协议进行自定义。
监控
Amazon CloudWatch 可用于为您的所有 AWS 云资源和应用程序提供监控服务。 Amazon CloudWatch 可用于收集和跟踪指标,收集和监控日志文件,设置警报,并自动对 AWS 资源的变化做出反应。 Amazon CloudWatch 可以监控 AWS 资源,如 Amazon EC2 实例,以及您的应用程序和服务生成的自定义指标,还有您的应用程序生成的任何日志文件。 您可以使用 Amazon CloudWatch 获得系统范围内的资源利用率、应用程序性能和运行状况的可见性。 详细信息可在here找到。
自动预置
目前,市场上有许多工具,包括 Terraform、Cloud Forms、Open Stack 和 Amazon 自己的 CloudFormation。 使用这些工具并与其他工具(如 Chef、Puppet、Ansible 等)相结合,可以提供完整的基础设施即代码,来支持 DevOps 或简单地以完全自动化的方式引导您的应用程序。 Amazon CloudFormation 的详细信息可在here找到。
网络连接
根据您的应用程序的连接要求,有多种连接模型可用:使用互联网、VPN 或使用 Amazon Direct Connect 的专用链接。 选择方法取决于应用程序和用户需求。 三种方法的带宽使用情况各不相同,最好通过 AWS 代表或 Amazon 管理控制台确认给定区域的可用连接选项。
安全
当决定通过任何公共 IaaS 云提供商部署应用程序时,都需要谨慎。 应遵循您组织的标准安全策略或专门针对云制定的新策略,以保持您组织的安全合规性。 当组织的数据存储在其国家/地区之外,并受数据所在国家/地区的法律约束时,相关的数据主权也是您必须了解的。 现在,云部署增加了数据在客户数据中心和物理安全控制之外的风险。 强烈建议对静态数据(数据库和日志)和动态数据(网络通信)使用 InterSystems 数据库和日志加密,分别使用 AES 和 SSL/TLS 加密。
与所有加密密钥管理一样,您需要按照您组织的策略记录并遵循正确的程序,以确保数据安全,防止不必要的数据访问或安全漏洞。
Amazon 提供了大量文档和示例,为基于 Caché 的应用程序提供高度安全的运行环境。 请务必查看here 关于 Identity Access Management (IAM) 的各种讨论主题。
架构图示例
下图说明了典型的 Caché 安装,其以数据库镜像(同步故障转移和 DR 异步)、使用 ECP 的应用程序服务器,以及多个负载均衡 Web 服务器的方式提供高可用性。
TrakCare 示例
下图说明了典型的 TrakCare 部署,其中包含多个负载均衡 Web 服务器,两个作为 ECP 客户端的 EPS 打印服务器,以及数据库镜像配置。 虚拟 IP 地址仅用于与 ECP 或 CSP 网关不关联的连接。 ECP 客户端和 CSP 网关可感知镜像,不需要 VIP。
如果您正在使用 Direct Connect,则可为灾难恢复方案启用包括多线路和多区域访问在内的多个选项。 与电信提供商合作以了解他们支持的高可用性和灾难恢复方案至关重要。
下面的示例参考架构图包括活动或主要区域中的高可用性,以及在主要 AWS 区域不可用时到其他 AWS 区域的灾难恢复。 而且在此示例中,数据库镜像包含 TrakCare DB、TrakCare Analytics 和 Integration 命名空间,全部在单个镜像集内。
图 12:TrakCare AWS 参考架构图 – 物理架构
此外,下图显示了更有逻辑的架构图,其中包含所安装的相关高级软件产品及功能用途。
图 13:TrakCare AWS 参考架构图 – 逻辑架构
HealthShare 示例
下图显示了一个典型的 HealthShare 部署,其中含有多个负载均衡 Web 服务器,以及多个 HealthShare 产品,包括 Information Exchange、Patient Index、Personal Community、Health Insight 和 Health Connect。 这些产品中的每一个都包含一个数据库镜像对,以在多个可用区内提供高可用性。 虚拟 IP 地址仅用于与 ECP 或 CSP 网关不关联的连接。 用于 HealthShare 产品之间的 Web 服务通信的 CSP 网关可感知镜像,不需要 VIP。
下面的示例参考架构图包括活动或主要区域中的高可用性,以及在主要区域不可用时到其他 AWS 区域的灾难恢复。
图 14:HealthShare AWS 参考架构图 – 物理架构
此外,下图显示了更有逻辑的架构图,其中包含所安装的相关高级软件产品、连接要求和方法,以及相应的功能用途。
Figure-15: HealthShare AWS 参考架构图 – 逻辑架构
公告
Claire Zheng · 十月 23, 2021
亲爱的开发者们,
是否准备参加InterSystems 2021全球峰会呢?不要错过InterSystems Developer Community、Open Exchange和Global Masters的专题会议!
⚡️ "Win. Win. Win with InterSystems Developer Ecosystem" VSummit21 session ⚡️
🎁 注意:所有参会者都将获得额外奖励哦~
分享嘉宾:🗣 @Anastasia.Dyubaylo, InterSystems开发者社区经理 🗣 @Lena.Evsikova, Product Owner of InterSystems Open Exchange🗣 @Olga.Zavrazhnova2637, Customer Advocacy Manager, InterSystems
了解如何更好地使用 InterSystems 开发者社区、Global Masters (游戏化中心)和Open Exchange(应用程序库)。
兴趣: 开发经验,InterSystems IRIS,用户社区
论坛从10月27日起即可观看!(中国用户需注册观看)
来吧!
加入我们的会议,享受InterSystems技术和我们为开发者提供的生态系统的完整体验!
文章
Michael Lei · 八月 9, 2022
在这篇文章中,你可以访问InterSystems开发者社区中与学习InterSystems IRIS最相关主题的文章库。找到按机器学习、嵌入式Python、JSON、API和REST应用、管理和配置InterSystems环境、Docker和云、VSCode、SQL、分析/BI、全局、安全、DevOps、互操作性、Native API排列的顶级发表的文章。快来享受学习的乐趣吧!
机器学习
机器学习是建立先进的数据分析和自动化人工活动的一种必要的技术,具有很好的效率。它可以创建认知模型,从现有的数据中学习,并根据其自我调整的算法进行预测、概率计算、分类、识别和 "非创造性 "的人类活动的自动化。
在所有情况下,InterSystems IRIS作为一个数据平台和环境来创建、执行、提供和使用这些机器学习模型。IRIS能够从SQL命令(IntegratedML)中使用ML,使用嵌入式Python和PMML(预测模型标记语言)来执行ML。你可以在以下文章中查看它的功能:
标题
描述
地址URL
一体化机器学习动手实验
一体化机器学习概览ML
https://cn.community.intersystems.com/node/517656
AI Robotization with InterSystems IRIS Data Platform(英文)
AI on IRIS productions
https://community.intersystems.com/post/ai-robotization-intersystems-iris-data-platform
利用IRIS 一体化机器学习IntegratedML来预测糖尿病的Web 应用
一体化机器学习示例
https://cn.community.intersystems.com/node/519381
Predict Maternal Health Risks(英文)
一体化机器学习示例
https://community.intersystems.com/post/predict-maternal-health-risks
Using Machine Learning to Organize the Community – 1(英文)
Using Python ML libraries
https://community.intersystems.com/post/using-machine-learning-organize-community-1
ObjectScript 语言
ObjectScript是InterSystems的官方编程语言。它简单、灵活,在创建后台、集成和分析应用程序方面非常强大。请查阅以下文章以了解更多信息:
标题
描述
地址URL
InterSystems ObjectScript 101++ (英文)
Video series to learn ObjectScript
https://community.intersystems.com/post/intersystems-objectscript-101-en
On $Sequence function(英文)
Create sequences of numbers
https://community.intersystems.com/post/sequence-function
Writing better-performing loops in Caché ObjectScript(英文)
Do loops
https://community.intersystems.com/post/writing-better-performing-loops-cach%C3%A9-objectscript
数据匿名化 IRIS-Disguise 工具介绍
学习如何定制化 ObjectScript 持久化类和属性
https://cn.community.intersystems.com/node/509271
ObjectScript 错误处理片段
异常处理
https://cn.community.intersystems.com/node/523756
Traditional Debugging in ObjectScript(英文)
Debug技巧
https://community.intersystems.com/post/traditional-debugging-objectscript
在Caché中使用正则表达式
使用正则表达式
https://cn.community.intersystems.com/node/487941
Robust Error Handling and Cleanup in ObjectScript(英文)
高质量代码
https://community.intersystems.com/post/robust-error-handling-and-cleanup-objectscript
SPOOL - the forgotten device(英文)
使用 Spool
https://community.intersystems.com/post/spool-forgotten-device
How we learned to stop worrying and love InterSystems Ensemble(英文)
Processing JSON on Productions
https://community.intersystems.com/post/how-we-learned-stop-worrying-and-love-intersystems-ensemble
一个更有用的 Object Dump
对象Dumping
https://cn.community.intersystems.com/node/523761
Logging using macros in InterSystems IRIS(英文)
Logging using macros
https://community.intersystems.com/post/logging-using-macros-intersystems-iris
SYSLOG - what it really is and what it means(英文)
Debug information on Syslog
https://community.intersystems.com/post/syslog-what-it-really-and-what-it-means
Tips for debugging with %Status(英文)
Debug using %Status
https://community.intersystems.com/post/tips-debugging-status
发挥 $Query 的最大作用
使用 $Query 查找数据
https://cn.community.intersystems.com/node/519806
Multidimensional Property Persistence - Part 1 (Classic) (英文)
Multidimensional persistent properties
https://community.intersystems.com/post/multidimensional-property-persistence-part-1-classic
The adopted Bitmap(英文)
Bitmap indexes
https://community.intersystems.com/post/adopted-bitmap
如何成为时间领主 - 诞生
日期和时间API
https://cn.community.intersystems.com/node/513356
Importance and Collection of Exact Version Information ($zv / $zversion)(英文)
Get IRIS version
https://community.intersystems.com/post/importance-and-collection-exact-version-information-zv-zversion
Date before Dec.1840 ? Negative $H(orolog) ?(英文)
日期为负
https://community.intersystems.com/post/date-dec1840-negative-horolog
Creating a Custom Index Type in Caché (英文)
创建定制索引
https://community.intersystems.com/post/creating-custom-index-type-cach%C3%A9
$LIST string format and %DynamicArray and %DynamicObject classes(英文)
Using $LIST, Dynamic Object, and Dynamic Arrays
https://community.intersystems.com/post/list-string-format-and-dynamicarray-and-dynamicobject-classes
SQL for ^ERROR Global(英文)
Use SQL to see Error content
https://community.intersystems.com/post/sql-error-global
Add a default setting value by code (英文)
设置默认值
https://community.intersystems.com/post/add-default-setting-value-code
Iterate over dynamic object(英文)
Use Iterate
https://community.intersystems.com/post/iterate-over-dynamic-object
列出类的所有属性 (我喜欢 ObjectScript 的原因)
ObjectScript 属性详解
https://cn.community.intersystems.com/node/512981
Try catch block I usually use in InterSystems ObjectScript(英文)
Try Catch 处理
https://community.intersystems.com/post/try-catch-block-i-usually-use-intersystems-objectscript
在ObjectScript中运行shell命令
Run shell commands
https://cn.community.intersystems.com/node/523766
嵌入式 Python
Python是世界上最流行和最常用的编程语言之一(https://www.tiobe.com/tiobe-index/)。InterSystems IRIS是一个对所有主要编程语言开放的数据平台。然而,说到Python,这种神奇的语言和它的库在IRIS中到处都可以使用:在类、SQL和集成/制作中。对于那些不知道或不想知道ObjectScript(InterSystems编程语言)的人来说,这是一个不错的选择。请看下面的文章,了解如何做到这一点:
标题
描述
URL地址
Let's fight against the machines(英文)
Build a tic tac toe game using Embedded Python
https://community.intersystems.com/post/lets-fight-against-machines
InterSystems IRIS 2021.2+ Python 代码样例 (Embedded嵌入式Python, Native 原生APIs 和 Notebooks)
使用 Python notebook 和 IRIS
https://cn.community.intersystems.com/node/508691
WebSocket Client with embedded Python(英文)
Custom Socket sample
https://community.intersystems.com/post/websocket-client-embedded-python
IRIS Python Native API in AWS Lambda (英文)
Python on AWS
https://community.intersystems.com/post/iris-python-native-api-aws-lambda
How I added ObjectScript to Jupyter Notebooks(英文)
IRIS on notebooks
https://community.intersystems.com/post/how-i-added-objectscript-jupyter-notebooks
Welcome Django(英文)
Create Python Django apps with IRIS as a database
https://community.intersystems.com/post/welcome-django
Geocoding with IRIS and Google Maps API (英文)
Using Geocoding python library
https://community.intersystems.com/post/geocoding-iris-and-google-maps-api
使用IRIS 和Python gTTS 实现文本转化声音的REST服务
使用 gTTS 的Python 案例
https://cn.community.intersystems.com/node/517551
使用 Python Flask Web 框架构建 IRIS 响应式仪表板
基于IRIS 的Flask web 应用
https://cn.community.intersystems.com/node/513086
JSON
JSON 是市场上最广泛使用的发送和接收数据的互操作性格式之一。InterSystems IRIS以多种方式支持这种格式。可以让你的本地数据库使用JSON(DocDB),序列化和反序列化对象,用JSON处理请求和响应,特别是来自REST服务的请求和响应。回顾以下文章:
标题
描述
URL地址
Introducing new JSON capabilities in Caché 2016.1 (英文)
Presenting ObjectScript JSON API
https://community.intersystems.com/post/introducing-new-json-capabilities-cach%C3%A9-20161
JSON Enhancements(英文)
JSON Adaptor API
https://community.intersystems.com/post/json-enhancements
API 和 REST 应用Applications
后台应用程序目前是以REST(Representational State Transfer)范式开发的,并以Web API的形式暴露。下面的文章将帮助你了解它是如何工作的:
标题
描述
URL地址
GraphQL for InterSystems Data Platforms (英文)
Create REST API with GraphQL style
https://community.intersystems.com/post/graphql-intersystems-data-platforms
Introducing InterSystems API Manager (英文)
API Management overview
https://community.intersystems.com/post/introducing-intersystems-api-manager
Advanced URL mapping for REST
Mapping routes to your APIs
https://community.intersystems.com/post/advanced-url-mapping-rest
AppS.REST - a new REST framework for InterSystems IRIS
Create REST apps easily
https://community.intersystems.com/post/appsrest-new-rest-framework-intersystems-iris
RESTForms - REST API for your classes
Create REST API for CRUD applications
https://community.intersystems.com/post/restforms-rest-api-your-classes
使用规范优先的方式开发REST API
以合同优先的方式开发API
https://cn.community.intersystems.com/node/484341
ObjectScript REST API Cookbook(英文)
REST API development tips
https://community.intersystems.com/post/objectscript-rest-api-cookbook
从持久类和序列类生成 Swagger 规范
Contract First Approach to develop APIs
https://cn.community.intersystems.com/node/484311
InterSystems IRIS REST Application Patterns
Create API REST using IRIS
https://community.intersystems.com/post/intersystems-iris-rest-application-patterns
Let's create an FHIR profile using SUSHI Part 1(英文)
Create custom FHIR profiles
https://community.intersystems.com/post/lets-create-fhir-profile-using-sushi-part-1
IAM (InterSystems API Manager), Zero to Hero(英文)
Manage your APIs with IAM
https://community.intersystems.com/post/iam-intersystems-api-manager-zero-hero
Using InterSystems API Management to Load Balance an API (英文)
Use APIM to do API load balance
https://community.intersystems.com/post/using-intersystems-api-management-load-balance-api
IAM实践指南——OAuth 2.0下的API保卫战(第一部分)
Secure your API using APIM
https://cn.community.intersystems.com/node/487141
Getting an Angular UI for your InterSystems IRIS application in 5 minutes (英文)
Full Stack app with IRIS and Angular
https://community.intersystems.com/post/getting-angular-ui-your-intersystems-iris-application-5-minutes
Upload into an InterSystems IRIS REST API (英文)
Save files using REST API
https://community.intersystems.com/post/upload-intersystems-iris-rest-api
管理和配置InterSystems环境
IRIS环境的良好管理和配置对用户使用的应用程序的性能、安全性、可用性和可靠性至关重要。这些文章可以给你很好的提示,告诉你如何做到这一点:
标题
描述
URL地址
InterSystems 数据平台的容量规划和性能系列文章
容量和性能规划提升
https://cn.community.intersystems.com/node/483921
Deploying Applications in InterSystems Cache with %Installer(英文)
Using %Installer to create namespaces, databases, and applications configuration
https://community.intersystems.com/post/deploying-applications-intersystems-cache-installer
Horizontal Scalability with InterSystems IRIS(英文)
Set IRIS instances for horizontal scalability
https://community.intersystems.com/post/horizontal-scalability-intersystems-iris
The InterSystems Iris Fhirserver running on a Raspberry Pi Raspberry running as a FHIRserver(英文)
Run IRIS inside Raspberry PI
https://community.intersystems.com/post/intersystems-iris-fhirserver-running-raspberry-pi-raspberry-running-fhirserver
Database Mirroring without a Virtual IP Address(英文)
Set mirrors using VIP
https://community.intersystems.com/post/database-mirroring-without-virtual-ip-address
Apache Web Gateway with Docker(英文)
Configure SSL and Web Gateway for web applications
https://community.intersystems.com/post/apache-web-gateway-docker
Work with SAML in IRIS(英文)
SAML to Web services
https://community.intersystems.com/post/work-saml-iris
掌握 %SYSTEM.Encryption 加密类
Encrypt and decrypt using IRIS
https://cn.community.intersystems.com/node/518191
Docker 和 Cloud
新的应用架构在容器Docker和云中工作,旨在实现弹性扩展,快速安装、配置和提供服务,并降低基础设施的复杂性和成本。学习这些文章,了解如何将IRIS带入云中:
题目
描述
URL地址
Highly available IRIS deployment on Kubernetes without mirroring(英文)
IRIS on cloud clusters with Kubernetes
https://community.intersystems.com/post/highly-available-iris-deployment-kubernetes-without-mirroring
面向 Amazon Web Services (AWS) 的 InterSystems IRIS 示例参考架构
基于AWS的IRIS
https://cn.community.intersystems.com/node/484351
面向 Microsoft Azure Resource Manager (ARM) 的 InterSystems 示例参考架构
基于Azure 资源管理器(ARM)架构的IRIS
https://cn.community.intersystems.com/node/484361
Dockerfile 和它的朋友们或者如何在 InterSystems IRIS 上运行和合作 ObjectScript 项目
Docker项目里的重要文件管理
https://cn.community.intersystems.com/node/484326
InterSystems IRIS Deployment Guide for AWS using CloudFormation template(英文)
IRIS on AWS using CloudFormation
https://community.intersystems.com/post/intersystems-iris-deployment%C2%A0guide-aws%C2%A0using-cloudformation-template
面向 Google Cloud Platform (GCP) 的 InterSystems IRIS 示例参考架构
IRIS on Google Cloud
https://cn.community.intersystems.com/node/484056
Using AWS Glue with InterSystems IRIS(英文)
Using IRIS and AWS Glue (AWS ETL tool)
https://community.intersystems.com/post/using-aws-glue-intersystems-iris
Amazon EKS, IRIS 高可用与备份
基于AWS的IRIS高可用
https://cn.community.intersystems.com/node/517536
Running InterSystems Reports in containers(英文)
IRIS reports on Docker
https://community.intersystems.com/post/running-intersystems-reports-containers
Running InterSystems IRIS in a FaaS mode with Kubeless(英文)
IRIS on Kubernetes
https://community.intersystems.com/post/running-intersystems-iris-faas-mode-kubeless
InterSystems Kubernetes Operator Deep Dive: Introduction to Kubernetes Operators(英文)
IRIS on Kubernetes
https://community.intersystems.com/post/intersystems-kubernetes-operator-deep-dive-introduction-kubernetes-operators
Scaling Cloud Hosts and Reconfiguring InterSystems IRIS(英文)
Scaling IRIS on AWS, Azure, or GCP
https://community.intersystems.com/post/scaling-cloud-hosts-and-reconfiguring-intersystems-iris
Deploying a Simple IRIS-Based Web Application Using Amazon EKS(英文)
IRIS on AWS
https://community.intersystems.com/post/deploying-simple-iris-based-web-application-using-amazon-eks
VSCode
VSCode是世界上最常用的开发IDE之一。IRIS完全支持这个IDE。请看以下文章:
标题
描述
URL地址
GitHub上的VSCode-ObjectScript
在网页版 Github VSCode上开发IRIS 应用
https://community.intersystems.com/post/vscode-objectscript-github
GitHub Codespaces with IRIS(英文)
Develop IRIS apps into Web Github
https://community.intersystems.com/post/github-codespaces-iris
VSCode Tips & Tricks - SOAP Wizard(英文)
Create shortcut option on VSCode
https://community.intersystems.com/post/vscode-tips-tricks-soap-wizard
Adding your own snippets to VS Code(英文)
Create snippets
https://community.intersystems.com/post/adding-your-own-snippets-vs-code
SQL
SQL是处理关系型数据库的最常用语言之一。这些文章展示了如何进行查询和数据持久性:
标题
描述
URL地址
Free Text Search: The Way To Search Your Text Fields That SQL Developers Are Hiding From You!*(英文)
Using Indexes to promote advanced search
https://community.intersystems.com/post/free-text-search-way-search-your-text-fields-sql-developers-are-hiding-you
改善日期范围查询的SQL性能
使用日期进行SQL查询
https://cn.community.intersystems.com/node/523636
Static WHERE Conditions(英文)
Where on Persistent Classes
https://community.intersystems.com/post/static-where-conditions
2021.2 SQL Feature Spotlight - Run Time Plan Choice(英文)
Select Runtime SQL Execution Plan
https://community.intersystems.com/post/20212-sql-feature-spotlight-run-time-plan-choice
New in 2020.1: the Universal Query Cache(英文)
SQL Cache
https://community.intersystems.com/post/new-20201-universal-query-cache
Materialized Views(英文)
Create views inside persistent classes
https://community.intersystems.com/post/materialized-views
SQL Debug 小技巧
Debug SQL commands
https://cn.community.intersystems.com/node/518701
Using ClassQueries() as Tables(英文)
Creating views
https://community.intersystems.com/post/using-classqueries-tables
M:N Relationship(英文)
Mapping N to N relationships
https://community.intersystems.com/post/mn-relationship
Reading AWS S3 data on COVID as SQL table in IRIS (英文)
Get CSV data from AWS S3 to IRIS table
https://community.intersystems.com/post/reading-aws-s3-data-covid-sql-table-iris
The One Query Performance Trick You NEED to Know? Tune Table! (英文)
SQL tunning
https://community.intersystems.com/post/one-query-performance-trick-you-need-know-tune-table
Data Storage - Information You Must Know to Make Good Decisions When Developing (英文)
Configure the data storage section on a persistent class to get more performance
https://community.intersystems.com/post/data-storage-information-you-must-know-make-good-decisions-when-developing
Improve SQL Performance for Date Queries, AGAIN! (英文)
Tunning SQL queries for dates
https://community.intersystems.com/post/improve-sql-performance-date-queries-again
Scrollable ResultSet Pagination Sample(英文)
Paginate SQL results (see comments too)
https://community.intersystems.com/post/scrollable-resultset-pagination-sample
第 1 天:使用 InterSystems Object 和 SQL 进行开发
Concepts about SQL into InterSystems IRIS
https://cn.community.intersystems.com/node/490806
DB Migration using SQLgateway(英文)
Migrate from PostgreSQL, MySQL, and other databases to IRIS
https://community.intersystems.com/post/db-migration-using-sqlgateway
Importing CSV into the Existing Table in InterSystems IRIS(英文)
Import CSV to SQL Table
https://community.intersystems.com/post/importing-csv-existing-table-intersystems-iris
访问IRIS数据平台的四种API方式
SQL API
https://cn.community.intersystems.com/node/493276
Indexing of non-atomic attributes(英文)
Create advanced index options
https://community.intersystems.com/post/indexing-non-atomic-attributes
Know Your Indices(英文)
Index creation fundamentals
https://community.intersystems.com/post/know-your-indices
Dynamic SQL to Dynamic Object(英文)
Use DynamicSQL
https://community.intersystems.com/post/dynamic-sql-dynamic-object
数据迁移工具 - 第一部分: 从 Postgres 到 IRIS
如何从其他数据库迁移到 IRIS 的系列文章
https://cn.community.intersystems.com/node/510831
BI与分析
BI和分析可以根据图形、仪表盘、摘要和详细表格中的数据分析,并根据分析员用户的导航和数据探索来做出决策。以下是如何使用IRIS建立分析应用的方法:
标题
描述
URL地址
InterSystems IRIS 上的 COVID-19 分析
分析全球疫情的仪表盘
https://community.intersystems.com/post/covid-19-analytics-intersystems-iris
DeepSee Troubleshooting Guide(英文)
Fix problems
https://community.intersystems.com/post/deepsee-troubleshooting-guide
AnalyzeThis – Quick start into InterSystems BI (英文)
Quick start into IRIS BI
https://community.intersystems.com/post/analyzethis-%E2%80%93-quick-start-intersystems-bi
Power BI Connector for InterSystems IRIS. Part I(英文)
Using IRIS data inside Power BI
https://community.intersystems.com/post/power-bi-connector-intersystems-iris-part-i
Creating Portlets in DeepSee(英文)
Analytics Portlets with IRIS BI
https://community.intersystems.com/post/creating-portlets-deepsee
Game Of Throne Analytics or How long is Arya's Stark List(英文)
Analytics sample
https://community.intersystems.com/post/game-throne-analytics-or-how-long-aryas-stark-list
DeepSee Web: InterSystems Analytics Visualization with AngularJS. Part 1(英文)
Web dashboards using Angular
https://community.intersystems.com/post/deepsee-web-intersystems-analytics-visualization-angularjs-part-1
Building Analytics Solution with IRIS(英文)
Present main options to do analytics with IRIS
https://community.intersystems.com/post/building-analytics-solution-iris
Globals
Globals 是IRIS中灵活存储和检索数据的关键机制,无论是SQL、类、JSON文档、BI立方体,还是其他自定义格式。在下面的文章中可以看到如何做到这一点:
题目
描述
URL地址
The Art of Mapping Globals to Classes 1 of 3(英文)
Mapping globals to SQL tables and Objects
https://community.intersystems.com/post/art-mapping-globals-classes-1-3
Globals 是管理数据的魔剑 : 第一部分
Globals 基础
https://cn.community.intersystems.com/node/520821
GlobalToJSON-embeddedPython-pure(英文)
Export globals to JSON
https://community.intersystems.com/post/globaltojson-embeddedpython-pure
Transactions in Global InterSystems IRIS(英文)
Manage transactions on Globals persistence
https://community.intersystems.com/post/transactions-global-intersystems-iris
Store Mindmaps using Globals(英文)
Using globals to persist mindmap data
https://community.intersystems.com/post/store-mindmaps-using-globals
安全
确保任何应用程序的安全是至关重要的。安全性与访问和授权管理有关,跟踪和审计交易,对存储和传输的内容进行加密,以及设置正确的配置参数以确保合理资源的保护。阅读这些文章,了解更多关于如何建立安全的信息:
标题
Description
URL
InterSystems IRIS 开放授权框架 (OAuth 2.0) 实现 – 第 1 部分
使用 OAuth
https://cn.community.intersystems.com/node/484366
Debugging Web(英文)
Debugging CSP and REST apps
https://community.intersystems.com/post/debugging-web
Class Queries in InterSystems IRIS(英文)
Defining SQL Queries inside Persistent classes
https://community.intersystems.com/post/class-queries-intersystems-iris
在TLS/SSL中使用操作系统的证书库
利用 OS 证书实现 SSL
https://cn.community.intersystems.com/node/518186
一致性检查_ 加速还是减速
保证一致性
https://cn.community.intersystems.com/node/485041
跟踪数据更改 - 审计日志 - 上篇
保存审计数据
https://cn.community.intersystems.com/node/486831
Running the Management Portal (Private Web Server) Over TLS/SSL/HTTPS(英文)
Configure SSL to IRIS Web Server
https://community.intersystems.com/post/running-management-portal-private-web-server-over-tlssslhttps
OAuth Authorization and InterSystems IRIS: Taming Trust Protocols(英文)
Using OAuth
https://community.intersystems.com/post/oauth-authorization-and-intersystems-iris-taming-trust-protocols
Using Oauth2 with SOAP (Web)Services(英文)
Oauth setting for SOAP services
https://community.intersystems.com/post/using-oauth2-soap-webservices
DeepSee: Setting up security - Part 1 of 5(英文)
Security on IRIS BI
https://community.intersystems.com/post/deepsee-setting-security-part-1-5
Changes to the security level of the system(英文)
Security by default
https://community.intersystems.com/post/changes-security-level-system
DevOps
DevOps是一种采用实践和工具的方式,使源代码从开发(Dev)到生产运行(Ops)的快速和高质量的过渡成为可能。请看如何在IRIS中做到这一点。
题目
描述
URL地址
Continuous Delivery of your InterSystems solution using GitLab - Part I: Git(英文)
Continuous delivery with GitLab
https://community.intersystems.com/post/continuous-delivery-your-intersystems-solution-using-gitlab-part-i-git
Introducing InterSystems ObjectScript Package Manager(英文)
Use ZPM to configure and install third-party packages inside your application
https://community.intersystems.com/post/introducing-intersystems-objectscript-package-manager
ZPMshow - a helper for tired fingers(英文)
How to use ZPM – IRIS Package Manager
https://community.intersystems.com/post/zpmshow-helper-tired-fingers
如何以自动化方式/编程方式创建一个镜像环境
自动化创建镜像
https://cn.community.intersystems.com/node/512986
ObjectScript包管理器中的单元测试和测试覆盖率
为ObjectScript 代码质量创建单元测试
https://cn.community.intersystems.com/node/486826
使用Doker和配置文件模版来部署Sharded 集群
使用 CPF文件自动化配置
https://cn.community.intersystems.com/node/518356
Caché ObjectScript 快速参考
ObjectScript reference pdf document
https://cn.community.intersystems.com/node/523791
The Anatomy of ZPM Module: Packaging Your InterSystems Solution(英文)
Use ZPM to automate deployment
https://community.intersystems.com/post/anatomy-zpm-module-packaging-your-intersystems-solution
在IRIS容器里添加VSCode
在容器中嵌入 VSCode
https://cn.community.intersystems.com/node/516431
如何以编程/自动化方式为InterSystems IRIS创建新的数据库、命名空间和Web应用程序
自动化创建数据库和命名空间
https://cn.community.intersystems.com/node/523796
Unit Tests: Quality of your ObjectScript Code(英文)
Quality Assurance with Unit Tests
https://community.intersystems.com/post/unit-tests-quality-your-objectscript-code
一些有用的 InterSystems 开发者社区 Docker Images镜像
Docker社区镜像
https://cn.community.intersystems.com/node/515076
互操作性
IRIS有一个强大的数据和应用互操作性总线。通过以下文章了解如何使用它.
题目
描述
URL
Sending Alerts from Ensemble via Telegram(英文)
Production to send data to telegram
https://community.intersystems.com/post/sending-alerts-ensemble-telegram
[首次使用InterSystems IRIS]-让我们来使用互操作性!
创建BS, BO, BP和productions
https://cn.community.intersystems.com/node/513971
使用嵌入式Python实现InterSystems IRIS 互操作性
使用Python创建BS, BO, BP和production
https://cn.community.intersystems.com/node/512176
Ensemble / Interoperability Training Course(英文)
Great sample to learn how to create productions
https://community.intersystems.com/post/ensemble-interoperability-training-course
几个程序化实现互操作性的示例
使用 Python 或 ObjectScript 程序化Productions
https://cn.community.intersystems.com/node/516221
Listing files in folder(英文)
List files in a folder
https://community.intersystems.com/post/listing-files-folder
Containerising .Net/Java Gateways (or Kafka Integration Demo)(英文)
Kafka support using Java or .Net Native API
https://community.intersystems.com/post/containerising-netjava-gateways-or-kafka-integration-demo
Implementing IRIS Integrations with .NET or Java using PEX(英文)
Using PEX to create productions using Java or .Net
https://community.intersystems.com/post/implementing-iris-integrations-net-or-java-using-pex
Migrate from Java Business Host to PEX(英文)
Using PEX
https://community.intersystems.com/post/migrate-java-business-host-pex
Using Tesseract OCR and Java Gateway(英文)
Using Java PEX
https://community.intersystems.com/post/using-tesseract-ocr-and-java-gateway
Creating a PEX Business Operation(英文)
Create Java PEX Business Operation
https://community.intersystems.com/post/creating-pex-business-operation
在IRIS中联合运用OCR与NLP技术
Java PEX 样例
https://cn.community.intersystems.com/node/494206
Creating a custom interoperability business service using an HTTP Adapter(英文)
Creating Business Services
https://community.intersystems.com/post/creating-custom-interoperability-business-service-using-http-adapter
原生 API
IRIS对市场上最常用的一些编程语言(Java、Javascript/NodeJS、.Net、C++和Python)的工作持开放态度。为了做到这一点,我们为这些语言中的每一种使用了本地API。请看这些文章:
题目
描述
URL地址
WebSocket Client JS with IRIS Native API as Docker Micro Server(英文)
Using IRIS and NodeJS to do a WebSocket
https://community.intersystems.com/post/websocket-client-js-iris-native-api-docker-micro-server
IRIS Native API for ObjectScript(英文)
Using Native APIs
https://community.intersystems.com/post/iris-native-api-objectscript
Using ZPM for Node.js(英文)
Using ZPM on Node.js projects
https://community.intersystems.com/post/using-zpm-nodejs
Creating a PDF from a Text file(英文)
Java Native API for generating PDF
https://community.intersystems.com/post/creating-pdf-text-file
How to Start Development with InterSystems IRIS in Less Than a Minute(英文)
Start to develop using IRIS
https://community.intersystems.com/post/how-start-development-intersystems-iris-less-minute
Making a blog using Python + IRIS Globals(英文)
A blog on using Python native API
https://community.intersystems.com/post/making-blog-using-python-iris-globals
希望我们翻译哪片文章,欢迎给我们留言!
文章
Michael Lei · 六月 7, 2022
我今天遇到了一个有趣的ObjectScript用例,有一个通用的解决方案,我想与大家分享。
用例:
我有一个JSON数组(在本例中具体而言是一个来自Jira的问题数组),我想在几个字段上进行聚合--例如,类别、优先级和问题类型。然后,我想把聚合的数据编平化到一个简单的列表中,其中包含每个组的总数。当然,对于聚合来说,使用一个本地数组的形式是有意义的,即:
agg(category, priority, type) = total
这样,对于输入数组中的每一条记录,我可以只用:
Do $increment(agg(category, priority, type))
但是一旦我做了聚合,我想把它变成一种更容易迭代的形式,比如一个整数下标的数组:
summary = n
summary(1) = $listbuild(total1, category1, priority1, type1)
...
summary(n) = $listbuild(totalN, categoryN, priorityN, typeN)
基础解决方案:
简单的方法是,用$Order嵌套三个For循环--比如说:
Set category = ""
For {
Set category = $Order(agg(category))
Quit:category=""
Set priority = ""
For {
Set priority = $Order(agg(category,priority))
Quit:priority=""
Set type = ""
For {
Set type = $Order(agg(category,priority,type),1,total)
Quit:type=""
Set summary($i(summary)) = $listbuild(total,category,priority,type)
}
}
}
这就是我开始使用的方法,但它有很多代码,而且如果我有更多的维度来聚合,它很快就会变得不方便了。这让我想知道--是否有一个通用的解决方案来完成同样的事情?事实证明是有的!
使用 $Query的优化方案:
我决定使用$query会有帮助。请注意,这个解决方案假定整个本地数组中子标/值的深度是一致的;如果没有了这个假设,就会导致奇怪的结果.
ClassMethod Flatten(ByRef deep, Output flat) [ PublicList = deep ]
{
Set reference = "deep"
For {
Set reference = $query(@reference)
Quit:reference=""
Set value = $listbuild(@reference)
For i=1:1:$qlength(reference) {
Set value = value_$listbuild($qsubscript(reference,i))
}
Set flat($i(flat)) = value
}
}
所以以上片段被替换为:
Do ..Flatten(.agg,.summary)
几点需要注意的:
deep 需要在PublicList中,以便$query能够对其进行操作
在每个迭代中,reference 被改变为引用deep中下一组有价值的子标号--例如,值可能是:deep("foo", "bar")
$qlength 返回reference中子标的数量
$qsubscript 返回reference中第i个下标的值
当$listbuild列表被串联起来时,一个有效的$listbuild列表与合并后的列表就得出结果(这比使用任何其他分隔符都要好!)
总结
$query, $qlength, 和 $qsubscript 在处理任意深度的Global/Local数组时非常方便。
进阶阅读
$Query: https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI.Page.cls?KEY=RCOS_FQUERY$QSubscript: https://docs.intersystems.com/irisforhealthlatest/csp/docbook/Doc.View.cls?KEY=RCOS_fqsubscript$QLength: https://docs.intersystems.com/irisforhealthlatest/csp/docbook/Doc.View.cls?KEY=RCOS_fqlength
公告
Tingting Jiang · 六月 21, 2022
InterSystems正在招聘Technical Specialist(Product Support),欢迎您的自荐、推荐。
请将简历投递至Belinda.Glasson@intersystems.com,愿您的加入给我们带来新的活力,我们也将为您提供广阔的发展空间!(由于岗位职能要求,职位说明以英文形式发布。)
Location:Beijing
Job Title:Technical Specialist
Department:Product Support
Reporting to:China Support Supervisor
What We Do Matters
Why are we here? To ensure that our customers have reliable access to the right information at the right time—information they can share and use to draw insights, leading to better decisions.
Job Summary
The Technical Specialist will be required to perform custom development tasks and provide support for InterSystems TrakCare and related products.
The Technical Specialist will be responsible for site specific software support and development activities and to ensure that the software satisfies project specifications and is delivered and deployed in line with project requirements.
The Technical Specialist must be available to visit client sites (e.g. hospitals/laboratories) and implementation partners for technical support and/or to provide technical training. Some travel may be required.
Key Responsibilities of the Role
Provide immediate response to customer inquiries in accordance with service standards.
Provide technical support for interfaces, reports, extracts, data migration scripts and conversions.
Provide advice and best practices for technical areas such as networks, configurations, architectures etc.
Provide technical support for troubleshooting and performance analysis for reports, stored procedures, interfaces, conversions, data migration scripts and user defined functions.
Escalate Open (unresolved) problems in accordance with current policies and procedures.
Production of training materials for technical courses such as system custom development or reporting.
Production of technical documentation such as reference materials, installation instructions, user guides, knowledge-base articles.
Continuously improve customer satisfaction by soliciting customer suggestions for product and service improvements and then escalating such suggestions to management.
Improve response time to customer inquiries by continuously improving communication, analytical, and learning skills.
Participate in on-site technical training if required.
Participate in on-site technical implementations if required.
Participate in the on call 24 hour roster service.
Assistance in researching new development or report writing 3rd party products such as JReports.
Experience and Qualifications
BS or MS in Computer Science or equivalent.
Knowledge of web oriented languages, including HTML, and Java script, SQL, data analysis and database methodologies.
Knowledge of Linux is strongly desired, VMWare is a plus.
Knowledge of programming languages – ideally Java or C++.
Personal Specifications
Information Technology or Science Degree