搜索​​​​

文章
Claire Zheng · 十二月 3, 2021

【视频】InterSystems IRIS医疗版互联互通套件:助力公立医院高效建设互联互通平台

InterSystems面向中国用户推出InterSystems IRIS医疗版互联互通套件,以满足医院信息化建设的标准化要求,促进业务协同,助力公立医院高效建设互联互通平台。
文章
Johnny Wang · 十二月 12, 2021

Ensemble 和 Caché 应该迁移至 InterSystems IRIS 的五个原因

您可能已经听说,我们目前正在为所有正在使用 Caché 和 Ensemble 的客户提供限时免费迁移到我们的下一代数据平台 InterSystems IRIS 的机会。 虽然我们依旧如往常一样全力支持那些正在使用 Caché 数据库和 Ensemble 集成引擎的客户,但我们还是认为 InterSystems IRIS 是未来的关键。它结合了 Caché 和 Ensemble 的所有功能,并添加了大量令人兴奋的强大功能,从机器学习到原生 Python。 这也正是我们为现有客户提供迁移到 InterSystems IRIS 并使用这些新功能的原因。 我们也通过就地迁移支持轻松迁移,这意味着无需数据库转换、分步迁移指南、教程等。 听起来挺有趣对吗? 以下是我针对当前 Caché 和 Ensemble 应迁移到 InterSystems IRIS 的五个主要原因。 1. 根据您的需求量身定制的工具: InterSystems IRIS 本身有标准工具,例如根据 InterSystems IRIS 开发人员量身定制的 Visual Studio Code 编辑器。InterSystems IRIS 允许您在容器中运行应用程序,在 Kubernetes 中工作,并在您选择的云中轻松部署,这对于初学者有非常大的帮助。 2. 面向 SQL 开发人员的机器学习: 我们在 InterSystems IRIS 中嵌入了 IntegratedML 功能,使 SQL 开发人员无需成为数据科学或机器学习工具方面的专家,只需要几个类似 SQL 的命令即可轻松开发机器学习模型。 最重要的是,这些功能使您能够将机器学习模型无缝嵌入到 InterSystems IRIS 应用程序中,从而将它们转换为支持机器学习的智能应用程序。 3. 使用嵌入式 Python 提高生产力: 由于我们实现了 Python 的内置服务器端支持,我们的下一代技术使应用程序开发人员的工作效率更高。所有强大的功能都可以使用 Python 或 ObjectScript 调用,并且您的 Python 代码可以与 ObjectScript 代码无缝交互。 此外,我们为大量开发语言提供广泛的客户端支持,包括 Python、Java、C# 和 Node.js 等等。 4. 为 InterSystems IRIS 准备您的应用程序: 我们已经记录了 Caché 和 Ensemble 以及 InterSystems IRIS 之间的差异。在某些情况下,您可能需要对现有应用程序进行一些调整以满足与 InterSystems IRIS 相关的要求。 或者,您也可以采用与 Caché、Ensemble 和 InterSystems IRIS 兼容的通用代码库。这种方法的好处是您可以立即开始,确保您只有一个代码库需要维护,并在执行迁移时消除任何额外的调整。 这是我们许多大型企业客户经常采用的方法。 5. 易于迁移: 将您现有的 Caché 和 Ensemble 应用程序迁移到 InterSystems IRIS 是快速、简单且经过验证的。 查看我们的“迁移到 InterSystems IRIS”操作指南,您可以从我们的全球响应中心(需要登录 WRC)下载该指南,以确保无缝迁移。 现在是最好的时间 迁移只是旅程的开始,因此为了确保您从强大的 InterSystems IRIS 功能中获得最大收益,我们创建了各种文档、视频和在线学习资源,以帮助您解锁所有这些强大的功能。 现在是迁移到 InterSystems IRIS 的最佳时机。 只需联系您的 InterSystems 销售工程师或销售总监,即可享受此限时优惠。 了解更多信息:InterSystems.com/migrate。 关于作者:Jeff Fried InterSystems 产品管理总监 Jeff Fried 是一位长期从事数据管理的,尤其热衷于帮助人们创建强大的数据驱动应用程序。 在加入 InterSystems 之前,Jeff 曾担任 BA Insight、Empirix 和 Teloquent 的 CTO,并负责 FAST Search and Transfer 和 Microsoft 的产品管理。 他在数据管理、文本分析、企业搜索和互操作性方面拥有丰富的经验。Jeff是该行业的常客和作家;拥有15项专利;并撰写了 50 多篇技术论文并合着了三本技术书籍。 查看原文
文章
Claire Zheng · 十二月 13, 2021

InterSystems IRIS 实用案例: 为什么说是时候迁移 Caché 和 Ensemble 应用了?

我在 InterSystems 工作了 35 年,期间见证了许多客户与我们共同成长。我们热忱地帮助客户取得成功——无论他们衡量成功的标准是什么——而成功的基石就是我们提供的技术。我们的名字现在通常与我们的 InterSystems IRIS 数据平台联系在一起,因为它实际上是我们经过验证的下一代数据管理软件。 在InterSystems IRIS 之前,我们以 Caché 和Ensemble 的强大功能而闻名,全球许多最重要的应用都是在它们的帮助下得以面世的。如果您也是我们的Caché 或 Ensemble 客户,这些平台如今无疑是您组织基础设施的重要组成部分,是一些优秀应用的基础。 然而,正如我们不断发展我们的技术,我们也希望帮助您发展现有技术,并使您能够利用最新的数据平台技术——即从人工智能(AI) 到云计算的各种最新技术。我们认为 InterSystems IRIS 的时代已来临,因此,我们将为所有现有的 Caché 和Ensemble 客户提供限时免费迁移到InterSystems IRIS 数据平台的机会。 我们理解,对业已成为您业务重要组成部分的现有解决方案进行任何更改,都将是一项艰巨的任务,但请相信我们,这一切都是值得的。我们的一面之词也许不足为信,但我们现有的许多客户已经做出了这样的转变,其中包括医疗软件公司Epic。 作为一个使用我们技术超过 40 年的忠实客户,Epic 去年决定迁移到InterSystems IRIS。其系统拥有 250 万并发用户,每秒处理大约 18 亿次数据库访问,因此,能够平稳迁移至关重要。通过我们的共同努力,迁移非常顺利。现在Epic 的客户体验到了更高的性能和更佳的可扩展性。 在此列举部分迁移到InterSystems IRIS 可拥有的优势: 更高的性能、可扩展性和资源效率 通过迁移,您将能够以小博大,用更少的资源做更多的事情,并同时管理多种不同类型的工作负载。为了让您更好地理解这一所指,我们通过速度测试(Speed Test)得出,与其他主流数据管理软件相比,InterSystems IRIS 在测试期间多摄取了 620.9% 的记录,在测试结束时多摄取了 717.3% 的记录。 开发人员生产力 InterSystemsIRIS 具有化繁为简的功能。您的开发人员可以在一个平台内构建和测试所有应用,现在使用嵌入式Python,您可以访问更大的开发资源池,以及数十万个可用的Python 库。从而让开发周期更短,控制和管理更简单。 云部署 作为一个“云中立”的平台,InterSystemsIRIS 不会将您与任何云供应商绑定。因此更加经济、高效和敏捷。 机器学习 我们的IntegratedML 功能为创建机器学习 (ML) 模型提供了一种简单的机制,让您更轻松地将 ML 模型实施到您的实时应用中。 Adaptive Analytics自适应分析 利用新的自适应分析 (Adaptive Analytics) 功能,您的组织无需依赖IT,即可更轻松地探索和分析数据。这意味着业务用户将能够获得他们所需的洞察力,从而做出明智的业务决策,并使您的 IT 团队专注于其他工作。 互操作性和 API 管理能力 通过迁移,您可以实时获得所有数据的统一视图。利用我们的数据平台,您可以连接不同的系统、技术和数据,为您的业务用户创建单一虚拟管理界面,或为您的企业应用创建实时连接。 轻松实现迁移 迁移到InterSystems IRIS 的理由,除了上述这些之外,还有很多。 如果您准备迁移到 InterSystems IRIS(已有数百个 Caché和 Ensemble 客户成功迁移),您可以登录www.intersystems.com/migrate了解更多关于如何迁移到 InterSystems IRIS 上的信息。 原文:Unleashing InterSystems IRIS: Why it’s time to migrate your Caché and Ensemble applications 关于作者 John Paladino负责InterSystems的支持、质量保证、内部计算机操作及客户教育工作。自1984年加入InterSystems以来,他帮助开发了自动化支持跟踪系统和针对所有InterSystems软件产品的客户培训项目,制定并实施了旨在改善响应性、提高客户满意度的服务标准,以及多个国内外团队建设计划。在加入InterSystems之前,他曾在New England Pathology担任了三年的系统工程经理,负责获取、实施和管理各类信息技术。Paladino曾在伍斯特理工学院和马萨诸塞大学卢维尔分校攻读电机工程专业。
公告
Louis Lu · 十二月 16, 2021

InterSystems IRIS 和 IRIS for Health 2021.2 预览版发布

InterSystems IRIS、IRIS for Health 以及 HealthShare Health Connect 的 2021.2 版本的预览版现已发布。 由于这是一个预览版,我们希望在下个通用版本发布之前了解您对这个新版本的体验。请通过开发者社区分享您的反馈,以便我们能够共同打造一个更好的产品。 InterSystems IRIS 数据平台 在 2021.2 版本中使开发、部署和管理用于连接数据、应用孤岛的增强型应用和业务流程变得更加容易。它有许多新的功能,包括: 为应用程序和界面开发人员提供的增强功能: 嵌入式Python 使用 Python 进行的互操作性Production开发 对Visual Studio Code ObjectScript扩展包的更新 增加了新的商业服务和操作,允许用户用最少的自定义编码来设置和运行SQL查询 对数据分析和人工智能的增强: 新的SQL LOAD命令有效地将CSV和JDBC源的数据加载到表中 增强自适应分析功能 对云和云上运营任务的增强: 新的云连接器使得在 InterSystems IRIS 应用程序中访问和使用云服务变得简单。 IKO的改进提高了Kubernetes 资源的可管理性 针对数据库和系统管理员的增强功能: 在线分片再平衡可以在不中断操作的情况下自动在各节点间分配数据 自适应 SQL 引擎使用快速块采样和自动化来收集高级表的统计数据,并利用运行时信息来改进查询规划 通过新的流类型数据和日志文件压缩设置,减少InterSystems IRIS的存储需求 使用系统提供的库,支持 TLS 1.3 和 OpenSSL 1.1.1 新的^TRACE工具报告详细的进程统计数据,如缓存点击率和读取率 关于所有这些功能的更多细节可以在产品文档中找到。 InterSystems IRIS 2021.1文档和发布说明 InterSystems IRIS for Health 2021.1 文档和发布说明 HealthShare Health Connect 2021.1 文档和发布说明 InterSystems IRIS 2021.2是一个持续交付(CD)版本,现在为所有支持的平台提供经典安装包,以及OCI(Open Container Initiative)又称Docker容器格式的容器镜像。 容器镜像可用于符合OCI标准的Linux x86-64和Linux ARM64的运行时引擎,详见支持平台。 每个产品的完整安装包都可以从WRC的产品下载网站获得。使用 "自定义 "安装选项,用户可以选择他们需要的选项,如 InterSystems Studio 和IntegratedML,以合理地缩小安装内容。 安装包和预览密钥可以从WRC的预览下载站点获得。 企业版、社区版和所有相应组件的容器镜像可以通过以下命令从 InterSystems容器注册中心获得。 docker pull containers.intersystems.com/intersystems/iris:2021.2.0.617.0 docker pull containers.intersystems.com/intersystems/iris-ml:2021.2.0.617.0 docker pull containers.intersystems.com/intersystems/irishealth:2021.2.0.617.0 docker pull containers.intersystems.com/intersystems/irishealth-ml:2021.2.0.617.0 关于可用镜像的完整列表,请参考ICR文档。 另外,所有容器镜像的tarball版本可以通过WRC的预览版下载网站获得。 该预览版的构建号是2021.2.0.617.0。
文章
Michael Lei · 十二月 16, 2021

翻译文章--InterSystems IRIS 2021.2+ Python 代码样例 (Embedded嵌入式Python, Native 原生APIs 和 Notebooks)

# Iris-python-template 包含各种Python代码的项目模版,可用于InterSystems IRIS 社区容器版Community Edition with container。 特性 : * Notebooks 记事本 * Embedded Python 内核 * ObjectScript 内核 * Vanilla Python 内核 * Embedded嵌入式 Python * Code example代码样例 * Flask demo * IRIS Python Native 原生APIs * Code example ![Diagram](https://user-images.githubusercontent.com/47849411/145866257-cc88109b-db0b-4fed-8886-fddb4c31947d.png) # 2. 目录 - [1. iris-python-template模版](#1-iris-python-template) - [2. 目录](#2-table-of-contents) - [3. 安装](#3-installation) - [3.1. Docker](#31-docker) - [4. 开始编程](#4-how-to-start-coding) - [4.1. 预设条件Prerequisites](#41-prerequisites) - [4.1.1. 使用 ObjectScript编程](#411-start-coding-in-objectscript) - [4.1.2. 使用嵌入式Embedded Python](#412-start-coding-with-embedded-python) - [4.1.3. 使用记事本Notebooks编程](#413-start-coding-with-notebooks) - [5. Repository的内容](#5-whats-inside-the-repository) - [5.1. Dockerfile](#51-dockerfile) - [5.2. .vscode/settings.json](#52-vscodesettingsjson) - [5.3. .vscode/launch.json](#53-vscodelaunchjson) - [5.4. .vscode/extensions.json](#54-vscodeextensionsjson) - [5.5. src folder](#55-src-folder) - [5.5.1. src/ObjectScript](#551-srcobjectscript) - [5.5.1.1. src/ObjectScript/Embedded/Python.cls](#5511-srcobjectscriptembeddedpythoncls) - [5.5.1.2. src/ObjectScript/Gateway/Python.cls](#5512-srcobjectscriptgatewaypythoncls) - [5.5.2. src/Python](#552-srcpython) - [5.5.2.1. src/Python/embedded/demo.cls](#5521-srcpythonembeddeddemocls) - [5.5.2.2. src/Python/native/demo.cls](#5522-srcpythonnativedemocls) - [5.5.2.3. src/Python/flask](#5523-srcpythonflask) - [5.5.2.3.1. How it works](#55231-how-it-works) - [5.5.2.3.2. Launching the flask server](#55232-launching-the-flask-server) - [5.5.3. src/Notebooks](#553-srcnotebooks) - [5.5.3.1. src/Notebooks/HelloWorldEmbedded.ipynb](#5531-srcnotebookshelloworldembeddedipynb) - [5.5.3.2. src/Notebooks/IrisNative.ipynb](#5532-srcnotebooksirisnativeipynb) - [5.5.3.3. src/Notebooks/ObjectScript.ipynb](#5533-srcnotebooksobjectscriptipynb) # 3. 安装 ## 3.1. Docker 这个 repo已经docker化,你可以clone/git 把repo拉到任何本地目录下 ``` git clone https://github.com/grongierisc/iris-python-template.git ``` 打开该目录下的终端并执行: ``` docker-compose up -d ``` 并为记事本Notebooks打开 http://localhost:8888/tree 或, 在VSCode打开克隆的目录, 启动docker-compose 并通过VSCode 菜单打开URL: # 4.如何开始编程 ## 4.1. 前提 确保安装好 [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) and [Docker desktop](https://www.docker.com/products/docker-desktop) 这个repository 已经可以开始在带ObjectiveScript 插件的VSCode中编写代码. 安装 [VSCode](https://code.visualstudio.com/), [Docker](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker) and [ObjectScript](https://marketplace.visualstudio.com/items?itemName=daimor.vscode-objectscript) 插件并打开文件夹. ### 4.1.1. 用ObjectScript编程 打开 /src/ObjectScript/Embedded/Python.cls 类并开始尝试变更 - 它会在运行IRIS docker container容器中被编译. ### 4.1.2. 用嵌入式Embedded Python编程 最简单的方法是在容器中运行VsCode. 要连上一个 Docker container, 要么从命令板中选择 **Remote-Containers: Attach to Running Container...** (`kbstyle(F1)`) 或者使用在活动Activity条中选择 **Remote Explorer** 并从 **Containers** 视图中选择 **Attach to Container**动作在你希望连接的容器上. ![Containers Explorer screenshot](https://github.com/microsoft/vscode-docs/raw/main/docs/remote/images/containers/containers-attach.png) 然后配置你的python 解析器 /usr/irissys/bin/irispython ### 4.1.3. 用Notebooks编程 打开这个网址 : http://localhost:8888/tree 你可以用三个不同的内核访问三个不同的notebooks * Embedded嵌入式 Python 内核 kernel * ObjectScript 内核kernel * Vanilla python3 内核kernel # 5. Repository的内容 ## 5.1. Dockerfile 一个安装了某些python 依赖 (pip, venv) 和 容器Sudo的dockerfile 以方便使用. 接下来创建开发目录并拷贝在这个 git repository里 启动IRIS 并倒入Titanics csv 文件, 然后激活 **%Service_CallIn** for **Python Shell**. 使用相关的docker-compose.yml 文件来轻松设置另外的参数如 port number 以及你在哪里配置 keys 和host 文件夹. dockerfile 以安装python模块所需要的东西为终止. 最后一部分是关于安装jupyter notebook记事本和它的内核. 使用 .env/ 文件 来调整在docker-compose里面使用到的dockerfile. ## 5.2. .vscode/settings.json 配置文件可以马上用 [VSCode ObjectScript plugin](https://marketplace.visualstudio.com/items?itemName=daimor.vscode-objectscript)开始编程 ## 5.3. .vscode/launch.json 配置文件如果你想用VSCode ObjectScript debug. [Read about all the files in this article](https://community.intersystems.com/post/dockerfile-and-friends-or-how-run-and-collaborate-objectscript-projects-intersystems-iris) ## 5.4. .vscode/extensions.json 如果你想在容器中运行VSCode添加拓展建议的文档. [更多信息请查看这里](https://code.visualstudio.com/docs/remote/containers) ![Archiecture](https://code.visualstudio.com/assets/docs/remote/containers/architecture-containers.png) 这在使用embedded python非常有用. ## 5.5. src folder文件夹 这个文件夹被分成两部分, one 用来保存 ObjectScript 样例,另一个保存Python 代码. ### 5.5.1. src/ObjectScript 显示如何在IRIS中使用python的不同部分代码. #### 5.5.1.1. src/ObjectScript/Embedded/Python.cls 所有的注释(都是用法文写的因为是法国人编的代码。。。). ```objectscript /// Embedded python example Class ObjectScript.Embbeded.Python Extends %SwizzleObject { /// HelloWorld with a parameter ClassMethod HelloWorld(name As %String = "toto") As %Boolean [ Language = python ] { print("Hello",name) return True } /// Description Method compare(modèle, chaine) As %Status [ Language = python ] { import re # compare la chaîne [chaîne] au modèle [modèle] # affichage résultats print(f"\nRésultats({chaine},{modèle})") match = re.match(modèle, chaine) if match: print(match.groups()) else: print(f"La chaîne [{chaine}] ne correspond pas au modèle [{modèle}]") } /// Description Method compareObjectScript(modèle, chaine) As %Status { w !,"Résultats("_chaine_","_modèle_")",! set matcher=##class(%Regex.Matcher).%New(modèle) set matcher.Text=chaine if matcher.Locate() { write matcher.GroupGet(1) } else { w "La chaîne ["_chaine_"] ne correspond pas au modèle ["_modèle_"]" } } /// Description Method DemoPyhtonToPython() As %Status [ Language = python ] { # expression régulières en python # récupérer les différents champs d'une chaîne # le modèle : une suite de chiffres entourée de caractères quelconques # on ne veut récupérer que la suite de chiffres modèle = r"^.*?(\d+).*?$" # on confronte la chaîne au modèle self.compare(modèle, "xyz1234abcd") self.compare(modèle, "12 34") self.compare(modèle, "abcd") } Method DemoPyhtonToObjectScript() As %Status [ Language = python ] { # expression régulières en python # récupérer les différents champs d'une chaîne # le modèle : une suite de chiffres entourée de caractères quelconques # on ne veut récupérer que la suite de chiffres modèle = r"^.*?(\d+).*?$" # on confronte la chaîne au modèle self.compareObjectScript(modèle, "xyz1234abcd") self.compareObjectScript(modèle, "12 34") self.compareObjectScript(modèle, "abcd") } /// Description Method DemoObjectScriptToPython() As %Status { // le modèle - une date au format jj/mm/aa set modèle = "^\s*(\d\d)\/(\d\d)\/(\d\d)\s*$" do ..compare(modèle, "10/05/97") do ..compare(modèle, " 04/04/01 ") do ..compare(modèle, "5/1/01") } } ``` * HelloWorld *用python简单地打个招呼吧 *在标签Tag熵使用OjectScript wrapper打包器 [ Language = python ] * 对比 * 一个用来对比带有regx的字符串的python 函数, 如果匹配就打印,否则如果找不到匹配就不打印 * compareObjectScript * ObjectScript 中跟Python 一样的函数 * DemoPyhtonToPython * 显示如何在ObjectScript中打包的python代码中使用python函数 ```objectscript set demo = ##class(ObjectScript.Embbeded.Python).%New() zw demo.DemoPyhtonToPython() ``` * DemoPyhtonToObjectScript * 显示如何调用ObjecScript 函数的python函数 * DemoObjectScriptToPython * 显示如何调用python函数的ObjectScript函数(好像绕口令,哈哈) #### 5.5.1.2. src/ObjectScript/Gateway/Python.cls 显示如何用gateway功能调用外部python 代码的ObjectiveScritp 类. 在这个栗子中python 代码并不在同一IRIS进程中“被执行”. ```objectscript /// Description Class Gateway.Python { /// Demo of a python gateway to execute python code outside of an iris process. ClassMethod Demo() As %Status { Set sc = $$$OK set pyGate = $system.external.getPythonGateway() d pyGate.addToPath("/irisdev/app/src/Python/gateway/Address.py") set objectBase = ##class(%Net.Remote.Object).%New(pyGate,"Address") set street = objectBase.street zw street Return sc } } ``` ### 5.5.2. src/Python 显示如何在IRIS中使用嵌入式embedded python的不同部分的python 代码. #### 5.5.2.1. src/Python/embedded/demo.cls 所有的注释(都是用法文写的因为是法国人编的代码。。。) ```python import iris person = iris.cls('Titanic.Table.Passenger')._OpenId(1) print(person.__dict__) ``` 首先倒入iris 模块来启用 嵌入式embedded python 能力. 从IRIS模块中打开一个带cls功能的持久化类 class. 请注意所有 `%` 功能被替换为 `_`. 你需要使用shell来运行这个例子 : ```shell /usr/irissys/bin/irispython /opt/irisapp/src/Python/embedded/demo.py ``` #### 5.5.2.2. src/Python/native/demo.cls 显示如何在python代码中使用native api . ```python import irisnative # create database connection and IRIS instance connection = irisnative.createConnection("localhost", 1972, "USER", "superuser", "SYS", sharedmemory = False) myIris = irisnative.createIris(connection) # classMethod passenger = myIris.classMethodObject("Titanic.Table.Passenger","%OpenId",1) print(passenger.get("name")) # global myIris.set("hello","myGlobal") print(myIris.get("myGlobal")) ``` 为了倒入 irisnative, 你需要在python环境中安装 native api wheels. ```shell pip3 install /usr/irissys/dev/python/intersystems_irispython-3.2.0-py3-none-any.whl ``` 然后你可以执行python代码 ```shell /usr/bin/python3 /opt/irisapp/src/Python/native/demo.py ``` 请注意在这个例子中有一个连接是练到IRIS数据库的, 这意味着, **这个代码是在另一个不同的IRIS 线程中被执行**. #### 5.5.2.3. src/Python/flask 一个完整的结合嵌入式embedded python和微框架flask的demo. 你可以测试一下 : ``` GET http://localhost:4040/api/passengers?currPage=1&pageSize=1 ``` ##### 5.5.2.3.1. 它是如何工作的 为了使用嵌入式embedded Python, 我们使用 `irispython` 作为python 解析 并do: ```python import iris ``` 就在文件的最开头. 我们将能够运行如下的方法methods: ![flaskExample](https://raw.githubusercontent.com/thewophile-beep/integrated-ml-demo/main/misc/img/flaskExample.png) 正如你们看到的,为了 GET passenger 的 ID, 我们需要执行查询并使用它的结果集. 我们也可以直接用IRIS的对象: ![flaskObjectExample](https://raw.githubusercontent.com/thewophile-beep/integrated-ml-demo/main/misc/img/flaskObjectExample.png) 在这里, 我们使用SQL 查询来获得所有表里的 ID, 并从`Titanic.Table.Passenger` 类带有 `%OpenId()` 方法method的表里获取每个passenger (请注意由于 `%` 在 Python是非法字符, 我们用下划线 `_` 来代替). 感谢Flask, 我们已经这样完成了所有的方法和路线. ##### 5.5.2.3.2. 启动 flask server 为了启动服务器, 我们用 `gunicorn` 和 `irispython`. 在 docker-compose 文件里, 我们增加了下面的行: ````yaml iris: command: -a "sh /opt/irisapp/server_start.sh" ```` 这会在容器启动后(感谢 `-a` flag), 启动以下脚本: ````bash #!/bin/bash cd ${SRC_PATH}/src/Python/flask ${PYTHON_PATH} -m gunicorn --bind "0.0.0.0:8080" wsgi:app & exit 1 ```` Dockerfile 里的环境参数如下: ````dockerfile ENV PYTHON_PATH=/usr/irissys/bin/irispython ENV SRC_PATH=/opt/irisapp/ ```` ### 5.5.3. src/Notebooks 带有三种不同内核的三个不同的记事本Notebooks : * 一个跑原生API的 Python3 内核 * 一个嵌入式Embedded Python 内核 * 一个 ObjectScript 内核 记事本Notebooks 在这里访问 http://localhost:8888/tree #### 5.5.3.1. src/Notebooks/HelloWorldEmbedded.ipynb 这个是使用IRIS 嵌入式embedded python 内核的记事本notebook . 它展示了打开和保存持久化类和如何执行sql 查询. #### 5.5.3.2. src/Notebooks/IrisNative.ipynb 这个notebook使用 vanilla python 内核. 它展示了如何执行IRIS原生 native apis. #### 5.5.3.3. src/Notebooks/ObjectScript.ipynb 这个notebook 使用 ObjectScript 内核kernel. 它展示了如何运行ObjectSCript代码以及如何在ObjectScript 中使用嵌入式embedded python.
文章
Johnny Wang · 十二月 19, 2021

我们和Oracle、AWS、SAP数据库做了开源速度对比测试

如果您经常阅读我们的博客,您可能记得去年夏天我们进行了 InterSystems 速度测试,该测试由 ESG 验证,旨在测试数据库可以同时摄取和查询的数据量,以及这表现出的具体的影响。从那以后,我们 GitHub 页面的许多访问者一直在根据自己的想法重复验证这个测试 最初,第一次数据库速度测试将 InterSystems IRIS 数据平台与来自许多不同云和数据管理供应商的流行数据库进行了比较。令人兴奋的是,我们现在可以宣布,我们已经将数据库性能测试从 SAP HANA、AWS Aurora MySQL、SAP Sybase ASE 和 AWS RDS SQL Server 扩展到包括 PostgreSQL、MariaDB 和 Oracle Enterprise,所有这些都跑在 Amazon Web Services (AWS )上面。 我们为什么要做这一次开源速度测试? 通过模拟不支持任何特定产品的多工作负载用例,速度测试往往充当了另一种数据库性能测试工具,可以根据测试结果来确定哪个数据库或数据平台最适合业务需求来做出决策。随着许多公司继续进行数字化转型并探索传统技术的替代品,这种能力被证明是至关重要的。 数据库速度测试最大的特点就是您可以轻松地在云端或您的机器上自己体验它,并且由于我们已将测试作为可定制的开源代码发布,它可以扩展到您自己的数据和查询。 许多人将其视为微服务的首选平台,开源速度测试现在也可在 Kubernetes 上运行,以响应该应用程序在 InterSystems 开发人员社区中越来越受欢迎的现状。这意味着除了能够使用 AWS 和 Amazon Elastic Kubernetes Service (EKS) 之外,开发人员还可以了解 InterSystems IRIS 如何在 Kubernetes 集群上执行并利用 InterSystems Kubernetes Operator。 InterSystems IRIS 如何与竞争对手抗衡? 数据库速度测试着眼于同步摄取和查询性能的特定用例,这是医疗、金融、供应链和制造等许多行业实时用例的基本要求。 最新速度测试的结果发现,与 AWS MariaDB 相比,InterSystems IRIS 在测试期间摄取的记录多 620.9%,到最后摄取它们的速度提高了 717.3%。将 InterSystems IRIS 与在公共云上运行的 Sybase ASE 的性能进行比较发现,InterSystems IRIS 在测试期间摄取的记录多 4862.8%,在测试结束时摄取记录的速度提高了 6733.4%。 对于任何希望对其基础架构进行现代化改造以提高实时和接近实时的数据库性能的公司,这些指标都极为重要。此外,对于那些在 SAP Sybase ASE 上运行生产应用程序的公司,InterSystems 对 Transact-SQL 的本机支持允许这些应用程序的无缝迁移,通常不需要重写自定义代码。 不要只相信我们的话,请访问我们的 GitHub 页面,亲自对 InterSystems IRIS 进行测试,或在此处了解有关速度测试如何工作的更多信息。 阅读更多关于 Amir Samary 的 InterSystems IRIS 数据平台速度测试的博客文章 阅读更多关于去年夏天我们进行的 InterSystems 速度测试 关于作者:Amir Samary Amir Samary 已在数据库、互操作性和 InterSystems 技术方面工作了 20 多年。 Amir 致力于为使用 InterSystems 技术为阿根廷、巴西、智利、哥伦比亚、乌拉圭和美国的各个行业构建解决方案的合作伙伴、客户和开发人员提供支持。 这使 Amir 能够理解和试验不同技术、文化和基础设施现实中的模式和架构。 Amir Samary 目前担任解决方案架构经理,他领导 InterSystems 的一组解决方案开发人员。 他主修计算机科学,辅修数学。 查看原文
文章
Johnny Wang · 十二月 19, 2021

洞察新的 InterSystems 速度测试

我经常发现自己与现存客户和潜在客户就他们在访问数据方面的挫败感进行对话。他们最常见的话题是围绕对“速度的需求”展开的——可以理解,这是非常正确的。 随着数据继续以指数速度增长,企业——无论是专注于医疗健康、金融服务、零售、物联网还是制造——不仅需要快速接收数据,还需要在同一实例中对其进行分析,以便能够执行程序化、标准化的行动进而做出关键的业务决策。 那好消息是什么呢?为并发数据提取和查询提供几乎瞬时的性能已成为现实,这也是我们多年来一直在 InterSystems 提供和改进的东西。Gartner 将此功能称为“增强交易”,同时 Forrester 等其他公司将其称为“事务分析“等等。但是不管它被叫做什么,被夸赞到什么程度,实践是真正的检验,空谈不如实证。所以多年来我们一直在不断地衡量并努力提高我们软件在每个版本中的性能。事实上,在我们最新版本的 InterSystems IRIS 中,我们一些业务最复杂的客户的应用程序性能在过去两年中提高了 3 倍(甚至更多)。InterSystems IRIS 现在经过基准测试,可以在数十纳秒内提取数据、在内存中创建记录并将其编入索引,以便在硬盘上进行查询。从某种角度上来说,这一切的发生和结束不过是弹指一挥间。 图为:针对大客户应用程序的 InterSystems IRIS 数据平台的持续性能改进 但我们的许多客户和合作伙伴经常询问我们 InterSystems IRIS 的性能与他们正在使用或考虑的其他产品相比如何。 所以我们设计了一个性能测试,我们试图尽可能公平地衡量它。 对于那些经常访问我们的 GitHub 或 Open Exchange 页面的朋友,您可能已经看过了。 速度测试将 InterSystems IRIS 与来自许多不同云和数据管理供应商的流行数据库进行比较。 它包括在同一个数据库实例中同时处理提取和查询工作负载以模拟多工作负载用例,而这些实例应该具备以下特征: a.) 不特定支持任何产品; b.) 您可以轻松地在云或自己的电脑上运行; c.) 可以扩展到您自己的数据和查询。 而我们也将这个测试作为可定制的开源代码发布。值得注意的是,速度测试旨在测试数据库的特定点——它们可以同时提取和查询多少数据,以及这如何影响性能。 举个例子,想想一家医院。 它需要具有并发分析的高数据提取率才能以高效率来执行管理,同时支持数千名用户同时查询他们个人信息、就诊信息等实时数据。 在某些情况下,所使用的数据库必须具有可扩展性、可靠性和同时为事务和分析查询提供高性能,所以它才可以承受施加在其上的压力,这一点至关重要。 我们设计了速度测试来模拟这种压力并记录数据库如何响应。 我们如何使用速度测试? 在这次的测试中,我们将 InterSystems IRIS 与其他数据平台进行了比较,这些平台均在 AWS 云中运行,并且运行时间均为 1,200 秒(20 分钟)。 选择 AWS 基础设施配置是为了确保比对双方的各个方面都有一一对应的比较。 根据客户的要求,我们目前正在将 InterSystems IRIS 与其他四种流行数据库进行比较:SAP HANA Express 2.0、AWS Aurora (MySQL) 5.6.10a、AWS RDS SQL Server 2017 和 Sybase ASE 16.0 SP03 PL08,公共云版 , 高级版。 在所有情况下,InterSystems IRIS 在提取和并发查询方面都优于其他产品,速度从 59.9% 到 67 倍不等。 为了保证我们在完全透明的背景下进行操作测试,我们在 GitHub 上发布了开源速度测试基准测试套件,并与 Enterprise Strategy Group (ESG) 的验证服务部门签订了合同,这是一家 IT 分析师、研究、验证和战略公司,为全球 IT 社区提供市场情报和可操作的洞察力,以审查和验证测试和结果。 速度测试发现了什么? ESG 证实该测试做到了对各种产品比较的公平性,并且 InterSystems IRIS 显着优于其他领先的传统和内存数据平台,更快地提取更多数据(约 1 亿条记录),同时以更快的速度查询更多数据(超过 20,000 条记录/秒),实现了微秒查询响应时间。 您可以在我们与 ESG 举办的网络研讨会上详细了解结果和速度测试的确切工作原理。 网络研讨会结束后,您甚至会收到完整的 ESG 报告。 必须强调的是,我们未来还会做更多类型的测试,而这次我们使用的标准为所有产品创建了尽可能公平的测试。 但是,我们知道每种情况都不同,因此我们鼓励您前往我们的 GitHub 页面并在 AWS 中亲自测试该套件或在本地机器上使用 Docker,并根据您自己的具体需求,对测试或配置进行更改,以实现更紧密地匹配您的想法。 查看更多最新文章 在此处注册观看于 2020 年 8 月 5 日举办的 ESG 网络研讨会 查看原文 关于作者:Amir Samary Amir Samary 已在数据库、互操作性和 InterSystems 技术方面工作了 20 多年。 Amir 致力于为使用 InterSystems 技术为阿根廷、巴西、智利、哥伦比亚、乌拉圭和美国的各个行业构建解决方案的合作伙伴、客户和开发人员提供支持。 这使 Amir 能够理解和试验不同技术、文化和基础设施现实中的模式和架构。 Amir Samary 目前担任解决方案架构经理,他领导 InterSystems 的一组解决方案开发人员。 他主修计算机科学,辅修数学。
文章
Jingwei Wang · 十二月 22, 2021

使用内置REST API监控InterSystems IRIS

IRIS 2019.4 预览版中发布了/api/monitor服务,以Prometheus格式展示IRIS指标,但没有正式公布。对于任何想要使用IRIS指标作为其监控和警报解决方案的一部分的人来说,这是一个大新闻。该API是新的IRIS 系统警报和监控(SAM)解决方案的一个组成部分,将在IRIS的一个即将到来的版本中发布。 然而,你不必等待SAM开始规划和试用这个API来监控你的IRIS实例。在未来的文章中,我将深入挖掘可用的指标和它们的含义,并提供交互式仪表盘的例子。但首先,让我从一些背景和一些问题和答案开始。 IRIS(和Caché)总是在收集关于它自己和它所运行的平台的几十个指标。一直以来都有多种收集这些指标的方法来监控Caché和IRIS。我发现,很少有安装使用IRIS和Caché内置的解决方案。例如,History Monitor仪表盘作为性能和系统使用指标的历史数据库已经存在很长时间了。然而,没有明显的方法来展现这些指标,并实时监测系统。 IRIS平台的解决方案正在从运行在几个企业内部的实例上的单体应用程序,转向分布式解决方案部署在 "任何地方"。对于许多用例,现有的IRIS监控选项并不适合这些新的模式。InterSystems没有使用陈旧的方法,而是寻找当前流行的、经过验证的开源解决方案进行监控和警报。 普罗米修斯? 普罗米修斯是一个著名的、广泛部署的、技术成熟的开源监控系统。它有各种各样的插件,且能在云环境中很好地工作,对本地部署也同样有用。其插件包括操作系统、网络服务器(如Apache)和许多其他应用程序。普罗米修斯通常与可视化工具一起使用,例如,Grafana。 Grafana? Grafana也是开源的。随着这一系列文章的进行,我将提供常见场景的监控仪表盘的样本模板。你可以把这些样本作为基础,为你所关心的事情设计仪表盘。当你把IRIS的指标与你整个解决方案堆栈的指标结合起来时,真正的力量就来了。从平台组件、操作系统、IRIS,特别是当你从你的应用程序中添加仪器时。 以前没有使用过吗? 用Prometheus和Grafana监控IRIS和Caché并不新鲜。几年来,我一直在使用这些应用程序来监控我的开发和测试系统。如果你在开发者社区搜索 "Prometheus",你会发现其他的帖子(例如,Mikhail Khomenko的一些优秀帖子),显示如何暴露Caché指标供Prometheus使用。 现在版本的区别是,/api/monitor API被包括在版本内,并且默认启用。不需要编码你自己的类来暴露度量。 普罗米修斯入门 这里是对Prometheus和一些术语的快速介绍。我希望你能看到高层次的东西,帮你考虑如何可视化或使用metrics打下一些基础。 普罗米修斯的工作方式是刮取或拉取从HTTP端点(API,如IRIS /api/monitor)的应用程序中暴露的时序数据。Exporters和客户端库存在于许多语言、框架和开源应用程序,例如,网络服务器Apache、操作系统、docker、Kubernetes、数据库以及现在的IRIS。 Exporters被用来检测应用程序和服务,并在一个端点上展示相关的指标,以便进行数据拉取。核心exporters支持网络服务器、数据库等标准组件。许多其他开源exporters可从Prometheus社区获得。 普罗米修斯术语 有几个关键术语是需要了解。 Targets是服务所在的目标,如主机或应用程序或Apache或IRIS等服务或你自己的应用程序。 普罗米修斯通过HTTP对目标进行抓取,收集时间序列数据的指标。 时间序列数据是由应用程序暴露的,例如IRIS或通过exporters。 Exporters可用于你无法控制的东西,如Linux内核指标。 由此产生的时间序列数据被储存在Prometheus服务器的本地数据库中。 时间序列数据库可以使用优化的查询语言(PromQL)进行查询。例如,创建警报或由客户应用程序(如Grafana)在仪表板上显示指标。 然而,对Prometheus数据库的访问--在IRIS上--是透明的,Grafana等应用程序不知道也不关心。 Spoiler Alert:出于安全、扩展、高可用性和其他一些运行效率的考虑,对于新的SAM解决方案,用于Prometheus时间序列数据的数据库是IRIS!这也是为什么我们要把Prometheus数据库的访问权放在IRIS上。然而,对Prometheus数据库的访问在IRIS上是透明的,Grafana等应用程序不知道也不关心。 普罗米修斯数据模型 由API返回的metrics是Prometheus格式的。普罗米修斯使用一种简单的基于文本的指标格式,每行有一个指标,格式是。 <identifier> [ (time n, value n), ....] 衡量标准使用标签(键,值)对。标签是一种强大的作为维度的方式来过滤度量。例如,检测IRIS /api/monitor返回的单一指标:日志的可用空间。 iris_jrn_free_space{id="WIJ",dir=”/fast/wij/"} 401562.83 标识符告诉你该指标是什么。 iris_jrn_free_space 多个标签可以用来修饰指标,用来过滤和查询。在这个例子中,可以看到 WIJ 和存储 WIJ 的目录。 id="WIJ",dir="/fast/wij/" 和值: 401562.83 (MB). What IRIS metrics are available? The preview documentation has a list of metrics. However, be aware there may be changes. You can also simply query the /api/monitor/metrics endpoint and see the list. I use Postman which I will demonstrate in the next community post. 可以用哪些IRIS指标? 预览文档有一个metrics的列表。请注意可能会有变化。你也可以简单地查询/api/monitor/metrics端点并查看该列表。我将在下一篇社区文章中演示使用Postman调用这个端点。 应该监控什么? 当你考虑如何监控你的系统和应用程序时,请牢记这些要点。 对影响用户的关键指标进行检测。 用户并不关心你的一台机器的CPU是否不足。 用户关心的是服务是否缓慢或有错误。 对于你的主要仪表盘来说,重点是直接影响用户的高级指标。 对于你的仪表盘来说,要避免一整面墙的图表。 人类无法同时处理太多的数据。 例如,每个服务拥有一个仪表板。 考虑服务,而不是机器。 一旦你把问题隔离到一个服务上,那么你就可以深入研究,看看是否是一台机器的问题。 参考资料 文档下载:Prometheus 和 Grafana 我在InterSystems 2019年全球峰会上介绍了SAM(包括Prometheus和Grafana)的预发布概述,你可以找到InterSystems学习服务网站的链接。如果链接不起作用,请进入InterSystems学习服务网站并搜索。"系统警报和监控变得简单" 在社区中搜索 "Prometheus "和 "Grafana"。查看原帖 由 @Murray Oldfield 撰写
公告
Johnny Wang · 十二月 23, 2021

快来报名→首届全国医疗健康信息互联互通与智慧医院建设大会

12月25日-26日,首届全国医疗健康信息互联互通与智慧医院建设大会即将拉开帷幕!本次会议以“互联互通——通向智慧医院的桥梁”为主题,将采用线上形式召开。 会议分为两大部分(点击“阅读原文”查看全部日程及报名方式) #12月25日# 开幕式及综合论坛 12月25日,会议包含丰富的主题演讲,以及如下首发与启动仪式: 1. 中文医学术语(含中医)系统:首发面向联盟医疗机构提供中文医学术语(含中医)标准集和知识图谱等系统资源的访问服务,推进术语标准落地和发展,为我国智慧医院建设提供可持续的信息化支撑。 2. 2021年度医疗健康信息化企业影响力榜单:榜单聚焦医疗健康信息化企业,围绕医疗健康信息化软件产品,从企业的市场规模、企业形象、产品服务、技术创新等多个维度,全方位展示企业综合影响力,宣传推广优秀企业品牌,促进医疗信息化市场良性竞争,更好地为医院高质量发展提供信息化服务。 3. 启动“互联互通促进智慧医院建设”征文活动:总结近年来医院信息互联互通建设成效,梳理医院高质量发展路径,探讨医疗健康信息互联互通在促进电子病历、智慧服务、智慧管理“三位一体”智慧医院建设中的作用和成效。 4. 启动全国医疗健康首席数据官能力提升项目:以数据赋能与创新驱动为理念,融合多元知识和技能体系,通过课堂授课、沙龙研讨、案例分析、实地考察等立体化培训形式,提升医疗健康首席数据官实施数据战略、建设数据资源、保障数据安全、管理数据资产、创造数据价值的能力。 #12月26日# 六大平行论坛 12月26日上午 专题论坛——以质量为根本的智慧临床 医院电子病历建设与应用、医院集成平台建设与发展、新一代医院数据中心建设、医学人工智能与临床决策支持; 专题论坛——以需求为导向的智慧服务 医院智慧服务与便民惠民、互联网医院建设与发展/互联网+医疗健康建设与发展、远程医疗建设与应用; 专题论坛——以精细为特征的智慧管理 医院智慧运营管理、物联网创新应用与智慧后勤、公立医院绩效考核; 12月26日下午 专题论坛——以价值为核心的数据治理 医院数据治理建设与应用、大数据平台与数据建模、临床科研信息化建设、医疗健康数据利用与挖掘; 专题论坛——以主动为方向的网络安全 医院信息安全规划与建设、互联网+医疗健康安全建设、医院数据安全建设与管理; 专题论坛——以标准为基础的测评培训 医院信息互联互通测评方案解读、迎评促建筹备注意事项、互联互通测评经验分享与创新实践。InterSystems将在此分论坛中进行技术分享。 #InterSystems 技术分享# 从软件和集成架构的发展看互联互通 演讲人:乔鹏 InterSystems中国技术总监 乔鹏对于数据库、医疗相关标准以及集成平台解决方案,有着深刻的理解和十多年的行业经验,参与主导过百余家医院或者区域平台的信息化建设,同时对CDR、临床决策支持、商业智能、机器学习等数据利用产品和方案有深刻的洞察和丰富的实践经验。 演讲主题:从软件和集成架构的发展看互联互通 目前互联互通的实现架构类型不少,这些架构各自有哪些优点和缺点?是否满足不断发展的互联互通需求?医院在考虑这些架构时要注意哪些事项?有没有最佳实践?此次技术分享将从软件和集成架构的发展历史和趋势分析互联互通,并尝试回答这些问题。 专题论坛“以标准为基础的测评培训” 详细日程 阅读原文(查看大会详细日程 | 报名参会)
文章
Jingwei Wang · 十二月 23, 2021

在大学使用IRIS(一项有趣的任务)

正如你在我的简介中看到的,我在一所大学教书,我想分享我对IRIS(或之前的Caché)教学的看法。 已经有一段时间了,但我还记得在今年早些时候看到YURI MARX GOMES关于 "用InterSystems对象和SQL开发 "一系列课程。他对第1天、第2天和第3天的课程内容进行了简要的描述,并附有讲师Joel Solon的评论。我心想,分享我自己的经验可能会有趣。 在我真正写下我教给学生的东西之前,先简单介绍一下我的经历。 在我毕业拿到硕士学位回到大学工作后,我们系决定更新我们的课程,在普通课程中增加几门新课程。其中一门是 "后关系型数据库"。它是为研究生第一年的学生讲授的。开始时,它包括72小时的讲座和72小时的实践。现在变为秋季学期72小时的讲座和36小时的实践。 由于我是一名新员工,而且是一名年轻有为的员工,我被赋予了讲授这门新学科的职责。我感到惊讶和惊恐是不言而喻的。首先,我根本没有任何教学方面的实践经验。其次,我只有夏天的三个月时间来学习一项对我来说完全陌生的技术并准备课程的讲授。幸运的是,我已经知道了应该教授哪个数据库。这个数据库就是InterSystems Caché。 总之,我或多或少地准备好了,然后我亲爱的学生们的问题开始了。例如,为什么他们必须学习这个数据库,他们在哪里以及如何使用这个数据库,等等。由于当时是2010年,我还很年轻,没有经验,而且这方面的书也不多,我决定直接去找源头,即InterSystems。不知怎的,我最终与Solon先生交谈,他给了我一些很好的提示,还把我介绍给了Evgeny Shvarov。从那时起,一切都变得更加容易和清晰了。 在接下来的几年里,我根据现代的趋势和要求,对我的课程内容做了相当多的改变。在开始的时候,为了展示如何从其他应用程序中利用这个数据库,我使用了Java绑定和.NET管理提供者。后来出现了eXTreme for Java,然后是eXTreme for .NET。ZEN在一两年后被教授和遗忘。现在是RESTful和SOAP服务以及CSP。很多东西都变了,但核心部分几乎是一样的。 既然我们在这里讨论的是讲授硕士水平的课程,我有很多的期望。首先,我希望我的学生知道面向对象的范式,并且能够绘制正确的UML类图。其次,我希望他们了解关系型数据库(包括索引、键等)和SQL。最后,他们应该至少有一个简单的网络开发的知识。 考虑到所有的先决条件,以下是我的教学大纲的大纲: 第1节 后关系型数据库概述:面向对象,对象关系型,以及不同种类的NoSQL数据库,并有模型和例子的描述。多模型数据库和例子。 第2节 架构、结构和管理IRIS的基础知识,作为后关系型DBMS的示例,IRIS管理的基础知识 : 数据库和命名空间一起工作。语法、命令、变量、表达式,以及ObjectScript的一些功能。还有用户代码、异常和事务。 第3节 分层模型 : 列表和多维数组(以及globals)。处理列表和数组的函数。这里是第一个任务--设计一个有4个下标层次的global,并使用至少4个函数与数组一起工作,对数据进行处理。 第4节 对象模型: 类,分层,继承,参数,不同类型的属性(以及如何使用它们),不同类型的方法(使用计算属性的例子,单元测试,使用Populate创建测试数据,用户数据类型),参数(以及如何使用它们)。数据是如何存储的,以及如何设置存储。这里的任务包括设计一个具有不同类型属性的类图(引用、内置对象、关系、集合和流);创建这些类和每个类的几个对象,并在IDE中把所有东西连接起来;创建一个计算属性、一个用户数据类型、单元测试以检查所有约束条件是否工作(如最小或最大长度/值、必需属性、唯一属性等)和生成测试数据。 第5节 关系模型:对象模型和关系模型之间的相关性。嵌入式(简单语句和游标)和动态SQL。类查询(基于SQL和COS)。隐式连接。IDKEY与其附带的方法。这里的任务是将不同类型的SQL查询通过join和参数添加到之前的任务中的类中,创建一个触发器,将唯一的属性改为IDKEY,看看它是如何改变相关的globals的。 第6节。从IRIS外部访问数据 :CSP和关于它的一切。RESTful服务和客户端(处理JSON的类)。SOAP服务和客户端(处理XML的类)。这里的任务是从之前的任务中选择一个类,并创建一个CSP页面,列出所选类的所有对象,并给出编辑、创建和删除对象的功能。然后使用RESTful和SOAP服务做同样的事情(创建方法来返回所有对象、一个特定的对象、更新和删除一个特定的对象)。 课程安排就这样了。然而,现在有了嵌入式Python,我可能会改用它,因为所有关于ObjectScript语法的问题和评论都很扰乱我的神经。 当然,COVID-19和学校的封锁给整个工作方式带来了一些变化。我认为,这些变化是最好的。而且,这真的取决于事情的组织方式。例如,其中一个好处是,现在我可以向学生展示知道我在整个学期所讲的所有内容的有用性。 一般来说,在学期末,他们有一份作业,来检查他们对课程主要部分的知识的掌握。以前,他们在课堂上写作业,我可以监督他们。之后,由于大流行病的发生非常意外,我不得不随机应变,为每个学生提供一套独特的任务。不幸的是,在那个时候,没有现成的软件,所以我决定写一个简单的网络门户来处理这个作业。由于现在已经过去了将近两年,我的简单门户变成了一个RESTful服务,从不同的集合中随机选择问题,将它们分配给学生,并接收答案。所有这些都非常现代化,而且易于使用(和编写) . 现在轮到了我现在的学生来写这个作业(使这个社区里有一些乐趣),你可以参加测试并发送你的答案, 当然,问题将与我的学生的问题不同(而且更容易)。我将使用InterSystems学习实验室的服务器,所以你只有几天的时间来做这件事并检查你的知识。 我在问题中使用的类图如下: 要获得这些问题,只需向以下地址发送一个带有你姓名的GET请求: http://52773-1-e5a0b608.labs.learning.intersystems.com/community/task/%3CYour_name> 你就会得到你的4套问题: 要发送答案,只需向以下地址发送一个POST请求: http://52773-1-e5a0b608.labs.learning.intersystems.com/community/answer/<Your_name> 在body中填写一个JSON: { "Answer1": "answer 1", "Answer2": "answer 2", "Answer3": "answer 3", "Answer4": "answer 4" } 我会在某个时候检查你的答案(因为有这个讨厌的东西叫做时差),你可以通过向以下地址发送GET请求来获得你的结果: http://52773-1-e5a0b608.labs.learning.intersystems.com/controlwork/marks/<Your_name> 如果分数是空的,说明我还没有时间去检查(或者我还没有起床)。分数如下。 0 分意味着答案是完全错误的。 1 分意味着答案或多或少是正确的。 2 分意味着答案是正确的。 第一个发送答案的人将得到我的一个虚拟拥抱(或者一个真正的拥抱,如果我们见面的话) 总之,如果你对我的课程有任何意见或问题,不要犹豫,请在评论区写出来。 查看原帖 由 @Irene.Mikhaylova 撰写
文章
Jingwei Wang · 十二月 29, 2021

ObjectScript数据类型 - 日期

$HOROLOG($H) 表示当前的本地日期和时间,是由两个整数值组成的字符串,这些整数是计数器,是InterSystems IRIS存储格式,不是用户可读的日期和时间。 ddddd,sssss 代码示例: w $H,! 北京时间2021年12月29日15:15:30时,输出结果为: 66107,54930 第一个整数,ddddd,是当前日期,表示为自1840年12月31日以来的天数,其中第1天是1841年1月1日。这个日期到达的最大年年限是9999年12月31日,所以这个整数的最大值是2980013。$HOROLOG不能直接用于表示1840年到9999年范围之外的日期 第二个整数,sssss,是当前的时间,表示为从当天午夜开始的秒数计数。系统将时间字段从0递增到86399秒。当午夜时分达到86399时,系统将时间字段重置为0,并将日期字段增加1。 你可以通过调用Horolog()方法获得相同的当前日期和时间信息,如下所示。 WRITE $SYSTEM.SYS.Horolog() $NOW() $NOW()返回当前进程的本地日期和时间,是InterSystems IRIS存储格式,不是用户可读的日期和时间。 ddddd,sssss.ffffff 代码示例: w $NOW(),! 北京时间2021年12月29日15:15:30时,输出结果为: 66107,54930.383622 $ZTIMESTAMP $ZTIMESTAMP返回UTC日期和时间,是InterSystems IRIS存储格式,不是用户可读的日期和时间。带有小数秒,小数秒以三位数的精度表示(Windows系统),或以六位数的精度表示(UNIX®系统) 代码示例: w $ZTIMESTAMP,! 北京时间2021年12月29日15:15:30时,输出结果为: 66107,26130.383 $NOW() vs $HOROLOG vs $ZTIMESTAMP $HOROLOG包含了InterSystems IRIS存储格式的、经过变体调整的本地日期和时间。本地时区是由$ZTIMEZONE特殊变量的当前值决定的,然后根据本地时间变体进行调整,如夏令时。它只返回整数秒,小数秒会被截断。 $NOW()根据$ZTIMEZONE特殊变量的值确定本地时区。本地时间不会因本地时间变体(如夏令时)而调整。因此,它可能与本地时钟时间不一致。$NOW(tzmins)返回与指定的tzmins时区参数对应的时间和日期。$ZTIMEZONE的值被忽略。 $ZTIMESTAMP返回UTC日期和时间。 日期和时间的转换 $ZDATE 将$HOROLOG的日期部分,即ddddd,转换为用户可读的形式。 ​ WRITE $ZDATE($PIECE($HOROLOG,",",1)) 输出结果为: 12/29/2021 $ZTIME 将$HOROLOG的时间部分,即sssss,转换为用户可读的形式。 $ZDATETIME 将$HOROLOG的日期和时间,同时转换为用户可读的形式。 当使用$HOROLOG时,在这些函数中设置时间值的精度总是返回零作为小数秒。 $ZDATETIME(hdatetime,dformat,tformat,precision,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt,localeopt) $ZDT(hdatetime,dformat,tformat,precision,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt,localeopt) 参数描述请参考参数解析 参数 描述 hdatetime 内部格式的日期和时间值:$HOROLOG]或者 $ZTIMESTAMP dformat 一个整数,指定返回日期值的格式 tformat 一个整数,指定返回时间值的格式 precision 一个整数,指定返回时间值的小数位数(小数秒):只有当hdatetime格式可以包括小数时间值($ZTIMESTAMP格式),并且选择的tformat选项包括秒时,精度才适用。 monthlist 可选的 - 一个字符串或一个变量的名称,用于指定一组月名。 这个字符串必须以一个分界符开始,它的12个条目必须以这个分界符分开。 例如: January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec monthlist仅在dformat为2、5、6、7、9、18或20时有效。 yearopt 一个整数代码,指定以两位数或四位数的数值表示年份。 startwin 滑动窗口的开始,在这个窗口中,日期用两位数的年份表示。 当你使用yearopt为3或5时,你必须提供startwin,startwin对任何其他yearopt值都是无效的。 当yearopt=3时,startwin是一个$HOROLOG日期格式的绝对日期,表示滑动窗口的开始日期。 当yearopt=5时,startwin是一个数值,表示滑动窗口的起始年份,以当前年份之前的年数表示。 endwin 滑动窗口的末端,在这个窗口中,日期用两位数的年份表示。 当yearopt为3或5时,你可以选择提供endwin。endwin在任何其他yearopt值下无效。 当yearopt=3时,endwin是一个$HOROLOG日期格式的绝对日期,表示滑动窗口的结束日期。 当yearopt=5时,endwin是一个数值,表示滑动窗口的结束年限,以当前年限后的年数表示。 当yearopt=5时,滑动窗口总是从startwin中指定的年份的1月1日开始,到endwin中指定的年份的12月31日结束,或者是隐含的结束年份(如果你省略endwin)。 如果省略endwin(或指定为-1),有效的滑动窗口将是100年的长度。 如果你同时提供startwin和endwin,它们指定的滑动窗口的持续时间不能超过100年。 mindate 有效日期范围的下限。指定为$HOROLOG的整数日期计数,例如 0代表1840年12月31日,2/22/2018表示为64701。 支持的mindate值:正的整数,0 或-1 maxdate 有效日期范围的上限,指定为整数$HOROLOG日期计数. 例如,1/1/2100表示为94599 指定一个大于maxdate的hdatetime日期会产生一个VALUE OUT OF RANGE错误。 指定一个大于2980013的maxdate会产生一个VALUE OF RANGE错误。 你可以指定maxdate,也可以不指定mindate。指定一个小于mindate的maxdate会产生一个ILLEGAL VALUE错误。 erropt 当hdatetime无效时要返回的表达式。为这个参数指定一个值可以抑制与无效或超出范围的hdatetime值有关的错误代码。$ZDATETIME不发出错误信息,而是返回erropt。 localeopt 一个布尔标志,指定对dformat、tformat、monthlist、yearopt、mindate和maxdate默认值以及其他日期和时间特征使用哪种语言: localeopt=0:当前语言属性设置决定这些参数默认值。 localeopt=1:ODBC标准语言决定这些参数默认值。 localeopt没有指定:dformat值决定这些参数默认值。 $ZDATETIMEH 将用户可读的日期和时间,转换为$HOROLOG(ddddd,sssss)格式 $ZDATETIMEH(datetime,dformat,tformat,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt,localeopt) $ZDTH(datetime,dformat,tformat,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt,localeopt) 参数描述请参考参数解析 可以使用 "T "或 "t "字母代码来指定当前日期。但是,dformat必须是5、6、7、8、9或15。 WRITE $ZDATETIMEH("T",5) 输出: 66107,0 当前日期前三天: WRITE $ZDATETIMEH("T-3",5) 输出: 66104,0 $ZTIMEZONE : 时区 $ZTIMEZONE是一个从格林威治子午线开始的固定时区偏移量,它不对当地的季节性时间变体进行调整,如夏令时。 代码示例: w $ZTIMEZONE,! 输出结果为: -480
公告
Michael Lei · 十二月 30, 2021

第三方合作伙伴产品展示:InterSystems IRIS的“新”监控工具

亲爱的女士们和先生们,在上个月,我改进了我的工具Caché监视器......但首先:名字 选择Caché Monitor这个名字是为了反映该工具与Caché数据库的紧密结合。我想,在可预见的未来,Intersystems Caché这个既定名称很可能会被InterSystems IRIS数据平台完全取代。因此,重塑品牌的步骤成为必要。为了在未来不那么紧密地与一个产品名称联系在一起,我们选择了一个更加中立的新名字: SQL Data Lens 不管叫什么名字,实现与Intersystems产品最紧密的整合仍然是我们的目标。持续的发展也反映在版本号的延续上。上一个版本是Caché Monitor 2.96,下一个版本是SQL Data Lens 3.0。 但这不仅仅是重新命名,而且还集成了许多新的功能,例如 一个很大的进步是,SQL Data Lens现在是基于Java Runtime Environment 11的,有了它,就可以改善对HiDPI的支持。在操作系统层面上配置了系统规模因素,支持每台显示器的DPI! 但也集成了一个新的现代的Flat 外观和Feel 集成,在亮Light和暗Dark两种模式下。 SQL DataLens带有一个最小化的私有JRE(基于JetBrains JDK 11)。 ...等等 请随时从以下网站下载并测试SQL Data Lens,无需任何注册: https://sqldatalens.com/ 我期待着你的经验,建议和想法,这些都非常欢迎。 谢谢您的关注! Andreas
文章
Jingwei Wang · 十二月 30, 2021

用API描述文件创建REST服务

可以使用内嵌REST API用描述文件生成REST服务 请求消息如下: POST: http://[YourServer]/api/mgmnt/v2/INTEROP/cmAPI Body: API 描述文件,例如下面的Json文件Basic Authorization Username: 用户名 Basic Authorization Password: 密码 Content-Type Header: application/json ** 注意**:调用接口前,需要创建相应命名空间,本示例为INTEROP API 描述文件: { "swagger": "2.0", "info": { "description": "An API for coffee sales using InterSystems IRIS", "version": "1.0.0", "title": "Coffee Maker API", "license": { "name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" } }, "schemes": [ "https" ], "paths": { "/coffeemakers": { "post": { "description": "Returns all coffeemakers\n", "operationId": "QueryAll", "produces": [ "application/json" ], "parameters": [], "responses": { "200": { "description": "Success" }, "500": { "description": "Server error" } } } }, "/newcoffeemaker": { "post": { "description": "Add a new coffeemaker to the store. ID is autogenerated. Other info must be provided in the request body. Name and brand are required fields. Returns new coffeemaker\n", "operationId": "NewMaker", "produces": [ "application/json" ], "parameters": [ { "in": "body", "name": "body", "required": true, "schema": { "$ref": "#/definitions/CoffeeMaker" } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid message body" }, "500": { "description": "Server error" } } } }, "/coffeemaker": { "post": { "description": "Retrieve existing coffeemaker given ID and data. Returns coffeemaker\n", "operationId": "QueryMaker", "produces": [ "application/json" ], "parameters": [ { "name": "id", "in": "query", "description": "CoffeemakerID", "required": true, "type": "integer" }, { "name": "prod", "in": "query", "required": false, "type": "boolean" } ], "responses": { "200": { "description": "Success" }, "404": { "description": "Coffeemaker not found" }, "500": { "description": "Server error" } } }, "put": { "description": "Update existing coffeemaker given ID and data. Returns updated coffeemaker\n", "operationId": "EditMaker", "produces": [ "application/json" ], "parameters": [ { "name": "id", "in": "query", "description": "CoffeemakerID", "required": true, "type": "integer" }, { "in": "body", "name": "body", "description": "coffeemaker info", "required": true, "schema": { "$ref": "#/definitions/CoffeeMaker" } }, { "name": "prod", "in": "query", "required": false, "type": "boolean" } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid message body" }, "404": { "description": "Coffeemaker not found" }, "500": { "description": "Server error" } } }, "delete": { "description": "Delete existing cofffeemaker given ID. Returns deleted coffeemaker\n", "operationId": "RemoveMaker", "produces": [ "application/json" ], "parameters": [ { "name": "id", "in": "query", "description": "CoffeemakerID", "required": true, "type": "integer" }, { "name": "prod", "in": "query", "required": false, "type": "boolean" } ], "responses": { "200": { "description": "Success" }, "404": { "description": "Coffeemaker not found" } } } } }, "definitions": { "CoffeeMaker": { "type": "object", "properties": { "Name": { "type": "string" }, "Brand": { "type": "string" }, "Price": { "type": "number" }, "NumCups": { "type": "integer" }, "Color": { "type": "string" }, "Img": { "type": "string" } } } } } 返回消息: { "msg": "New application cmAPI created" }
文章
Michael Lei · 十二月 30, 2021

翻译--在ECP架构下部署多个IRIS 实例 - 例子

对于那些在某种程度上需要测试ECP的水平可扩展性(计算能力和/或用户和进程的并发性),但又懒得建立环境、配置服务器节点等的人来说,我刚刚在Open Exchange上发布了OPNEx-ECP部署的应用/示例。 这只是一个小项目,可以在GitHub上找到,供所有人使用。基本上,它可以让你在自己的笔记本上建立3个InterSystems IRIS实例作为应用服务器,1个实例作为数据服务器,通过ECP连接。 它还将启动一个LoadBalancer(使用WebGateway),作为一个独立于其他实例的节点,它将是进入你的系统的入口(通过HTTP),它将负责在应用服务器之间分配请求。 只需很少的工作,你就可以添加你的应用代码,并利用该项目在分布式ECP中测试你的应用。应用服务器预装了其他有趣的开源模块(ZPM, WebTerminal, RestForms2 y Restforms2-ui),还有一个小包OPNEx-Model,其中有一些类和一个REST服务作为例子来实现。 详细信息请访问Open Exchange或GitHub。 好了,希望这对你有帮助! 祝大家编程愉快!!
公告
Claire Zheng · 一月 4

InterSystems开发者竞赛:数据集

亲爱的社区开发者们,大家好! 欢迎积极参与新一轮InterSystems开发者竞赛! 随着 InterSystems IRIS 2021.2 预览版 的发布和全新的 LOAD DATA 功能,我们希望将其与最新的竞赛(数据集)结合起来! 🏆 InterSystems 数据集竞赛🏆 竞赛时间: 2021年12月27日-2022年1月16日 奖金总额: $9,450 奖项设置 1.专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出: 🥇 第一名 - $4,000 🥈 第二名 - $2,000 🥉 第三名 - $1,000 🌟 第四名-第十名 - $100 2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用: 🥇 第一名 - $1,000 🥈 第二名 - $500 🥉 第三名 - $250 如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖 谁可以参加? 任何开发者社区的成员均可参加,InterSystems内部员工除外(InterSystems contractor员工可以参加)。还没有账号?现在来建一个! 👥 开发者可以组团 创建一个协作应用程序,组团限定人数为2-5人。 请注意,要在您的README文件中标注您的团队成员——社区用户profile 参赛时间安排 🛠 12月27日 - 1月9日: 应用开发、提交阶段 ✅ 1月10日 - 16日:投票阶段 注意:在整个参赛期间(开发与投票期间),开发者可持续编辑、提升其应用 主题 在我们此前的竞赛中,最常被提及的问题之一是缺乏数据集(Dataset)。每当您有一个关于特定领域或行业的项目idea时,您就需要一个相关数据集。此次竞赛的部分工作就是寻找/准备/加载数据集。 这就是为什么我们要举办此次数据集竞赛!让我们为社区带来一些有用的数据集吧! 我们在寻找什么? 提供将数据集加载到InterSystems IRIS名称空间中的存储库。 理想情况下,这可以使用ZPM包来完成,数据可以在包(package)中,或者包可以有一个方法,将数据从URL加载到IRIS实例中。 无论如何,一旦安装您的项目,应该带来一个类(class)及其与特定主题、主题领域、想法,行业等相关的数据。 项目应该建议如何使用数据——SQL查询、REST API或两者兼用。 数据的可视化是加分项。可视化和API(如果有的话)都可以与其他项目一起交付,但不是强制性的。 我们不会限制您在存储库中存储数据的方式。 例如,这可能是: 导出global(-s) (最好是XML格式而不是GOF格式) 创建数据的SQL脚本 在IRIS中生成数据的ObjectScript (或 java, js, python等) 与外部数据API集成 以下是一些项目示例: Dataset-titanic, Dataset-countries, Posts and tags, Synthea 要求: 类(Class)的命名约定。Class命名以 dc.data.your_name.class格式。例如:如果有一个关于交易数据的数据集,Class名可以是dc.data.finance.transaction或者dc.data.finance.instrument. 对数据源的引用。如果您从Internet上的某个地方获取数据集,并将其调整为InterSystems IRIS格式,请提供源链接。 如果这是您自己的数据,请提供使用许可。 ZPM包应以“dataset-”名称开头,例如:dataset-countries, dataset-titanic. 针对docker, demo, 文章, zpm和视频等,我们照例会提供技术奖励。 为数据集提供许可。 👉 数据集的常用许可类型 (源链接) Spoiler Common licenses in order of most open to most restrictive: PUBLIC DOMAIN MARK - PUBLIC DOMAIN Dedicate your dataset to the public domain: This isn’t technically a license since you are relinquishing all your rights in your dataset by choosing to dedicate your dataset to the public domain. To donate your work to the public domain, you can select “public domain” from the license menu when creating your dataset. OPEN DATA COMMONS PUBLIC DOMAIN DEDICATION AND LICENSE - PDDL This license is one of the Open Data Commons licenses and is like a public domain dedication. It allows you, as a dataset owner, to use a license mechanism to surrender your rights in a dataset when you might not otherwise be able to dedicate your dataset to the public domain under applicable law. CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL CC-BY This license is one of the open Creative Commons licenses and allows users to share and adapt your dataset so long as they give credit to you. COMMUNITY DATA LICENSE AGREEMENT – CDLA PERMISSIVE-2.0 This Community Data License Agreement is similar to permissive open source licenses such as the MIT license. It allows users to use, modify and adapt your dataset and the data within it, and to share it. The CDLA-Permissive-2.0 terms explicitly do not impose any obligations or restrictions on results obtained from users’ computational use of the data. The 2.0 version is significantly shorter, uses plain language to express the grant of permissions and requirements. The only obligation is to "make available the text of this agreement with the shared Data," including the disclaimer of warranties and liability. OPEN DATA COMMONS ATTRIBUTION LICENSE - ODC-BY This license is one of the Open Data Commons licenses and allows users to share and adapt your dataset so long as they give credit to you. CREATIVE COMMONS ATTRIBUTION-SHAREALIKE 4.0 INTERNATIONAL - CC-BY-SA This license is one of the open Creative Commons licenses and allows users to share and adapt your dataset so long as they give credit to you and distribute any additions, transformations or changes to your dataset under this license. We consider this license (a.k.a a viral license) problematic since others may decide not to work with your CC-BY-SA licensed dataset if there is risk that by doing so their work on your dataset will need to be shared under this license when they would rather use another license. COMMUNITY DATA LICENSE AGREEMENT – CDLA-SHARING-1.0 This license is one of the Community Data License Agreement licenses and was designed to embody the principles of "copyleft" in a data license. It allows users to use, modify and adapt your dataset and the data within it, and to share the dataset and data with their changes so long as they do so under the CDLA-Sharing and give credit to you. The CDLA-Sharing terms explicitly do not impose any obligations or restrictions on results obtained from users’ computational use of the data. OPEN DATA COMMONS OPEN DATABASE LICENSE - ODC-ODBL This license is one of the Open Data Commons licenses and allows users to share and adapt your dataset so long as they give credit to you and distribute any additions, transformation or changes to your dataset under this license. We consider this license (a.k.a a viral license) problematic since others may decide not to work with your ODC-ODbL licensed dataset if there is risk that by doing so their work on your dataset will need to be shared under this license when they would rather use another license. CREATIVE COMMONS ATTRIBUTION-NONCOMMERCIAL 4.0 INTERNATIONAL - CC BY-NC This license is one of the more restrictive Creative Commons licenses. Users can share and adapt your dataset if they give credit to you and do not use your dataset for any commercial purposes. CREATIVE COMMONS ATTRIBUTION-NODERIVATIVES 4.0 INTERNATIONAL - CC BY-ND This license is one of the more restrictive Creative Commons licenses. Users can share your dataset if they give credit to you, but they cannot make any additions, transformations or changes to your dataset under this license. CREATIVE COMMONS ATTRIBUTION-NONCOMMERCIAL-SHAREALIKE 4.0 INTERNATIONAL - CC BY-NC-SA This license is one of the most restrictive Creative Commons licenses. Users can share your dataset only if they (1) give credit to you, (2) do not use your dataset for any commercial purposes, and (3) distribute any additions, transformations or changes to your dataset under this license. We consider this license a viral license since users will need to share their work on your dataset under this same license and any users of the adapted dataset would likewise need to share their work on the adapted dataset under this license and so on for any other changes to those modified datasets. CREATIVE COMMONS ATTRIBUTION-NONCOMMERCIAL-NODERIVATIVES 4.0 INTERNATIONAL - CC BY-NC-ND This license is one of the most restrictive Creative Commons licenses. Users can share only your unmodified dataset if they give credit to you and do not share it for commercial purposes. Users cannot make any additions, transformations or changes to your dataset under this license. ADDITIONAL LICENSE COVERAGE OPTIONS If a license is not listed in the data.world menu options, you may select Other and specify the details in the summary of your dataset. NO LICENSE SPECIFIED No one can use, share, distribute, re-post, add to, transform or change your dataset if you have not specified a license. These descriptions are only summaries of these licenses. For the actual text of the licenses, which we strongly encourage you to read, click on the links provided. Summary of common license types: PUBLIC DOMAIN The work has been dedicated to the public domain by waiving all rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. ATTRIBUTION You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. SHARE-ALIKE If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. NON-COMMERCIAL You may not use the material for commercial purposes. DATABASE ONLY License applies to the database only and not its contents or data. NO DERIVATIVES No Derivative Works. You may not alter, transform, or build upon this work. All licenses that begin with CC-BY in the table above refer to version 4.0 of those licenses. 一般要求: 有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。 该应用可以在 IRIS Community Edition or IRIS for Health Community Edition or IRIS Advanced Analytics Community Edition上运行。 该应用需开源并在GitHub上发布。 该应用的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。 资源助力 1. InterSystems IRIS初学者: Build a Server-Side Application with InterSystems IRIS Learning Path for beginners 2. ObjectScript Package Manager (ZPM) 初学者: How to Build, Test and Publish ZPM Package with REST Application for InterSystems IRIS Package First Development Approach with InterSystems IRIS and ZPM 3. 如何将您的APP提交给大赛 如何在InterSystems Open Exchange上发布应用程序 如何把参赛APP提交给大赛 4. 更多 InterSystems IRIS 和 IRIS for Health 2021.2 预览版发布 LOAD DATA 参赛评比 投票规则即将发布,敬请期待! So! 期待您的精彩提交!加入我们的编程马拉松,赢取大奖。 ❗️ 点击此处,查看 官方竞赛条款解读. ❗️