#文档

0 关注者 · 33 帖子

此标签会涉及到与 InterSystems 数据平台文档有关的任何讨论。

InterSystems 文档

InterSystems 官方 Claire Zheng · 十月 23, 2025

InterSystems IRIS® 数据平台、InterSystems IRIS® for HealthTM 和HealthShare® Health Connect 2025.1.2 2024.1.5 维护版本现已全面上市 (GA)。这些版本包括对最近发布的一些警报和建议的修复,其中包括以下内容:

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

文档

您可以在这些页面上找到详细的变更列表和升级检查列表:

EAP计划

现在有许多 EAP 可用。请查看此页面并注册您感兴趣的项目。

如何获取软件?

0
0 21
InterSystems 官方 Claire Zheng · 六月 22, 2025

适用于 InterSystems IRIS® 数据平台InterSystems IRIS® for HealthTMHealthShare® Health Connect 的维护版本 2024.1.42023.1.6 现已正式发布 (GA)。 这些版本包含对最近发布的以下提醒的修复 - 提醒:SQL 查询返回错误结果 | InterSystems。 请通过开发者社区分享您的反馈,以便我们可以共同打造更出色的产品。

文档

您可以在以下页面上找到详细的变更列表和升级核对清单:

抢先体验计划 (EAP)

目前提供多个 EAP。 请查看此页面并注册您感兴趣的 EAP。

如何获取软件?

InterSystems IRIS 和 InterSystems IRIS for Health 的完整安装包可以从本 WRC 的 InterSystems IRIS 数据平台完整工具包页面 获取。 HealthShare Health Connect 工具包可以从 WRC 的 HealthShare 完整工具包页面获取。 容器镜像可以从 InterSystems 容器注册表中获取。

可用性和软件包信息

此版本提供了适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器镜像。有关完整列表,请参阅“支持的平台”文档。 这些维护版本的内部版本号为:2024.1.4.512.02023.1.6.809.0

0
0 46
InterSystems 官方 Claire Zheng · 六月 20, 2025

InterSystems 宣布 InterSystems IRIS、InterSystems IRIS for Health 和 HealthShare Health Connect 2025.1 正式发布

2025.1 版的 InterSystems IRIS® 数据平台、InterSystems IRIS® for HealthTMHealthShare® Health Connect 现已正式发布 (GA)。 这是扩展维护 (EM) 版本。

版本亮点

在这个激动人心的版本中,用户可以期待一些新功能和增强,包括:

  1. 高级向量搜索功能
  2. 增强的商业智能
    • IRIS BI 多维数据集构建和同步中的自动依赖项分析,确保复杂多维数据集依赖项中的一致性和完整性。
  3. 改进的 SQL 和数据管理
    • 引入了标准 SQL 分页语法 (LIMIT... OFFSET..., OFFSET... FETCH...)。
    • 新的 LOAD SQL 命令,可以简化 DDL 语句的批量导入。
    • 增强的 ALTER TABLE 命令,可以在行布局和列布局之间无缝转换。
  4. 优化的数据库操作
    • 日志记录大小更小,效率更高。
    • 数据库压缩速度更快,尤其是对于具有大量大字符串内容的数据库。
    • 将新数据库添加到镜像时的自动化程度更高。
    • 用于 ECP 管理任务的新命令行实用工具。
  5. 更高的安全合规性
    • 支持符合 FIPS 140-3 标准的加密库。
  6. 现代化的互操作性用户界面
    • 选择参与经过改进的生产配置和 DTL 编辑器体验,其中包含源代码控制集成、VS Code 兼容性、增强的筛选功能、分屏视图等。请参阅此开发者社区文章,详细了解如何选择参与并提供反馈。
  7. 更多的医疗保健功能
    • 高效的批量 FHIR 引入和调度,包括完整性检查和资源管理。
    • 增强的 FHIR 批量访问和经过改进的 FHIR 搜索操作。
  8. 新的开发者体验功能
  9. 通过 OpenTelemetry 提高可观测性
    • 在 IRIS 中引入了跟踪功能,有助于详细观测 Web 请求和应用程序的性能。

请通过开发者社区分享您的反馈,以便我们可以共同打造更出色的产品。

文档

访问以下链接,可以详细了解所有着重介绍的功能:

此外,请查看升级影响核对清单,轻松了解升级到此版本时需要注意的所有变更。

尤其是,请注意 InterSystems IRIS 2025.1 引入了新的日志文件格式版本,该格式与早期版本不兼容,因而给混合版本的镜像设置带来了一定的限制。 请参阅相应的文档了解更多详细信息。

抢先体验计划 (EAP)

目前提供多个 EAP。 请查看此页面并注册您感兴趣的 EAP。

下载软件

一如既往,扩展维护 (EM) 版本提供了适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器镜像。

经典安装包

安装包可以从 WRC 的 InterSystems IRIS 页面(对于 InterSystems IRIS 和 InterSystems IRIS for Health)和 WRC 的 HealthShare 页面(对于 Health Connect)获取。 您也可以在评估服务网站中找到工具包。

可用性和软件包信息

此版本提供了适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器镜像。有关完整列表,请参阅“支持的平台”文档

此扩展维护版本的内部版本号为 2025.1.0.223.0

容器镜像可以从 InterSystems 容器注册表中获取。 容器被标记为 2025.1latest-em

0
0 76
InterSystems 官方 Michael Lei · 二月 2, 2025

InterSystems IRISInterSystems IRIS for HealthHealthShare Health Connect 的最新扩展维护版本现已发布。

✅ 2024.1.3

版本 2024.1.3 修复了 2024.1.x 上一版中的 bug,包括针对最近发布的以下提醒的修复 – 提醒:在执行特定的操作时,数据库和日志文件中引入了无效数据…

您可以在以下页面上找到详细的变更列表和升级核对清单:

如何获取软件

软件以经典安装包和容器镜像两种形式提供。有关可用安装程序和容器镜像的完整列表,请参阅支持的平台网页。

InterSystems IRIS 和 InterSystems IRIS for Health 的完整安装包可从本 WRC 的 InterSystems IRIS 数据平台完整套件页面获取。 HealthShare Health Connect 套件可从 WRC 的 HealthShare 完整套件页面获取。

容器镜像可通过 InterSystems 容器注册表获取。

这些版本中的所有套件和容器的编号为:

  • 2024.1.3.456.0
0
0 60
InterSystems 官方 Michael Lei · 一月 21, 2025

InterSystems 已更正导致在使用特定 $LIST 语法时引入无效数据库和日志记录的缺陷。 遇到此缺陷的可能性非常低,但它对操作的影响可能会很大。

受影响的产品

  • InterSystems IRIS® 数据平台:2023.3、2024.1.0、2024.1.1、2024.1.2、2024.2、2024.3 版
  • InterSystems IRIS® for Health:2023.3、2024.1.0、2024.1.1、2024.1.2、2024.2、2024.3 版
  • HealthShare® Health Connect:2023.3.0、2024.1、2024.1.1、2024.1.2、2024.2、2024.3 版
  • HealthShare® Unified Care Record and Suite:2024.2 版
  • 基于上述产品的所有产品组合

该问题仅影响 Unicode 安装。

使用以下语法在 global 中向列表附加新元素时,会出现此问题:

SET $LIST(<global reference>, *+1) = value.

当此调用的结果列表超出最大字符串长度时,正确的行为是返回 <MAXSTRING> 错误。此错误会出现在 InterSystems IRIS、InterSystems IRIS for Health 和 Health Connect 2023.3 之前的版本中。 在 2023.3 及后续版本中,无效值会保存到数据库而不是生成 <MAXSTRING> 错误.

任何后续引用 global 节点的尝试都会导致出现 <MAXSTRING> 错误。

global 更新也会产生日志记录(假设对此 global 的更新通常都会记录)。任何尝试应用生成的日志记录(包括启动时恢复、日志恢复和镜像操作)都会失败并出现 <MAXSTRING> 错误,同时停止对日志文件的进一步处理。

如果此缺陷给您带来了影响,请联系全球响应中心 (WRC) 寻求帮助。

此缺陷的更正标识为 DP-437169 。在从 InterSystems IRIS、InterSystems IRIS for Health 和 Health Connect 2024.1.3 与 2025.1.0 开始的未来所有版本中,都将包含此更正。 您也可以通过临时分发获取。 HealthShare Unified Care Record 2025.1 版与产品套件会在发布时包含该更正,但在先前版本的维护版中将不包含该更正。 如果您对此提醒有任何疑问,请联系全球响应中心

0
0 59
InterSystems 官方 Michael Lei · 一月 5, 2025

2024.3 版  InterSystems IRIS® 数据平台、InterSystems IRIS® for Health 和 HealthShare® Health Connect 现已正式发布 (GA)。

版本亮点

在此版本中,您可以期待一系列激动人心的更新,包括:

  1. 数据库和 WIJ 文件的扩展速度大大提高
  2. 能够通过 Visual Trace 重新发送消息
  3. 增强的规则管理器功能
  4. 向量搜索增强功能
  5. 等等。

请通过开发者社区分享您的反馈,与我们共同打造更好的产品。

文档

请访问以下链接了解所有亮点功能的详细信息:

此外,请查看此版本的升级信息

抢先体验计划 (EAP)

目前提供多个 EAP。 请查看此页面并注册您感兴趣的计划。

如何获取软件?

像往常一样,持续交付 (CD) 版本包含适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器镜像。

经典安装包

安装包可从 WRC 的 InterSystems IRIS、InterSystems IRIS for Health 和 Health Connect持续交付版本页面获取。此外,还可以在评估服务网站获取套件。

可用性和软件包信息

此版本提供适用于所有受支持平台的经典安装包,以及 Docker 容器格式的容器镜像。有关完整列表,请参阅“支持的平台”文档

安装包和预览版密钥可从 WRC 的预览版下载网站或通过评估服务网站获取。

此持续交付版本的版本号为:2024.3.0.217.0

容器镜像可通过 InterSystems 容器注册表获取。 容器带有 2024.3latest-cd 标签。

0
0 115
InterSystems 官方 Michael Lei · 一月 3, 2025

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。

可以在以下链接中找到初始文档:

可用性和软件包信息

此版本提供适用于所有受支持平台的经典安装包。有关完整列表,请参阅“支持的平台”文档

安装包和预览版密钥可从 WRC 的预览版下载网站或通过评估服务网站(勾选“Show Preview Software”(显示预览软件)框)获取。

0
0 75
文章 Shanshan Yu · 四月 18, 2023 1m read

随着生活水平的提高,人们越来越注重身体健康。 而孩子的健康成长也越来越成为家长关心的话题。 孩子的身体发育可以从孩子的身高和体重反映出来。 因此,及时预测身高和体重具有重要意义。 通过科学的预测和比较,关注孩子的发育状态。

该项目使用InterSystems IRIS Cloud SQL通过输入大量体重和身高相关数据来支持,并建立基于IntegratedML的AutoML进行预测分析。 根据输入的父母身高,可以快速预测孩子未来的身高,并根据当前的身高和体重状况判断孩子的体重指数。 在正常范围内。

功能

通过应用该程序,可以快速预测处于正常发育状态的儿童的身高。 通过结果,家长可以判断孩子发育是否正常,是否需要临床干预,有助于了解孩子未来的身高; 通过当前体重状态判断当前孩子的BMI是否正常,了解孩子当前的健康状况

应用场景

1.儿童身高预测

2. 监测儿童发育

0
0 176
公告 Tete Zhang · 二月 16, 2023

InterSystems 产品支持的平台 - 版本更新 (2023 年 2 月

我们经常收到有关 InterSystems IRIS 数据平台支持的平台和框架的问题。此更新旨在分享最近的更改以及我们对即将发生的更改的当前决策。(预测未来是一项棘手的工作,不应将此视为我们对未来支持平台和框架的承诺。)

我们计划大约每 3 个月发布一次此类更新,然后在一年内重新评估。如果您觉得此更新有用,请告诉我们!我们很感激您的建议。

关于更新……

IRIS 生产操作系统和 CPU 架构

红帽企业版 Linux

0
0 209
文章 Hao Ma · 十一月 20, 2022 7m read

发布您自己的软件

首先:要发布您的软件,您要支持这个”命名规范。其中和zmp最相关的是包名和l类名的设计,你要定义成这样:

company.project.subpackage.TheClass.cls

如果您的Package Name定义是: Company.Project, 有大写字母,对不起,是无法用zpm打包的。

这个链接给了最简单的例子,但还不详细,我来总结一下:

发布您的软件前,有几件事情要了解:

  1. zpm的注册中心并不存代码,存的只是一个到您代码的链接。因此,您得找地方放您的代码。当前最常用的是github。

  2. 文件目录的结构

    举例:有一个class定义是 com.tony.Test1.cls, 你的目录应该这么组织,假设您要放在 /myDemo, 那么class应该在/myDemo/src/com/tony/Test1.cls。这是使用VSCode组织代码的默认方式,只有保证这样的目录结构,您才可能用zpm加载代码到iris.

让我来做个简单的例子。

首先,有这样的class:

Class com.tony.Test1
{	Property p1;
}

我的文件目录设置

$ ls -l /external/myDemo/src
total 4
-rw-r--r-- 1 irisowner irisowner 40 Nov 12 10:00 Test1.cls
$

这时候我来使用zpm打包测试

module.xml的生成和加载

第一步,生成module.xml

我们看看最简单的用zpm generate命令生成module的例子:

zpm:USER>generate /external/myDemo/project1

Enter module name: project1
Enter module version: 1.0.0 =>
Enter module description:
Enter module keywords:
Enter module source folder: src =>

Existing Web Applications:
    /csp/user
    /terminal
    /terminalsocket
    Enter a comma separated list of web applications or * for all:
Dependencies:
    Enter module:version or empty string to continue:
zpm:USER>

zpm generate会把/external/myDemo/project1目录下的文件打包,在这个目录下创建一个module.xml文件, 是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25">
  <Document name="project1.ZPM">
    <Module>
      <Name>project1</Name>
      <Version>1.0.0</Version>
      <Packaging>module</Packaging>
      <Resource Name="com.PKG" />
      <SourcesRoot>src</SourcesRoot>
    </Module>
  </Document>
</Export>

先等等解释这个xml, 让我们先执行第2步。

第2步: 把文件load到iris

zpm:USER>load /external/myDemo/
[USER|firstdemo]	Reload START (/external/myDemo/)
[USER|firstdemo]	Reload SUCCESS
[firstdemo]	Module object refreshed.
[USER|firstdemo]	Validate START
[USER|firstdemo]	Validate SUCCESS
[USER|firstdemo]	Compile START
[USER|firstdemo]	Compile SUCCESS
[USER|firstdemo]	Activate START
[USER|firstdemo]	Configure START
[USER|firstdemo]	Configure SUCCESS
[USER|firstdemo]	Activate SUCCESS
zpm:USER>

您去iris里看看, 确认class已经被loaded

第3步: 删除(optional, 但你可能会用到这个命令)

zpm:USER>uninstall firstdemo

[USER|firstdemo]	Clean START
[USER|firstdemo]	Unconfigure START
[USER|firstdemo]	Unconfigure SUCCESS
Deleting class com.tony.Test1
[USER|firstdemo]	Clean SUCCESS
zpm:USER>

这时候您应该可以发现com.tong.Test1类已经从Iris删除了。

对上面的例子总结一下:

  1. 打包是对一个文件夹打包

  2. 使用zpm把软件包加载进iris是先找包里面的module.xml文件。通过module.xml里定义的信息来知道包的名字,版本,打包的内容等等。 这个module.xml是在打包的时候用zpm generate创建的, 但您也可以自己手工创建,比如copy其他包的module.xml改改, 有时候会更快捷,尤其是您对zpm命令不是很熟悉的时候, 对很多打包的需求,比如后面会提到的定义依赖等等,直接改module.xml比zpm generate容易多了。

  3. 让我来说说可能的问题:

    module.xml中<Resource Name="com.PKG"/>定义了包名com.PKG, 加载数据包到iris很成功。但是,如果您还记得,刚刚例子里打包的是class是com.tony.Test1,那么如果你再定义一个新的类,叫com.tiedan.Test1, 用zpm generate一个新module, 名字叫project2(注意第一个打包的module名字是project1), project2的"Resource Name"也还是"com.PKG, 它能正确加载吗?

    不会, 你会被告知:"ERROR! Resource 'com.PKG' is already defined as part of module 'project1'; cannot also be listed in module 'project2'"

​ 解决方法:手工将module.xml里面的Resource Name改成“com.tony.PKG"和"com.tiedan.PKG", 这样两个包都能成功加载了。

还有个小问题,Mac用户可能会看到这样的提示:

zpm:USER>load /external/myDemo/project1

[USER|project1] Reload START (/external/myDemo/project1/) [project1] Reload FAILURE ERROR! Unable to import file '/external/myDemo/project1/src/com/.DS_Store' as this is not a supported type. zpm:USER>

这是说打包的文件夹下面有.DS_Store文件,而zpm不认识。zpm会把里面认识的文件, 比如.cls文件成功加载, 然后告诉你"Roload FAILURE"

好吧, 到这里我们知道怎么打包和把包加载到iris里, 接着看看什么文件可以被打包。

Package可以包含的文件类型

这时候要好好了解module.xml的内容的细节了, 请阅读技术文档的module.xml部分

其中的resource部分,阐明了您可以打包的内容:

第一部分:可以被加载到iris的文件类型。

Use the following suffixes for different types of resources:

.PKG - Package .CLS - Class .INC - Include .MAC - Routine .LOC - LocalizedErrorMessages .GBL - Global .DFI - DeepSee Item

第二部分:jar包

<FileCopy Name="lib/" Target="${libdir}my-lib/"/>               Copies content of lib folder to Target
<FileCopy Name="somefile.jar" Target="${libdir}my-lib/"/>       Copies just desired file to Target

第三部分:UnitTest

module.xml的例子里给出的UnitTest部分是这个样子

<UnitTest Name="/tests/unit_tests/" Package="Test.Unit" Phase="test"/>

说实话,我还没研究怎么使用zpm generate可以做到这一点,能想到的就是手工去修改module.xml文件。

第四部分:Web Application

执行zpm generate的时候, 会列出当前命名空间可以使用的Web Application列表。让我重新执行一下打包的第一步,看看结果是什么样子

zpm:USER>generate /external/myDemo/project1

Enter module name: project11
Enter module version: 1.0.0 =>
Enter module description:
Enter module keywords:
Enter module source folder: src =>

Existing Web Applications:
    /csp/user
    /terminal
    /terminalsocket
    Enter a comma separated list of web applications or * for all: /csp/user
    Enter path to csp files for /csp/user: 
Dependencies:
    Enter module:version or empty string to continue:
zpm:USER>

得出的module.xml里多了如下内容:

<CSPApplication CookiePath="/csp/user/" DefaultTimeout="900" DeployPath="${cspdir}user/" Description="User Namespace applications" GroupById="%ISCMgtPortal" MatchRoles=":{$dbrole}" PasswordAuthEnabled="1" Recurse="1" ServeFiles="2" ServeFilesTimeout="3600" UnauthenticatedEnabled="1" Url="/csp/user" UseSessionCookie="2"/>
      <SourcesRoot>src</SourcesRoot>

其中,打包时提问`Enter path to csp files for /csp/user:。 这里,您需要填入的是当前要load的csp文件。比如:您有一个tony.csp要加载,那么您可以在要打包的目录下创建一个子目录“cspfiles", 把tony.csp放在cspfiles目录里, 回答提问的使用这样

Enter path to csp files for /csp/user:/cspfiles

这里用的是相对路径,但格式是绝对路径的格式,我把它看成一个bug。

module.xml中还有其他很多配置的内容,我在后面会介绍包的依赖的部分。

软件包的Package

用package命令,在iris里将软件打包。打包的结果是得倒一个project1-1.0.0.tgz的文件。 package -v显示verbose信息,您可以清楚的看到project1-1.0.0.tgz和module.xml的存放位置。

zpm:USER>project1 package -v

[USER|project1]	Reload START (/external/myDemo/project1/)
Skipping preload - directory does not exist.
Load of directory started on 11/20/2022 13:15:17 '*'

Loading file /external/myDemo/project1/src/com/tony/Test1.cls as udl
Load finished successfully.

[USER|project1]	Reload SUCCESS
[project1]	Module object refreshed.
[USER|project1]	Validate START
[USER|project1]	Validate SUCCESS
[USER|project1]	Compile START
Compilation started on 11/20/2022 13:15:17 with qualifiers 'd-lck'
Compiling class com.tony.Test1
Compiling routine com.tony.Test1.1
Compilation finished successfully in 0.008s.

[USER|project1]	Compile SUCCESS
[USER|project1]	Activate START
[USER|project1]	Configure START
[USER|project1]	Configure SUCCESS
Studio project created/updated: project1.PRJ
[USER|project1]	Activate SUCCESS
[USER|project1]	Package START
Exporting 'com.tony.Test1.cls' to '/usr/irissys/mgr/Temp/dirKBwoaM/project1-1.0.0/src/com/tony/Test1.cls'
Exported to /usr/irissys/mgr/Temp/dirKBwoaM/project1-1.0.0/module.xml
Module exported to:
	/usr/irissys/mgr/Temp/dirKBwoaM/project1-1.0.0/

Module package generated:
	/usr/irissys/mgr/Temp/dirKBwoaM/project1-1.0.0.tgz
[USER|project1]	Package SUCCESS
zpm:USER>

软件包的Publish

我们并没有权限把软件包直接发布到官方的registry去。您需要去InterSystems的OpenExchange页面,提交您的软件包。如下图填入软件包的信息,Github URL, 注意勾选右下角的"Publish in Package Manager" 。

image

后面, 我会介绍怎么创建自己team的私服, 用zpm publish可以简单的把iris的软件包发布到私服上去,这对一个开发团队共享软件包并方便部署应该是更有吸引力些。

2
0 281
文章 Louis Lu · 一月 19, 2023 11m read

 

这篇文章主要介绍 HL7 V2.5.1 标准是如何定义查询类请求,以及查询类响应的。相关HL7 V2 的更多基础知识可以参考:HL7v2到底是什么?! 的一系列文章。

1     查询标准的发展

1.1  最早的查询模式

最初,HL7的查询参数通过QRD以及QFR 字段传入。因为这两个字段的设计是为了满足所有的查询需求,所以这两个字段的定义非常随意。

1.2  加强的查询模式

从HL7 V2.3开始,引入了加强版的查询模式,它包含了四种方式:

•      嵌入式查询语言类请求查询:自由格式的select SQL语句

•      虚拟表类请求查询:基于特定的select 条件查询服务端的数据库表

•      存储过程类请求查询:执行服务端的存储过程返回数据

•      事件类请求查询:返回基于特定事件的查询结果

1.3  基于2.4 版本的查询

HL 7 v2.3.1之后的版本更清晰地将请求查询的方式与返回查询数据的方式分开,并且强调了“符合性声明”的存在。 HL 7继续支持存储过程、事件查询和虚拟表查询的语义,但推荐使用新的查询方式,即按参数查询(QBP),使语法更清晰。

QBP查询的目的是在一个精确的一致性声明的框架内统一存储过程、事件和虚拟表查询的语义。

同时该标准仍可以继续使用最初模式查询(QRD/QRF),但使用新的查询形式可以更清楚地解释其语义。

0
0 984
文章 Hao Ma · 十一月 26, 2022 4m read

建立私服(Porxy-Registry)

这张图解释了您的私服是怎么工作的, 整篇文章在这里: Proxy-Registry

搭建私服

您需要有一台自己的的服务器, 在上面安装IRIS, zpm, 然后用zpm去下载另一个软件包“zpm-registry"。象这样

zpm:DEMO>search -r zpm-registry
registry https://pm.community.intersystems.com:
zpm-registry 1.1.11Repository: https://github.com/intersystems-community/zpm-registry/

zpm:DEMO>install zpm-registry
[DEMO|zpm-registry]	Reload START (/usr/irissys/mgr/.modules/DEMO/zpm-registry/1.1.11/)
[DEMO|zpm-registry]	Reload SUCCESS
[zpm-registry]	Module object refreshed.
[DEMO|zpm-registry]	Validate START
[DEMO|zpm-registry]	Validate SUCCESS
[DEMO|zpm-registry]	Compile START
[DEMO|zpm-registry]	Compile SUCCESS
[DEMO|zpm-registry]	Activate START
[DEMO|zpm-registry]	Configure START
[DEMO|zpm-registry]	Configure SUCCESS
[DEMO|zpm-registry]	Activate SUCCESS
zpm:DEMO>

到github页面, https://github.com/intersystems-community/zpm-registry/, 你可以得到更详细的软件信息。

配置私服连接公服, 需要在私服的IRIS的安装目录添加一个yaml文件, 定义uplink:

uplinks:
  pm:
    url: https://pm.community.intersystems.com/
    allow_packages: dsw,zpm*,?u*

几点说明:

  • uplinks的项目可以有多个,pm是intersystems的默认公共registry

  • allow_packages: - a comma-separated list of allowed packages, you can use the exact package name or mask: * - any sequence of characters, ? - any charac

  • registry 提供的rest 接口描述: https://pm.community.intersystems.com/_spec

设置zpm client连接私服

通过repo命令将您的zpm client切换到刚刚配置的私服。repo -n registry里面的 - user, - pass是你搭建的私服的账号密码。您也可以在私服上修改/registryWeb应用不做用户验证。

zpm:DEMO>repo -list
registry
	Source: 		https://pm.community.intersystems.com
	Enabled?		Yes
	Available?		Yes
	Use for Snapshots?	Yes
	Use for Prereleases?	Yes
	Is Read-Only?		No
	Deployment Enabled? 	No

zpm:DEMO>repo -n registry -r -url http://localhost:52773/registry/ -user superuser -pass demo

registry
	Source: 		http://localhost:52773/registry/
	Enabled?		Yes
	Available?		Yes
	Use for Snapshots?	Yes
	Use for Prereleases?	Yes
	Is Read-Only?		No
	Deployment Enabled? 	No
	Username: 		superuser
	Password: 		<set>
zpm:DEMO>

这时的私服时没有连接公服。

发布软件包到私服

发布一个 GitHub 的包

先把软件存在github, 然后用curl命令把包发布在私服的地址。

$ curl -i -X POST -H "Content-Type:application/json" -u superuser:1104 -d '{"repository":"https://github.com/psteiwer/ObjectScript-Math"}' 'http://localhost:52773/registry/package’

使用zpm 客户端先在本地load,然后使用publish 命令

大概像这个样子:

zpm:USER>help load
...
  ■ Examples
    ∙ load C:\module\root\path\
load C:\module\root\path\module-0.0.1.tgz
      Loads the module described in C:\module\root\path\module.xml
    ∙ load -dev -verbose C:\module\root\path\
load -dev -verbose C:\module\root\path\module-0.0.1.tgz
      Loads the module described in C:\module\root\path\module.xml in developer mode and with verbose output.
    ∙ load https://github.com/user/repository.git
load https://github.com/user/repository.git -b branch-name
      Loads the module described in C:\module\root\path\module.xml in developer mode and with verbose output.
zpm:USER> load https://github.com/user/repository.git
zpm: USER> publish <package name>

其他的Feature

在使用中您还会有各种各样的需求, 但我相信看到现在您应该对怎么寻找答案非常清楚了。这里简单的说两个feautre

1. 发布为Delopyed模式

如果您要隐藏自己的代码,只发布编译后的软件, 可以简单的修改Module.xml, 设置“<Resource Name="Sample.Demo.PKG" Deploy="true"/>“, zpm会自动完成。

2. 包的依赖

因为有朋友问,所以说一些包依赖的功能。是的, zpm是设计了包依赖的功能的,在module.xml里添加Dependencies节点, 可以定被依赖的包的列表。 具体的写法请参见这个例子:module.xml example

虽然但是,对ObjectScript程序来说,定义包依赖的机会并不多。我能想到的应用场景就是, 当您的软件中想用社区其他包,比如上面的bitmap-adoption的包的话,您可以包"bitmap-adoption"打包到module.xml里面。

我对当前发布的200多软件包随便挑了一些,还没有发现有哪个使用了包依赖, 象这样:

zpm:USER>list-dependents yaml-utils
zpm:USER>list-dependents terminal-multiline-editor
zpm:USER>list-dependents bitmap-adoption
zpm:USER>list-dependents global-dump-sql
...
0
0 234
文章 John Pan · 九月 9, 2022 5m read

集成平台的关键在于解决系统之间的互联互通和互操作性的问题,是一个多厂商、多协议的体系结构。医院在集成平台实施的过程中,面临的第一件重要的事情就是交互标准的选择,目前的建设中,分为两队:非标准队和标准队。非标准队一般采用视图抓取、xml格式、json等等的自定义格式,标准队一般采用HL7 V3、HL7 V2、FHIR、DICOM等医疗领域标准,下面会简单介绍一下各种方式以及实施落地的难易程度。(以下内容中将以难易程度总分5★来表示,星数量越多代表难度越高)

1、非标准队

与其说非标准,不如定义为院内交互标准,交互仅限于院内,是一种很有限的互操作,而且定制程度很高,需要很好地把握系统的内部知识。方案缺乏通用性,难以规模推广。但由于其技术门槛较低,学习成本较低,在集成系统数量较少时不失为一种经济快速的方法。

      1.1 视图-★

视图可以说是一种"古老"的交互方案了,几乎传统的系统交互都是用视图的方式,有实施周期短,上线速度快的优点,但提供视图一方数据库,在大量数据查询的时候,将面临系统压力过大,数据库速度变慢等问题。在集成平台建设中,使用视图形式,可以由集成平台定时轮询视图,将数据发送给需要的系统。这样可以减轻源系统的压力。但是无论进行怎么样架构设计,视图这种形式的最大的弊端:无法保证数据的实时性。落地难度:1星。

      1.2 XML-★★

2
1 552
文章 Chang Liu · 九月 22, 2022 2m read

1,准备

    本次安装环境:Kylin-Server-10-SP2-Release-Build09-20210524-x86_64.iso

    安装系统适配的对应版本:HealthConnect-2021.1.2.338.0-lnxubuntux64.tar.gz;ISCAgent-2021.1.2.338.0-lnxubuntux64.tar.gz

     系统语言选择:English(必要)

2,安装HealthConnect+webgateway

  2.1  新建所需用户组

  groupadd iscagent

 2.2  解压文件

2.3 安装

  本次安装,使用root用户及root用户组安装,超级端口改为51773

3,安装ISCAgent

  3.1安装说明

  ISCAgent是healthconnect的镜像服务,若是单机使用,则不需要安装。

  3.2  解压文件

    

 3.3  安装

 

3.3  加入服务

3.3.1   新建文件

  /etc/systemd/system 下创建文件,ISCAgent.service,内容如下:

 [Unit]

Description=InterSystems Agent

After=syslog.target network-online.target

[Service]

8
0 421
文章 Nicky Zhu · 十月 10, 2022 4m read

在生产环境中IRIS通常以故障转移集群的形态被部署,而集群中各故障转移成员的镜像状态将决定该集群在故障发生时是否能够顺利切换保障业务不中断。因此,成员状态通常也是运维团队需要巡检或监控的目标。

尽管IRIS内部API提供了丰富的集群配置、成员状态监控等一系列接口,但除Portal上的镜像监视器外,并没有特定的接口便于从外部系统访问(如进行企业级监控集成时),也没有整合好的监控接口可用与获取镜像的健康状态。但在IRIS上开发一个REST接口暴露镜像状态数据并不困难,如下所示:

0
0 255
文章 Michael Lei · 八月 19, 2022 2m read

我很高兴与大家分享我第一次使用docker容器版本的IRIS for Health的经验,以探索你对使用或试用的兴趣,利用docker容器的优势,它是轻量级的,易于部署。本文将通过使用Renan Lourenco编写的名为ENSDEMO的GitHub仓库的实施步骤。

设置IRIS for Health社区版docker容器环境的步骤:

  1. 启动运行Docker
  2. 下载docker 镜像image

docker pull containers.intersystems.com/intersystems/irishealth-community:2022.2.0.304.0

  1. 从GitHub 克隆源repository

git clone https://github.com/OneLastTry/irishealth-ensdemo

  1. 改一下文件目录.
  2. 从docker-compose.yml建立容器镜像

docker-compose build

  1. 运行你的容器

docker-compose up -d

在我最初的尝试中,我无法下载irishealth community:2022.2.0.304.0的确切版本,因为它在ENSDEMO的最初发布中已经发生了变化。修复方法是,当试图从InterSystems容器注册表拉出docker镜像时,在注册表中拉出最新的可用标签。

2
0 503
文章 Jeff Liu · 九月 23, 2021 34m read
技术概要:使用 InterSystems 产品优化 SQL 性能使用 InterSystems SQL 优化查询使用 EXPLAIN 关键字显示查询计划在管理门户(Management Portal)中使用 SQL 查询接口显示查询计划发现查询计划结果中潜在的性能问题测试查询执行测试位片索引(Bitslice Index)的效果向交易类型字段(TransactionType Field)添加位图索引(Bitmap Index)重新测试查询性能查看随时间变化的查询性能了解有关 InterSystems SQL 的更多信息介绍材料

技术概要:使用 InterSystems 产品优化 SQL 性能

技术概要:使用 InterSystems 产品优化 SQL 性能
本技术概要(First Look)指南向您介绍了 InterSystems SQL 查询优化,包括查询分析工具的使用,几种索引方法以及随着时间的变化查看运行时统计数据的能力。
要浏览所有的技术概要(First Look),包括其他可以在免费的云实例或 web 实例上执行的技术概要(First Look),请参见 InterSystems First Looks(《InterSystems 技术概要》)。
使用 InterSystems SQL 优化查询

InterSystems IRIS®数据平台为

0
0 211
文章 Hao Ma · 九月 22, 2021 4m read

技术概要:ODBC 和 InterSystems 数据库

如果您希望在 InterSystems IRIS®数据平台上使用 ODBC,本文将介绍如何设置它。
要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems 技术概要(InterSystems First Looks)。

1    ODBC: 如何在 InterSystems IRIS 中使用它
InterSystems 提供了一个完全兼容的(ODBC 3.5)ODBC 驱动程序,您可以使用它通过 ODBC 访问 InterSystems IRIS 数据库。当您安装 InterSystems IRIS 时,默认安装该驱动程序。
为了开始在 InterSystems IRIS 中使用 ODBC,您只需要在 InterSystems IRIS 实例上配置驱动程序。本技术概要(First Look)文档对这一过程进行了概述。
如果您还不熟悉 ODBC,请参见本文档末尾的 "了解更多信息" 一节中的链接,以获得更多信息。

0
0 458
文章 Hao Ma · 九月 22, 2021 22m read

InterSystems IRIS 基础:连接一个 IDE

本文档告诉您如何快速连接您的集成开发环境(IDE),用于 ObjectScript、Java、.NET、Python 或 JavaScript/Node.js 的集成开发环境连接到 InterSystems IRIS® 的一个实例,并使用从 GitHub 下载的模板文件验证您是否已经成功连接。
此外,接下来的两节还包括以下内容:
•    部署 InterSystems IRIS
列出用于部署 InterSystems IRIS 的已授权和免费评估实例的选项。如果您还没有一个可以使用的实例,请查看本节。
•    InterSystems IRIS 连接信息
详细介绍了将 IDE 连接到已授权或免费的 InterSystems IRIS 实例,以及以其他方式与之进行交互所需的信息 ,并解释了如何获得实例的信息。无论您想用哪个 IDE 连接到 InterSystems IRIS,都要查看涉及您所使用的实例类型的部分。

1    部署 InterSystems IRIS
本节涵盖了已授权的实例和免费的评估实例。

0
0 583
文章 Jeff Liu · 九月 22, 2021 7m read

本文档介绍了如何使用 InterSystems JDBC 驱动程序连接到 InterSystems IRIS®数据平台实例,这样您就可以在 InterSystems IRIS 中使用 Java。

要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。

JDBC:如何在 InterSystems IRIS 中使用它

0
0 877
文章 Jeff Liu · 九月 22, 2021 11m read

 

技术概要:ObjectScript

技术概要:ObjectScript

本文档将向您介绍 ObjectScript 编程语言,并提供了几个示例,说明如何使用它来存储和检索来自 InterSystems IRIS®数据平台的数据。本技术概要(First Look)并不试图提供对该语言或其功能的全面概述。您可以使用本文件末尾列出的参考资料,继续您的探索。

要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。

什么是 ObjectScript?

0
0 513
文章 Michael Lei · 八月 26, 2021 9m read

SAM - 设置和添加非 IRIS 目标指标的技巧和提示

SAM(系统警报和监视)以“功能齐全”的 docker-compose 容器集的形式提供,只要启动就可以开始以默认的仪表板监视 IRIS 实例。 使用初始配置就可以很好地了解 SAM 功能并开始对 IRIS 系统进行基本监视。 但是,当开始监视多个系统并收集大量指标数据时,需要更改一些默认设置。 为了从 SAM 获取更多价值,您还会想要添加来自其他数据源(目标)的指标。 以下技巧将帮助您在生产环境中部署 SAM,从多个目标收集指标并将这些指标组合到您自己的仪表板和图表中。 此外,您还将看到一些可能有助于探索 SAM 容器和应用程序的命令。

*注意:*我应该指出,其中一些技巧和提示可能不是最佳做法;这更像是一个日志,记录了我第一次如何配置 SAM 来监视相同系统上的多个服务器和非 IRIS 目标的基准。 如果您有建议,请在评论中指教 ;) 所以,记住本帖可能会随着时间的推移而有所变化,让我们开始吧;


在下面的技巧中,有重启 docker 以及启动和停止 SAM 的操作。 请通读这些技巧,确定哪些适合您,然后按照下面的相同顺序执行。

1. 确保有足够的空间用于 SAM 数据库

默认情况下,docker 容器将文件存储在根 (/) 文件系统。 SAM 不需要很多 CPU 或内存资源;但是,指标收集将占用空间。

指标需要的存储容量“视情况而定”。 虽然在开始监视之前可能无法明确数据库大小,但大致上,在抓取周期为 15 秒的情况下,监视 10 个 IRIS 虚拟机以及操作系统指标大约消耗 50GB 存储。

策略包括:增加监视实例的根存储,或更改数据库的卷位置。 我使用了以下命令来更改运行 docker 的虚拟机上的 docker 目录。 也许是杀鸡用了牛刀,但很管用。

  • 停止 docker 并将 docker 文件复制到空间充足的文件系统(本例中为 /data/docker/data)。 见下面的示例:
[root@mysamserver lib]# sudo systemctl stop docker  
[root@mysamserver lib]# pwd  
/var/lib  
[root@mysamserver lib]# cp -rp docker /data/docker/data  
[root@mysamserver lib]#  
[root@mysamserver lib]# rm -rf docker
  • 在 docker 配置文件中更新卷路径。 注意此文件还有一个网络设置“bip”(请参见注释:...)
cat /etc/docker/daemon.json

    {
            "data-root": "/data/docker/data",
            "bip": "192.168.0.1/24"
    }
  • 重启 docker
sudo systemctl daemon-reload
sudo systemctl restart docker

systemctl status docker.service

2. 设置 SAM

我假定您已在测试系统上设置 SAM,并熟悉它的基本操作:添加集群和实例,以及查看系统指标。 建议您花 20 分钟时间查看我在虚拟全球峰会 2020 上的展示,以了解安装步骤的概述,以及添加多个目标的运行指标时 SAM 的外观。 要观看此会议,请使用以下链接(您需要使用您的电子邮件注册):

DEV007 系统警报和监视

登录到 SAM 门户并配置一些 IRIS 实例。 这会填充配置文件并提供向导。

http://mysamserver:8080/api/sam/app/index.csp#/

注意:如果要添加多个实例,或者希望用脚本执行此步骤,可以通过 API 添加实例。 请参见文档。

3. 升级到生产许可证

SAM 随附了一个 IRIS 社区版许可证。 有几个限制,包括 IRIS.DAT 限制为 10GB。 10GB 不足以长时间从多个目标收集数据。 请联系您的 InterSystems 联系人以获取生产许可证。 在没有编辑器的情况下,在精简的容器中更新许可证可能很棘手,我只是在 IRIS 容器上登录一个交互式会话,然后使用以下命令更新许可证密钥:

  • 打开 shell,切换目录至 mgr 文件夹(iris.key 文件的默认位置)
docker exec -it sam_iris_1 bash
cd /dur/iconfig/mgr
  • 使用 unix“here 文档”更新密钥。 在“>”后面粘贴密钥文本。 在密钥文本后面,输入“>EOF”以提交命令。 然后输入“exit”退出 shell。
cat <<EOF >iris.key
>
[ConfigFile]
FileType=InterSystems License Rev-A.1
LicenseID=999999

[License]
LicenseCapacity=InterSystems IRIS 2020.2 Server for SAM:etc etc, the key you were sent by your InterSystems contact.
>EOF
exit
  • 然后使用提供的 docker-compose shell 脚本停止再启动 SAM:
./stop.sh
./start.sh
  • 可以通过访问系统管理门户或登录到 iris 实例并检查 messages.log 来检查许可证是否一切正常。
docker exec -it sam_iris_1 bash
cd /dur/iconfig/mgr
cat messages.log

4. 在目标上安装其他 prometheus 导出程序

例如,prometheus 节点导出程序可显示各种硬件和内核相关的指标。

节点导出程序文档

通过请求(抓取)实例端点的指标,测试节点导出程序是否正常工作:

curl my_target_server_name:9100/metrics

您应该看到类似下面的信息:

mylaptop:~ mo$ my_target_server_name:9100/metrics | more
HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 4.8862e-05
go_gc_duration_seconds{quantile="0.25"} 7.5898e-05
go_gc_duration_seconds{quantile="0.5"} 9.2974e-05
go_gc_duration_seconds{quantile="0.75"} 0.000130664
go_gc_duration_seconds{quantile="1"} 0.000358762
go_gc_duration_seconds_sum 303.291715258
go_gc_duration_seconds_count 2.572586e+06
# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 9
:
: many many metrics will be displayed

注意您可以对您的 IRIS 实例执行同样操作:

mylaptop:~ mo$ curl my_target_server_name:52776/api/monitor/metrics | more
iris_cpu_pct{id="AUXWD"} 0
iris_cpu_pct{id="CSPDMN"} 0
iris_cpu_pct{id="CSPSRV"} 0
iris_cpu_pct{id="ECPCliR"} 0
iris_cpu_pct{id="ECPCliW"} 0
iris_cpu_pct{id="ECPSrvR"} 0
iris_cpu_pct{id="ECPSrvW"} 0
:
: many many metrics will be displayed

5. 编辑配置文件以添加对新目标的抓取

例如,前一个技巧中的 node-exporter 实例。 配置文件将位于 SAM 的安装位置。 如下所示,可以看到 grafana 和 prometheus yml 配置文件。

[root@mysamserver sam-1.0.0.115-unix]# ls
config  docker-compose.yml  readme.txt  start.sh  stop.sh
[root@mysamserver sam-1.0.0.115-unix]# tree -x config
config
├── alertmanager
│   └── isc_alertmanager.yml
├── grafana
│   ├── dashboard.json
│   ├── dashboard-provider.yml
│   ├── datasource.yml
│   └── grafana.ini
├── nginx
│   └── nginx.conf
└── prometheus
    ├── isc_alert_rules.yml
    └── isc_prometheus.yml

4 directories, 8 files

5.1 添加目标到 prometheus

以下示例是使用 SAM 中的配置 GUI 屏幕创建的 isc_prometheus.yml 文件。 该文件包含两个集群。 一个集群监视 sam 实例本身,另一个集群监视五个 IRIS 实例。

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - alertmanager:9093
global:
  evaluation_interval: 15s
  scrape_interval: 15s
remote_read:
- url: http://iris:52773/api/sam/private/db/read
remote_write:
- url: http://iris:52773/api/sam/private/db/write
rule_files:
- ./isc_alert_rules.yml
scrape_configs:
- job_name: SAM
  metrics_path: /api/monitor/metrics
  scheme: http
  static_configs:
  - labels:
      cluster: "1"
    targets:
    - mysaminstance.mycompany.com:8080
  - labels:
      cluster: "2"
    targets:
    - myiristarget1:52776
    - myiristarget2:52776
    - myiristarget3:52776
    - myiristarget4:52776
    - myiristarget5:52776
  • 要添加对其他运行 node-exporter 的目标的抓取,请将以下内容添加到 isc_prometheus.yml 文件的底部。 注意 API metrics_path 与 IRIS 不同。
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - alertmanager:9093
global:
  evaluation_interval: 15s
  scrape_interval: 15s
remote_read:
- url: http://iris:52773/api/sam/private/db/read
remote_write:
- url: http://iris:52773/api/sam/private/db/write
rule_files:
- ./isc_alert_rules.yml
scrape_configs:
- job_name: SAM
  metrics_path: /api/monitor/metrics
  scheme: http
  static_configs:
  - labels:
      cluster: "1"
    targets:
    - iscsydsam.iscinternal.com:8080
  - labels:
      cluster: "2"
    targets:
    - myiristarget1:52776
    - myiristarget2:52776
    - myiristarget3:52776
    - myiristarget4:52776
    - myiristarget5:52776
- job_name: node_shard1
  metrics_path: /metrics
  scheme: http
  static_configs:
  - labels:
      cluster: "2"
      group: node
    targets:
    - myiristarget1:9100
- job_name: node_shard2
  metrics_path: /metrics
  scheme: http
  static_configs:
  - labels:
      cluster: "2"
      group: node
    targets:
    - myiristarget2:9100
- job_name: node_shard3
  metrics_path: /metrics
  scheme: http
  static_configs:
  - labels:
      cluster: "2"
      group: node
    targets:
    - myiristarget3:9100
- job_name: node_shard4
  metrics_path: /metrics
  scheme: http
  static_configs:
  - labels:
      cluster: "2"
      group: node
    targets:
    - myiristarget4:9100
- job_name: node_shard5
  metrics_path: /metrics
  scheme: http
  static_configs:
  - labels:
      cluster: "2"
      group: node
    targets:
    - myiristarget5:9100
  • 然后使用提供的 docker-compose shell 脚本停止再启动 SAM:
./stop.sh
./start.sh

SAM 现在从您通过 GUI 添加的 IRIS 实例以及相同实例上的 node-exporter 中收集指标。

6. 增加 Prometheus 收集指标的天数

在 SAM 的第一版中,您可以在 GUI 中更改收集指标的天数。 但是,我在显示所有指标时遇到一个问题。 在我弄清楚发生了什么之前,我更改了 Prometheus 中的保留天数,否则 SAM 将收集数据,但是您在 Grafana 的 Prometheus 查询中看不到指标。

在文件 docker-compose.yml 中用来安装 SAM 的层,更改 Prometheus 启动时设置的保留天数,例如在 prometheus 部分中,更新 storage.tsdb.retention.time 参数以匹配所需的保留天数:

prometheus:
    command:
      - --web.enable-lifecycle
      - --config.file=/config/isc_prometheus.yml
      - --storage.tsdb.retention.time=30d

注意:在 SAM 的第一版中,最长保留天数为 30 天。 然后使用提供的 docker-compose shell 脚本停止再启动 SAM:

./stop.sh
./start.sh

7. 创建您自己的仪表板

您可以向现有仪表板添加面板,也可以创建新的仪表板以满足您的监视需求。 这是一个很大的主题,所以留到下一个帖子再说。 不过,这里先帮助您上手。

在 SAM 屏幕上使用 View in Grafana(在 Grafana 中查看)按钮切换到 Grafana。

DraggedImage.png

打开 Grafana 后,可以创建或编辑仪表板;

DraggedImage-1.png

网上有许多查询导出程序(如 node-exporter)的示例。

当可以显示 IRIS 系统指标(SAM 中的默认设置)、IRIS 应用程序指标(您需要将这些指标构建到应用程序中)以及其他指标(如 node-exporter 或由供应商创建的任何数量的指标)时,真正强大的功能才体现出来。 例如,使用 SAM 和 cAdvisor 监视 Docker 容器

0
0 224
文章 Michael Lei · 七月 6, 2021 16m read

供应商或内部团队要求说明如何为 VMware vSphere 上运行的_大型生产数据库_进行 CPU 容量规划。

总的来说,在调整大型生产数据库的 CPU 规模时,有几个简单的最佳做法可以遵循:

  • 为每个物理 CPU 核心规划一个 vCPU。
  • 考虑 NUMA 并按理想情况调整虚拟机规模,以使 CPU 和内存对于 NUMA 节点是本地的。
  • 合理调整虚拟机规模。 仅在需要时才添加 vCPU。

通常,这会引出几个常见问题:

  • 由于使用超线程技术,VMware 创建的虚拟机的 CPU 数量可以是物理 CPU 数量的两倍。 那不就是双倍容量吗? 创建的虚拟机不应该有尽可能多的 CPU 吗?
  • 什么是 NUMA 节点? 我应该在意 NUMA 吗?
  • 虚拟机应该合理调整规模,但我如何知道什么时候合理?

我以下面的示例回答这些问题。 但也要记住,最佳做法并不是一成不变的。 有时需要做出妥协。 例如,大型生产数据库虚拟机很可能不适合 NUMA 节点,但我们会看到,其实是没问题的。 最佳做法是指必须针对应用程序和环境进行评估和验证的准则。

0
0 956
问题 kun an · 六月 9, 2021

请问cahce中所有的数据库访问都是通过cache server完成的吗,比如使用终端访问数据库、studio开发的应用、使用第三方库使用代码都是先访问cache server,然后通过cache server对数据进行存取的吗?使用studio开发的应用程序也是跑在cache server中吗? 如果是的话studio开发的应用程序(比如web程序)如何跟cache server分开部署呢?

4
0 224
文章 Michael Lei · 五月 12, 2021 16m read

本贴提供了在 VMware ESXi 5.5 及更高版本的环境中部署 Caché 2015 及更高版本时,关于配置、系统规模调整和容量规划等方面的指南。

我假定您已经了解 VMware vSphere 虚拟化平台,所以直接给出推荐。 本指南中的推荐不特定于任何具体硬件或站点特定的实现,也不应作为规划和配置 vSphere 部署的全面指南,而是一份您可以做出选择的最佳实践配置清单。 我希望您的 VMware 专家实施团队能针对具体站点对这些推荐进行评估。


这里是 InterSystems 数据平台和性能系列的其他帖子的列表。

_注:_本帖更新于 2017 年 1 月 3 日,强调必须为生产数据库实例设置虚拟机内存预留,以保证 Caché 有足够内存可用,并且不会出现内存交换或膨胀而对数据库性能产生负面影响。 更多详细信息,请参见下面的内存部分。

0
0 386
文章 Michael Lei · 五月 12, 2021 17m read

在本帖中,我将展示使用_外部备份_来备份 Caché 的策略,以及与基于快照的解决方案集成的示例。 如今,大多数解决方案部署在基于 VMware 的 Linux 上,因此许多帖子都以展示解决方案如何集成 VMware 快照技术为例。

Caché 备份 - 包括电池?

Caché 安装后即包含 Caché 在线备份,可提供不间断的 Caché 数据库备份。 但随着系统规模的扩大,您应该考虑更高效的备份解决方案。 集成了快照技术的_外部备份_是推荐的系统(包括 Caché 数据库)备份解决方案。

外部备份有特殊注意事项吗?

外部备份的在线文档包含了全部详细信息。 一个关键考虑事项是:

“为确保快照的完整性,Caché 提供了在创建快照时冻结数据库写操作的方法。 在创建快照期间,只冻结对数据库文件的物理写入,从而允许用户进程继续在内存中不间断地执行更新。”

还需要注意的是,虚拟化系统上的部分快照过程会导致正在备份的虚拟机短暂暂停,这段时间通常称为关闭时间。 该时间通常不到一秒,因此不会被用户注意到,也不会影响系统运行,但在某些情况下,关闭时间可能较长。 如果关闭时间长于 Caché 数据库镜像的 QoS 超时时间,那么备份节点将认为主节点出现故障,并将进行故障转移。 在本帖的后面部分,我将说明在需要对镜像 QoS 超时时间进行更改时如何查看关闭时间。

0
0 754
文章 Nicky Zhu · 二月 4, 2021 7m read

上一篇: IRIS中的权限管理

在上一篇文章中,我们介绍了IRIS中的权限控制体系。在本文中我们将以一个常见的实施需求为例介绍如何使用IRIS的权限配置出一个只能使用SQL的用户。

需求的分解

和所有用户需求一样,当用户提出一个需求时,除其语义显式的含义之外,还需分析其是否具有没有明确说明的含义。 对于一个只能使用SQL的用户这样一个需求,即应当结合平台的特征分解成为功能需求: 具有一个合法,可通过用户名和密码使用IRIS的用户 该用户的数据库权限

  • 确认项:可以使用SQL访问所有数据库还是某几个特定的数据库? 该用户的SQL权限
  • 确认项:对于特定的数据库,是否可以执行所有的DDL?
  • 确认项:对于特定的数据库,是否对每一张表都可以执行Select、Update等所有的DML 该用户的程序权限
  • 确认项:用户是否可以通过Portal登录并管理IRIS?

如上所示,一个只能使用SQL的用户,这样一个看似简单的需求,如果需要与用户获得一致的理解并付诸实施,则需要将其分解,对于没有在用户需求中明确约定的部分,应作为待确认项与用户确认。 另外,需要注意的是,IRIS作为一个数据平台,除了提供底层的数据库之外,也提供了Portal等Web应用程序便于使用Sharding、HA、Interoperability等平台功能,通过平台对外提供的Webservice、REST等web接口也受Web应用程序控制。因此,当需要设计权限体系时,不但需要考虑用户使用的数据库相关的权限,也需要考虑是否需要控制Web应用程序的权限。

我们假设需要提供一个严格意义上的只能对某个库的某个Schema下的所有表具有只读权限的用户,即: 具有一个合法,可通过用户名和密码使用IRIS的用户 该用户的数据库权限

  • 该用户只能使用DemoSpace命名空间下的数据库 该用户的SQL权限
  • 该用户不能执行任何DDL
  • 该用户只能对DemoSchema下的所有表执行Select语句 该用户的程序权限
  • 该用户不能登录Portal,不能执行Portal中提供的任何管理功能

对数据库的配置

在IRIS中创建数据库时,默认的行为是引用%DB_%DEFAULT这个资源,并引用%DB_%DEFAULT角色(注意,平台中有一个叫做%DB_%DEFAULT的资源,同时还有一个叫做%DB_%DEFAULT的角色。%DB_%DEFAULT角色通过%DB_%DEFAULT资源获得默认的数据库访问权限)。如果直接使用%DB_%DEFAULT角色或%DB_%DEFAULT资源,都有可能影响到之前以默认配置创建的数据库,因此,在需要细粒度控制访问权限时,往往需要自定义资源和角色实现。

创建资源%DB_DemoDB_Res {#3.1}

资源可在创建数据库的同时创建,也可以在使用默认资源创建数据库之后,再给数据库指派其他资源。本例中,我们在创建命名空间DEMOSPACE的同时创建数据库DEMODB并创建资源。 image

创建角色DemoDB_Read_Role {#3.2}

image 在创建角色之后,即可为其分配资源。根据资源类型的不同,对资源的操作可以有读、写和使用三种权限。对于数据库引用的资源,是读权限和写权限。在本例中,我们需要创建的是只读用户,因此,资源权限分配读权限即可,不用赋写权限。 image

创建用户DemoUser并分配角色

通过Portal创建用户之后,即可给用户分配角色。在本例中,需要给这个用户分配之前创建的DemoDB_Read_Role角色。 image 在经过上述配置之后,用户DemoUser即已拥有对命名空间DEMOSPACE中数据库的访问权限。 image 此时,用户对数据库拥有读权限,但并没有对表执行查询或建表的权限,如果尝试create table,则会得到如下的权限错误信息: image 为继续实验,我们通过Portal执行这SQL语句先创建DemoSchema.Persons这张表 image

为角色DemoDB_Read_Role分配SQL权限

由于用户具有的权限不足,无法执行SQL操作,因此我们需要对该用户的角色赋予对应的权限(或直接给用户赋权,但平台用户较多时,考虑到用户管理的成本,并不推荐这样做)。可以采用如下手段进行SQL的授权

通过Portal授权

在Portal的用户管理和角色管理功能中,均可指定要授予的SQL权限。 SQL特权栏用于对DDL进行数据库级的授权,例如对DEMOSPACE命名空间下的数据库分配建表、修改表、建视图等DDL操作。在本例中,用户不具有这些权限,因此不对该用户对应的角色授予这些权限。 image 在SQL表,SQL视图和SQL过程栏中,则是分别对表、视图和存储过程授予查询、执行等权限。在本例中,用户需要对DemoSchema这个Schema下的表拥有select查询权限,即可通过对SQL表授权进行 image 授权后该角色的SQL表权限如下 image 此时通过SQL工具已可执行查询 image 使用Portal授权时是针对单个的表、视图或存储过程进行。在上例中,我们单独对表DemoSchema.Persons进行了授权,如果我们再建立一张DemoSchema.Employee表,当前的角色和用户并不能自动获得读取其数据的权限。

通过SQL授权

超级管理员或拥有SQL授权权限的用户可以通过SQL的GRANT语句对数据库对象(包括库,函数,表,视图和存储过程等)进行授权,SQL GRANT语句的语法和使用详见GRANT,此处不再赘述。 在上面的例子中我们建立了表DemoSchema.Persons,建表的同时建立的Schema DemoSchema。假如现在我们希望对授权进行简化,使角色DemoDB_Read_Role可以直接获得Schema下所有表的读权限,则可以用如下的SQL:

GRANT SELECT ON SCHEMA DemoSchema to DemoDB_Read_Role

执行成功后再查看DemoDB_Read_Role的SQL权限,会发现: image 即这个角色已经拥有了Schema级的授权,因此,对整个Schema下的所有表都拥有权限。之后在Schema中如果建立了新的表,则这个角色会自动拥有这些表的读权限。

限制用户登录和使用Portal

上例配置的用户可以用于登录IRIS的Portal,但由于没有任何系统功能的权限,不能执行操作。 image IRIS的Web应用程序在创建时默认并不需要额外的资源去访问,这意味着所有合法用户都能登入这个Web应用,但由于支撑应用的后台程序和数据是受到资源的保护的,能登入的用户不一定具有运行程序、访问数据的权限,正如我们建立的用户DemoUser可以登录Portal,但没有功能菜单可用。 如果需要进一步限制用户的行为,禁止其登录,则还需要对应用权限进行控制。 如我们在上一篇文章:IRIS中的权限管理 中所述,Portal是平台提供的Web应用程序,是通过Web应用的权限控制可访问性,因此,需要修改应用的资源要求。 通过菜单: 系统管理 > 安全 > 应用程序 > Web应用程序 可以访问当前系统提供的Web应用列表,其中的/csp/sys即为系统管理门户Portal image 其中必要的资源一栏即为该应用的资源需求,默认为空,即访问该应用不需要特定资源,只要是合法用户即可。我们可以为该应用指定所需资源,例如%Development,即只有具有%Development资源的角色及其对应的用户才能够访问该程序。保存设置后,再尝试以用户DemoUser登录Portal,结果是 image 除非我们为DemoUser引用的角色DemoDB_Read_Role分配资源%Development,该用户都不能登录。 当然,超级管理员由于拥有所有权限,不受这个设置的影响。

总结

通过上述实验,我们创建了一个用户,只能使用SQL连入并查询指定Schema下的表。希望通过这个实验,大家能够掌握IRIS权限管理的基本元素:

  • 用户,角色,权限,资源和许可构成的权限控制体系
  • 数据库、SQL和应用程序都是权限管理的对象

大家在实际项目中可以根据最终用户的实际需要,灵活应用这些概念,构建满足需求的权限配置。

上一篇: IRIS中的权限管理

3
1 448