搜索​​​​

清除过滤器
文章
Lilian Huang · 七月 9, 2023

Docker简介

您好!社区的各位老师, 在本文中,我们将学习以下主题: 什么是 Docker? Docker 的一些好处 Docker 是如何工作的? Docker 镜像 Docker容器 Docker 镜像存储库 InterSystems 的 Docker 镜像存储库 Docker安装 Docker 基本命令 使用 docker 运行 IRIS 社区版 Docker 桌面图形用户界面 那么让我们开始吧。 1.什么是Docker? Docker 是一种虚拟化软件,可以让应用程序的开发和部署变得非常简单。 Docker 通过将应用程序打包到所谓的容器中来实现此目的,该容器保留应用程序运行所需的所有内容,包括应用程序的实际代码、其库和依赖项、运行时和环境配置。 Docker 是一个容器化平台,允许开发人员在容器化环境中创建、部署和运行应用程序。 Docker 提供了一种将应用程序及其依赖项打包到单个容器中的方法,该容器可以在任何支持 Docker 的计算机上运行。这使得创建可快速、轻松部署的可移植、轻量级应用程序变得容易。 2. Docker 的一些好处 您可以在下面找到使用 Docker 的一些好处: 可移植性Docker 容器可以在任何支持 Docker 的机器上运行,从而可以轻松地跨不同环境部署应用程序。 一致性通过将应用程序及其依赖项打包到容器中,Docker 可确保应用程序一致运行,无论底层基础设施如何。 可扩展性Docker 通过运行同一容器的多个实例,可以轻松地水平扩展应用程序。 资源效率Docker 容器是轻量级的,需要最少的资源,这使得它们非常适合在云基础设施上运行。 安全性Docker 为运行应用程序提供了安全且隔离的环境,降低了与其他应用程序或主机系统发生冲突的风险。 3.Docker是如何工作的? Docker 为称为容器的应用程序创建虚拟化环境。容器是一个轻量级、独立的可执行包,包含运行应用程序所需的所有内容,包括代码、库和依赖项。容器与主机系统隔离。因此,它们可以在任何支持 Docker 的机器上运行,无论底层操作系统或硬件如何。 容器是从映像创建的,这些映像是定义应用程序及其依赖项的只读模板。这些镜像存储在称为注册表的中央存储库中,例如 Docker Hub 或私有注册表。开发人员可以自己创建自定义映像或使用注册表中的预构建映像。 当容器启动时,它是从映像构建的,并拥有自己的隔离文件系统、网络和进程空间。然后,容器可以运行应用程序,就像在专用服务器上运行一样。 4. Docker 镜像 Docker 映像是一个轻量级、独立的可执行包,它保留执行应用程序所需的所有内容,包括代码、库和依赖项。 Docker 镜像用于构建和运行容器,容器是可用于运行应用程序的隔离环境。 Docker 映像是根据 Dockerfile 构建的,Dockerfile 是一个文本文件,其中包含一组用于构建映像的指令。 Dockerfile 指定基础映像、应用程序代码和依赖项、环境变量以及创建映像所需的其他配置选项。 Docker 镜像存储在注册表中,例如 Docker Hub 或私有注册表。每次从映像创建容器时,它都会在主机上作为单独的进程运行,与其他进程和容器隔离。 Docker 镜像可用于在不同平台上以一致的方式部署应用程序。它们使打包、分发和部署应用程序变得容易,并确保它们在任何地方都以相同的方式运行。 5.Docker容器 镜像的运行实例是一个容器,如上所述,它是一个轻量级的、独立的、可执行的包,其中包含运行应用程序所需的所有内容,包括代码、库和依赖项。 Docker 容器为运行应用程序提供了一个隔离的环境,确保它拥有正确运行所需的所有资源。每个容器在主机上作为单独的进程运行,并拥有自己的文件系统、网络和其他资源。 Docker 容器被设计为可移植且易于部署。它们可以在任何安装了 Docker 的机器上运行,无论底层操作系统或硬件如何。容器为运行应用程序提供了一致的环境,使得在不同环境(例如开发、测试和生产)之间移动应用程序更加舒适。 Docker 容器可以借助 Docker CLI 或 Docker Compose 或 Kubernetes 等 Docker 工具进行管理。它们可以根据需要启动、停止、暂停和重新启动。还可以使用一系列工具和平台对其进行监控和管理。 总体而言,Docker 容器提供了一种灵活且可扩展的方式来打包和部署应用程序,从而使跨不同环境和平台管理和扩展复杂应用程序变得更加简单。 6.Docker 镜像存储库 Docker 托管着最大的 Docker 存储库之一,称为 Docker 中心。 它是一个Docker镜像的存储和分发系统。它为开发人员和组织提供了一个中央存储库来共享和分发其 Docker 映像,从而使使用 Docker 构建、共享和部署应用程序变得更加愉快。 Docker Hub 允许用户和组织存储和管理其 Docker 映像,并提供版本控制、标记和协作等功能。用户可以从 Docker Hub 搜索和下载镜像,也可以将自己的镜像发布到注册中心。 除了公共注册表之外,Docker Hub 还为想要管理自己的 Docker 映像并确保它们只能由授权用户访问的组织提供私有注册表。 7.InterSystems Docker 镜像存储库 通过使用 Docker Hub 搜索功能,我们可以在 Docker hub 上找到 InterSystems 镜像。 8.安装Docker 为了使用 Docker,我们需要在我们的系统上安装它。 Docker提供了各种操作系统的安装包,包括Windows、macOS和Linux。导航到Docker 网站。 我们可以从Docker网站下载安装包,运行安装程序,按照提示完成安装。 安装Docker Desktop后,我们可以使用Docker CLI(命令行界面)来管理Docker镜像、容器、网络和其他资源。 9.Docker基本命令 这里我们将回顾一些 docker CLI 的基本命令。 (在使用下面详述的命令之前,请确保运行 Docker Desktop) 9.1 列出图像(本地)我们可以使用-----100----- 命令列出系统上可用的所有 Docker 镜像。以下是如何使用此命令: docker image ls 如您所见,目前我们本地没有任何图像9.2 从 Docker 存储库中拉取镜像 我们可以使用-----101----- 命令从注册表下载Docker镜像 docker pull <image> 让我们从 docker hub 中提取 intersystemsdc/iris-community 镜像此时我们应该使用list命令来查看本地的图片做得好! iris-community镜像拉取成功 9.3 本地删除镜像我们可以使用-----102-----命令从我们的系统中删除镜像 docker image rm <image name> 9.4 列出所有现有容器(正在运行和未运行)我们可以使用-----103-----命令来列出正在运行的容器 docker ps 如图所示,此时没有容器在运行。 9.5 创建并启动容器我们可以使用-----104-----命令来创建并启动容器 docker run <image id/namge> 让我们从 iris-community 镜像创建并启动容器这里 -----105----- 或 -----106----- 的含义如下:在后台运行命令并将控制权返回给终端。 是时候再次列出正在运行的容器了 docker ps 我们可以看到我们的 iris-community 镜像容器现在正在运行。 9.6 停止特定容器我们可以使用-----107-----命令来停止正在运行的容器 docker stop <container id/name> 9.7 启动特定容器我们可以使用-----108----- 命令来启动Docker中之前停止的容器。 docker start <container id/name> 9.8 重启特定容器 我们可以使用-----109-----命令来停止和启动Docker中正在运行的容器 docker restart <container id/name> 9.9 删除特定容器 我们可以使用-----110-----命令来删除停止的容器 docker rm <container id/name> 9.10 在正在运行的容器内运行命令我们可以使用-----111----- 命令在正在运行的容器内运行命令。在执行管理任务或出于调试目的时,它可以派上用场。 docker exec -it my-container sh -----111----- 命令的一些常见选项是: -----113----- 或 -----114-----: 即使未连接,此命令也会使 STDIN 保持打开状态,从而允许您与容器交互。 -----115----- 或 -----116-----: 此命令为命令分配一个伪 TTY,允许您在容器内使用终端命令。 -----105----- 或 -----118-----: 这在后台运行命令并将控制权返回到终端。 10.使用docker运行IRIS社区版 使用下面列出的命令通过使用 iris-community 映像来运行容器 docker run -d -p 52773:52773 intersystemsdc/iris-community -----111----- 命令的一些常见选项如下: -----105----- :该命令用于以分离模式启动一个新的 Docker 容器,这意味着该容器将在后台运行,我们可以继续使用终端执行其他任务。 -----121-----: 这个命令帮助我们将容器的端口发布到主机,以便可以从Docker网络外部访问容器。 在下图中,您可以看到 IRIS 在 Docker 中运行。 11.Docker 桌面 GUI Docker 桌面还具有 GUI,我们可以在其中以图形方式使用所有上述命令。 概括 Docker 是一个功能强大的工具,允许开发人员和 IT 团队在容器化环境中创建、部署和运行应用程序。通过提供可移植性、一致性、可扩展性、资源效率和安全性,Docker 可以轻松地跨不同环境和基础设施部署应用程序。随着容器化的日益普及,Docker正在成为现代软件开发和部署的重要工具。在接下来的文章中,我们将学习如何使用 Docker 文件(用于构建 Docker 镜像)、Docker compose(一个 YAML 文件,指定应用程序中每个容器的配置选项)和 Docker 卷(一种持久数据存储机制)用于在 Docker 容器和主机之间共享数据。) 感谢您的阅读! 希望IRIS可以模仿Docker对页面做一下暗黑处理👀 啥意思? 浏览器可以设置暗黑呀
文章
Jingwei Wang · 七月 7, 2023

FAQ常见问题系列 - 互联互通套件基础问题

本篇文章主要介绍互联互通套件的一些基础问题: 基于互联互通套件通过互联互通成熟的测评的实施工作量 电子病历共享文档部分:需要客户将业务系统数据灌入CCH套件SQL模型中 服务部分:在平台做消息改造,或者直接做业务系统接口改造 基于互联互通套件通过电子病例五级+互联互通成熟度测评四级需要的最低人员配备和项目总耗时 需要了医院现有业务系统和人员配备,做进一步评估及分析 目标只是通过互联互通成熟度测评需不需要FHIR 不需要,如果只是过测评,只需要互联互通套件基础版就够了 BI相关功能如何实现 可以使用DeepSee,基于Cubes做数据分析及钻取 如何使用Java进行快速开发 可以使用PEX,支持Java开发,但是如果使用Production,推荐使用内置开发语言ObjectScript,学习成本更低,未来开发新特性能力更强大 有没有自带的ETL工具 InterSystems 互联互通套件中没有ETL工具,但是支持所有ETL工具的连接 发送失败消息是否有记录 所有错误消息都能够在平台监控到,且可以进行转发或者重发 有没有按照单个服务流程进行整个业务流程的修改和查看 平台内所有服务都可以按照类别区分,也可以按照服务查看业务流程,但是没有按照单个服务修改整个业务流程的界面
公告
jieliang liu · 七月 5, 2023

[视频] 为什么横向扩展就像团队合作

嗨,开发者, 欣赏InterSystems Bilibili上的新视频: ⏯为什么水平可扩展性就像团队合作 @ 2022 年全球峰会 借助 InterSystems IRIS,您可以跨节点集群分配数据和工作负载、扩展和扩展以及根据需要动态重新平衡。在本次会议中,您将了解有关该技术和我们的一些部署的更多信息。 🗣演讲者:@Benjamin.DeBoe,InterSystems 产品经理 享受它并保持关注! 👍
文章
Shanshan Yu · 七月 5, 2023

基于IntegratedML及Dashboard的数据分析应用

基于InterSystems的集成ML技术和Dashboard,根据上传的CSV文件自动生成相关预测和BI页面。前端和后端在Vue和Iris中完成,使用户可以通过简单的操作生成所需的数据预测和分析页面,并根据这些页面做出决策。 # ZPM 安装 zpm:USER>install IntegratedMLandDashboardSample # 部署流程 使用或创建新的命名空间 将代码导入相应的命名空间 在终端中执行: Do # # class (customizemashinelerningandaanalysis. Util. Tool) Deployment() 前端是Vue文件夹下的dist文件夹。在使用它之前,请打开dist-static config.js并修改后端服务器要使用的IP和端口。然后您需要将iframeUrl的测试修改为“Analysis”+后端使用的命名空间,例如“AnalysisUSER” 然后启动前端文件(可以将dist文件夹放在tomcat中开始使用) 访问地址为: Ip: port/dist # 如何使用 以women.csv为例 1.选择要上传的CSV文件,CSV文件名和数据列名不得包含空格等其他符号 2.填写需要预测的列名,如“高度” 3.单击“确定”按钮,等待界面返回 成功返回后,刷新当前页面,然后单击“模型列表”下的辅助选项。新生成的项目将出现 ① 填写完其他值后,点击②确定,在③处生成预测值 ④ 嵌入式虹膜仪表板显示以前导入CSV的一些数据 # 其他 CSV 展示 # 单元测试 Set ^UnitTestRoot=your modules dir +"\src"+namespace+"\integratedmlanddashboardsample\src" (such C:\InterSystems\HealthConnect\mgr\.modules\USER\integratedmlanddashboardsample\src) do ##class(%UnitTest.Manager).RunTest("UnitTests") #注意 由于页面上嵌入了iris的仪表板,如果您遇到无法正确显示的跨域问题,可以访问iris查看图表 非常棒的应用!那csv中的数据能不能是非数字呢?
文章
Michael Lei · 七月 4, 2023

小实验--生成式AI和 FHIR 结合

这是个实验项目,使用OpenAI API与FHIR资源和Python相结合来回答医疗行业的用户提问。 ## 项目想法 生成式人工智能,如[OpenAI上提供的LLM模型](https://platform.openai.com/docs/models), 已被证明在理解和回答高层次问题方面具有显著能力。他们使用大量的数据来训练他们的模型,因此他们可以回答复杂的问题。 他们甚至可以[使用编程语言,根据提示创建代码](https://platform.openai.com/examples?category=code) --我不得不承认,让我的工作自动化的想法让我感到有些焦虑。但到目前为止,似乎这是人们必须要习惯的事情,不管你喜不喜欢。所以我决定做一些尝试。 这个项目的主要想法是在我读到[这篇文章](https://the-decoder.com/chatgpt-programs-ar-app-using-only-natural-language-chatarkit/)关于[ChatARKit项目](https://github.com/trzy/ChatARKit)时产生的。这个项目使用OpenAI的API来解释语音命令,在智能手机摄像头的实时视频中渲染3D物体--非常酷的项目。而且,这似乎是一个热门话题,因为我发现最近有一篇[论文](https://dl.acm.org/doi/pdf/10.1145/3581791.3597296)遵循类似的想法。 让我最担心的是使用ChatGPT对AR进行**编程。由于有一个开放的github repo,我搜索了一下,发现[作者是如何使用ChatGPT生成代码的](https://github.com/trzy/ChatARKit/blob/master/iOS/ChatARKit/ChatARKit/Engine/ChatGPT.swift)。这种技术被称为*提示工程Prompt Engineering*--[这是维基百科关于它的文章](https://en.wikipedia.org/wiki/Prompt_engineering),或者这两个更实用的参考资料: [1](https://microsoft.github.io/prompt-engineering/)和[2](https://learn.microsoft.com/en-us/azure/cognitive-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions)。 所以我想--为什么不结合FHIR和Python试试类似的东西?以下是我的想法: ![Project basic idea](https://community.intersystems.com/sites/default/files/inline/images/project-diagram-01_4.png) 其主要构成是: - 一个提示工程模块,将命令人工智能模型使用FHIR和Python - 一个OpenAI API集成模块 - 一个Python解释器,用于执行生成的代码 - 一个FHIR服务器,回答人工智能模型生成的查询 基本思路是使用[OpenAI Completion API](https://platform.openai.com/docs/api-reference/completions),要求人工智能将问题分解为一堆FHIR查询。然后,人工智能模型创建一个Python脚本来处理InterSystems IRIS for Health中FHIR服务器返回的FHIR资源。 如果这个简单的设计是有效的,用户就可以得到应用的分析模型尚未支持的问题的答案。此外,这些由人工智能模型回答的问题可以被分析,以发现对用户需求的新见解。 这种设计的另一个好处是,你不需要用外部的API暴露你的数据和模型。例如,你可以问关于病人的问题,而不需要将病人数据或你的数据库模式发送到人工智能服务器上。由于人工智能模型使用公共可用的功能--FHIR和Python,你也不需要发布内部数据。. 但是,这种设计也导致了一些问题,比如: - 如何引导人工智能根据用户需求使用FHIR和Python? - 人工智能模型产生的答案是否正确?是否有可能对它们有信心? - 如何处理运行外部生成的Python代码的安全问题? 因此,为了尝试解决一下这些问题,我对最初的设计做了一些阐述,得到了这个: ![Project refined idea](https://community.intersystems.com/sites/default/files/inline/images/project-diagram-02_2.png) 我在项目里增加了一些新的元素: - 一个代码分析器来扫描安全问题 - 一个日志记录器,用于记录重要事件,以便进行进一步分析 - 一个用于进一步整合的API REST 因此,这个项目旨在验证这个概念,它可以支持实验来收集信息,以尝试回答这些问题。 在接下来的章节中,你会发现如何安装该项目并试用它。 然后,你会看到我在尝试回答上述问题时得到的一些结果和一些结论。 希望你觉得它有用。我们也非常欢迎你为这个项目做出贡献! ## 项目尝试 要试一试,请打开IRIS终端,运行以下内容: ```objectscript ZN "USER" Do ##class(fhirgenerativeai.FHIRGenerativeAIService).RunInTerminal("") ``` 例如,以下问题被用来测试该项目: 1. 数据集里有多少病人? 2. 病人的平均年龄是多少? 3. 给我所有的条件(代码和名称),去除重复的。将结果以表格的形式呈现出来。(不要使用pandas) 4. 有多少病人患有病毒性鼻窦炎(代码444814009)? 5. 病毒性鼻窦炎(代码444814009)在患者群体中的流行率是多少?对于多次出现相同病情的患者,考虑只打一次就可以计算出来。 6. 在病毒性鼻窦炎(代码444814009)患者中,性别组的分布是怎样的? 你可以找到这些问题的输出例子[这里](https://github.com/jrpereirajr/iris-fhir-generative-ai/blob/master/misc/tests-accuacy)。 > 请注意,如果你在你的系统上尝试,结果可能会有所不同,即使你使用相同的提示。这是由于LLM模型的随机性。 这些问题是由ChatGPT提出的。他们要求这些问题是以复杂程度不断提高的方式来创建的。第3个问题是个例外,它是由作者提出的。 ## 提示工程Prompt Engineering 项目使用的提示Prompt可以在方法`GetSystemTemplate()`中找到[这里](https://github.com/jrpereirajr/iris-fhir-generative-ai/blob/master/src/fhirgenerativeai/PromptService.cls)。 它遵循提示工程的指南,首先你给人工智能模型分配一个角色,然后输入一堆限制条件和指令。它的每个部分的意图都有注释,所以你可以理解它是如何工作的。 请注意一种接口定义的使用,当模型被指示假设一个已经定义好的名为`CallFHIR()`的函数与FHIR交互,而不是自己声明一些东西。这是受ChatARKit项目的启发,作者在该项目中定义了一整套函数,为使用AR库抽象出复杂的行为。 在这里,我使用这个技术来避免直接创建代码进行HTTP调用的模式。 这里一个有趣的发现是关于强迫人工智能模型以XML格式返回其响应。由于打算返回的是Python代码,我在XML中使用了CDATA块,将其对称化。 尽管在提示中明确指出响应格式必须是XML格式,但在以XML格式发送用户提示后,AI模型就开始遵循这个指令。你可以在上面提到的同一个类中的`FormatUserPrompt()`方法中看到这一点。 ## 代码分析器 该模块使用[bandit库](https://bandit.readthedocs.io/en/latest/)来扫描安全问题。 这个库生成Python程序的AST,并针对常见的安全问题对其进行测试。你可以在这些链接中找到被扫描的问题种类: - [测试插件](https://bandit.readthedocs.io/en/latest/plugins/index.html#complete-test-plugin-listing) - [调用黑名单](https://bandit.readthedocs.io/en/latest/blacklists/blacklist_calls.html) - [导入黑名单](https://bandit.readthedocs.io/en/latest/blacklists/blacklist_imports.html) 由人工智能模型返回的每一个Python代码都会针对这些安全问题进行扫描。如果发现有问题,就会取消执行并记录错误。 ## 日志记录器 所有的事件都被记录下来,以便在表[LogTable](https://github.com/jrpereirajr/iris-fhir-generative-ai/blob/master/src/fhirgenerativeai/LogTable.cls)中作进一步分析。 每个回答问题的运行都有一个会话ID。你可以在表中的'SessionID'列中找到它,并通过将它传递给方法`RunInTerminal("", )`来获得所有事件。例如: ```objectscript Do ##class(fhirgenerativeai.FHIRGenerativeAIService).RunInTerminal("", "asdfghjk12345678") ``` 你也可以用这个SQL来检查所有的日志事件: ```sql SELECT * FROM fhirgenerativeai.LogTable order by id desc ``` ## 测试 我执行了一些测试以获得信息来衡量人工智能模型的性能。 每个测试执行了15次,它们的输出被存储在[this](https://github.com/jrpereirajr/iris-fhir-generative-ai/blob/master/misc/tests-accuacy)和[this](https://github.com/jrpereirajr/iris-fhir-generative-ai/blob/master/misc/tests-security)的目录下。 > 请注意,如果你在你的系统上尝试,结果可能会有所不同,即使你使用相同的提示。这是由于LLM模型的随机性。 ### 准确率 对于问题#1的测试,有`14个结果6`和`1个错误`。正确值是`6'。所以它是`100%`正确的,但有`6%`的执行失败。 验证#1结果的SQL语句: ```sql SELECT count(*) FROM HSFHIR_X0001_S.Patient ``` 对于第2题的测试,有`3个结果52`,`6个结果52.5`和`6个错误`。正确的数值--考虑到有小数点的年龄,是`52.5'。所以我认为这两个值都是正确的,因为这一点差异可能是由于提示不明确造成的--它没有提到任何关于允许或不允许带小数的年龄。因此,它是`100%`正确的,但执行失败的是`40%`。 验证#2结果的SQL语句: ```sql SELECT birthdate, DATEDIFF(yy,birthdate,current_date), avg(DATEDIFF(yy,birthdate,current_date)) FROM HSFHIR_X0001_S.Patient ``` 在第3个问题的测试中,有 "3个错误 "和 "12个有23个不同元素的表格"。表的值不在相同的位置和格式中,但我还是认为这因为错误格式的提示造成的。因此,它是`100%`正确的,但有`20%`的执行失败。 验证#3结果的SQL语句: ```sql SELECT code, count(*) FROM HSFHIR_X0001_S.Condition group by code ``` 对于第4题的测试,有`2个错误`,`12个结果7`和`1个结果4`。正确值是`4'。所以它是`12%`正确的,有执行失败的`13%`。 验证#4结果的SQL语句: ```sql SELECT p.Key patient, count(c._id) qtde_conditions, list(c.code) conditions FROM HSFHIR_X0001_S.Patient p join HSFHIR_X0001_S.Condition c on c.patient = p.key where code like '%444814009%' group by p.Key ``` 对于5号问题的测试,有`11个错误`,`3个结果为4`,`1个结果为0.6`。正确值是`4'。所以它的正确率是`75%`,执行失败率是`73%`。 用来验证#5结果的SQL与#4所用的相同。 对于6号问题的测试,有`12个错误`和`3个结果{女性:4,男性:2,其他: 0}`. 正确的值是`{女性:3,男性:1,其他: 0}`. 所以它是`0%`正确的,有执行失败的`80%`。 验证#6结果的SQL语句: ```sql SELECT p.gender, count(distinct p._id) qty_patients, list(p.key) patients, list(c.code) conditions FROM HSFHIR_X0001_S.Patient p join HSFHIR_X0001_S.Condition c on c.patient = p.key where code like '%444814009%' group by p.gender ``` 总结一下测试结果: | 测试编号 # |准确率 | 执行失败率 | |--------|----------|-------------------| | 1 | 100% | 6% | | 2 | 100% | 40% | | 3 | 100% | 20% | | 4 | 12% | 13% | | 5 | 75 % | 73% | | 6 | 0% | 80% | ### 安全性 你可以在[测试目录](https://github.com/jrpereirajr/iris-fhir-generative-ai/blob/master/misc/tests-accuacy)中检查生成的代码,似乎人工智能模型没有产生安全问题--这也是代码分析器模块发现的结果,没有安全问题。 因此,为了测试代码分析器是否能够检测到安全问题,[执行Python代码的模块](https://github.com/jrpereirajr/iris-fhir-generative-ai/blob/master/src/fhirgenerativeai/PythonService.cls)有一个名为 "代码注入 "的属性,可以注入恶意代码,以便进行测试。 因此,为安全测试注入了以下代码: 1. 安全测试 #1: ```python print(eval("os.chmod('%s', 0o777)" % 'test.txt')) ``` 这段代码试图访问SO文件系统并改变一个文件的权限。这显然是一个不符合项目意图的代码,所以它必须被阻止。 2. 安全测试 #2: ```python import requests url = "https://postman-echo.com/get" params = {"arg": "value"} response = requests.get(url, params=params) data = response.json() print(data) ``` 这段代码试图向一个外部地址发出HTTP请求--本例中是Postman API。如果这段代码被执行,本地信息就会被攻击者轻易地获取。 正如你在[安全测试目录](https://github.com/jrpereirajr/iris-fhir-generative-ai/blob/master/misc/tests-security)中所看到的,代码分析器成功地发现了安全问题。 ## 结论 就准确性而言,人工智能模型在低复杂度的问题上得到了正确的结果,但随着问题复杂度的增加而开始失败。同样的情况也出现在执行失败上。因此,问题越复杂,人工智能模型产生的代码就越多,无法执行,导致错误结果的概率就越大。 这意味着需要对提示做出一些努力。例如,在[问题#6的代码](https://github.com/jrpereirajr/iris-fhir-generative-ai/blob/master/misc/tests-accuacy/6/1688265739062.txt)中,错误在于只询问病人而忽略了条件。这种分析对于指导提示的改变是必要的。 总的来说,人工智能模型在这次测试中的表现表明,在能够回答分析性问题之前,它仍然需要更多的改进。 这是由于人工智能模型的随机性质。我的意思是,在上面提到的ChatARKit项目中,如果人工智能模型渲染的三维物体并不完全在要求的地方,但接近它,可能用户不会介意。不幸的是,同样的情况并不适用于分析性问题,答案需要精确。 但是,我并不是说人工智能模型不能执行这样的任务。我要说的是,这个项目中使用的设计需要改进。 需要注意的是,这个项目没有使用更先进的技术来使用生成器AI,像[Langchain](https://python.langchain.com/docs/get_started/introduction.html)和[AutoGPT](https://autogpt.net/autogpt-installation-and-features/)。这里使用了一种更 "纯粹 "的方法,但使用这种更复杂的工具可能会导致更好的结果。 关于安全性,代码分析器发现了所有测试的安全问题。 然而,这并不意味着由人工智能模型生成的代码是100%安全的。此外,允许执行外部生成的Python代码可能绝对是危险的。你甚至不能百分之百地确定提供Python代码的系统实际上是OpenAI的API服务器...... 避免安全问题的一个更好的方法可能是尝试其他不如Python强大的语言,或者尝试创建你自己的 "语言 "并将其呈现给AI模型,就像在[这个非常简单的例子](https://platform.openai.com/examples/default-text-to-command)。 最后,重要的是要注意,像代码性能这样的方面在这个项目中没有涉及,可能也会成为未来工作的一个好主题。 所以,我希望大家能发现这个项目的有趣和有用。 > **免责声明:这是一个实验性项目。它将向OpenAI API发送数据,并在你的系统上执行由AI生成的代码。所以,不要在生产系统上使用它。还要注意,由于OpenAI的API调用是收费的。使用它的风险由你自己承担。它不是一个可用于生产的项目。** Hi! Just here to a quick update: now we published a video about this project. Enjoy it: 😊
文章
Tete Zhang · 七月 4, 2023

FAQ常见问题系列--InterSystems 产品的基础故障排除

本文讨论了在使用或维护InterSystems产品中遇到问题时,试图确定问题时可能用到的思路和工具。 一般故障排除 确定问题发生的地点和时间 问题是什么时候开始的?多久发生一次? 问题首先出现在哪里? 问题在什么条件下会被触发? 审查日志中的警告、错误和警报 以下日志可能包含有关该问题的有用信息。可以尝试在以下日志中寻找问题开始前后的警告或报错。 检查 messages.log(IRIS)或者 cconsole.log(Caché and Ensemble) 通过文件系统(<install-dir>/mgr/messages.log)访问messages.log文件,或者 通过管理门户(系统操作>系统日志>Messages Log)访问文件内容 检查production事件日志 (详细信息请参见文档) 查看应用程序错误日志 (详细信息请参见文档) 查看Web Gateway/CSP Gateway日志 查看网络服务器(IIS/Apache)日志 检查实例是否可以访问足够的存储空间 检查文件系统剩余空间(推荐设置操作系统层级的存储空间低告警) 检查数据库剩余空间 通过管理门户(系统操作>数据库>Freespace View)查看数据库文件内剩余空间百分比 检查Journal日志空间 检查CPU活动 服务器的负载是否在正常范围内? 监控CPU利用率 CPU使用率是稳定的,还是有尖峰?这些尖峰是活动的增加还是减少? CPU是否经常在I/O上等待? 在安装了sysstat的系统上,可以通过iostat监控此项。 审查开放的事务和锁 是否存在开放事务的问题? 评估锁表大小。 查看messages log中是否有锁表满 LOCK TABLE FULL 的警告 检查所有进程是否按预期运行 监控总进程。 进程数是否有显著增加? 是否有任何进程被卡住,或在循环? 进程使用的内存量是否正常? 进入管理门户 > 系统操作 > 进程 > 进程ID的详细信息,以获得关于具体进程的信息。 检查镜像监视器和镜像状态监视器 监控镜像的状态。同步日志工作是否已经完成? 进入管理门户>系统操作>镜像监视器,查看镜像状态。 记录镜像成员之间的差异。 不是所有在主机上的更改都会通过镜像机制同步到备机。系统管理员需要对主备机上无法自动同步的更改进行手动更改,以及对主备机上不同步的部分做完整的记录。 确保InterSystems IRIS的许可证是有效的 监控许可证使用情况。 进入管理门户>系统操作>软件许可使用情况查看。 监控许可证的过期时间。 联系WRC 你所掌握的关于问题的任何信息都可以帮助WRC确定导致该问题的原因。以下是你可以执行的步骤,以向WRC提供尽可能多的信息。 总结问题 这个问题可以重现吗?它是否持续发生? 最近系统上是否有任何变化,可能导致了这个问题? 记录InterSystems IRIS和其操作系统的版本信息 进入管理门户>关于页面,获取完整的版本信息。 运行监控工具 运行系统诊断报告 IRIS: do ^SystemCheck Caché/Ensemble: do ^Buttons 如果系统处于挂起状态,运行IRISHung IRISHung脚本是一个操作系统工具,用于在InterSystems IRIS实例挂起时收集系统的数据。 该脚本位于install-dir\bin目录下,在Microsoft Windows 系统上名称为IRISHung.cmd,在UNIX®/Linux 系统上名称为 IRISHung.sh。 IRISHung脚本应以管理员权限运行。 如果有性能问题,运行系统性能报告 IRIS: do ^SystemPerformance Caché/Ensemble: do ^pButtons 与WRC取得联系 访问InterSystems全球响应中心(WRC)网站 (wrc.intersystems.com),或 邮件发送问题描述至support@intersystems.com,或 拨打中国区技术支持中心热线电话 400-601-9890
文章
Michael Lei · 七月 3, 2023

基于LangChain的IRIS ChatGPT – 释放大语言模型LLM的全部潜力

你好社区在本文中,我将介绍我的应用程序irisChatGPT ,它是基于LangChain Framework构建的。首先,让我们对框架进行一个简单的概述。 全世界都在谈论ChatGPT以及大型语言模型 (LLM) 如何变得如此强大,并且表现超出预期,提供类似人类的对话。这只是将其应用于每个企业和每个领域的开始! 剩下的最重要的问题是如何将这种能力应用于适合企业需求的特定领域数据和特定场景响应行为。 LangChain为这个问题提供了结构化且有效的答案! LangChain 技术可以帮助实现法学硕士的巨大潜力,通过围绕法学硕士提供抽象层并使法学硕士的使用变得简单有效,从而构建令人惊叹的应用程序。 LangChain 是一个框架,可以快速轻松地开发使用大型语言模型(例如 GPT-3)的应用程序。 然而,该框架引入了额外的可能性,例如,轻松使用外部数据源(例如维基百科)来放大模型提供的功能。我相信你们都可能尝试过使用 Chat-GPT,并发现它无法回答特定日期之后发生的事件。在这种情况下,在维基百科上搜索可以帮助 GPT 回答更多问题。 LangChain结构 该框架分为六个模块,每个模块允许您管理与法学硕士互动的不同方面。让我们看看这些模块是什么。 模型:允许您实例化和使用三种不同类型的语言模型,它们是: 大型语言模型 (LLM):这些能够理解自然语言的基础机器学习模型。它们接受输入中的字符串并在输出中生成字符串。 聊天模型:由 LLM 支持的模型,但专门用于与用户聊天。您可以在这里阅读更多内容。 文本嵌入模型:这些模型用于将文本数据投影到几何空间中。这些模型将文本作为输入并返回数字列表,即文本的嵌入。 提示:提示是我们如何与模型交互以尝试从中获取输出。现在知道如何编写有效的提示至关重要。这个框架模块可以让我们更好的管理提示。例如,通过创建我们可以重用的模板。 索引:最好的模型通常是与一些文本数据相结合的模型,以便为模型添加上下文或解释某些内容。这个模块可以帮助我们做到这一点。 链:很多时候,要解决任务,对 LLM 的单个 API 调用是不够的。该模块允许集成其他工具。例如,一个调用可以是一个组合链,其目的是从维基百科获取信息,然后将此信息作为模型的输入。该模块允许连接多个工具以解决复杂的任务。 内存:该模块允许我们在模型调用之间创建持久状态。能够使用记住过去说过的话的模型肯定会改善我们的应用程序。 代理:代理是一个法学硕士,它做出决定,采取行动,观察其所做的事情,并以这种方式继续,直到完成其任务。该模块提供了一组可以使用的代理。 现在让我们更详细地了解一下如何利用不同的模块来实现代码。 Langchain工作原理 步骤1 :用户向LangChain发送问题第2步 :LangChain将此问题发送至Embedding Model步骤3:嵌入模型将文本转换为向量,文本以向量形式存储在数据库中并返回给LangChain步骤4 :LangChain将这些向量发送到向量数据库(有多个向量数据库,我们在我们的应用程序中使用chroma)步骤5:向量数据库返回前 K 个近似最近邻 ( KNN ) 向量第6步:LangChain 将问题与KNN向量一起发送到大型语言模型 (LLM) (我们在应用程序中使用 OpenAI)步骤7:LLM向Langchain返回答案步骤8:Langchain将答案返回给用户 关于申请 irisChatGPT应用程序利用围绕大型语言模型 (LLM) 构建的最热门 Python 框架LangChain的功能。 LangChain 是一个框架,可以快速轻松地开发使用大型语言模型的应用程序。应用程序是在系统间嵌入式 Python功能的帮助下使用 objectscript 构建的。它还包含Streamlit Web 应用程序,这是一个开源 Python 应用程序框架,用于为数据科学和机器学习创建漂亮的 Web 应用程序。 特征 以下是应用程序功能列表以及相关屏幕截图 内置Intersystems ObjectScript 参考ChatGPT 内置InterSystems 大奖赛 2023 ChatGPT 使用 SQLDatabaseChain 回答有关缓存数据库的问题 创建您自己的 chatGPT 模型并与其聊天 OpenAI 聊天GPT 维基百科搜索 使用DuckDuckGo(DDG)通用搜索引擎在互联网上搜索 使用Python REPL LangChain功能生成Python代码 Streamlit Web 应用程序在线演示 谢谢
公告
Claire Zheng · 七月 3, 2023

投票时间:InterSystems 2023年度编程大奖赛

Hi 开发者们! 投票时间到了!在InterSystems 2023年度编程大奖赛中为最佳应用程序投票: 🔥投票选出最佳应用程序🔥 如何投票?详细信息如下。 专家提名奖(Experts Nomination)- InterSystems 经验丰富的评审团将选出最佳应用程序。欢迎我们的专家: ⭐️ @Alexander Koblov, 支持专家⭐️ @Guillaume Rongier, 销售工程师⭐️ @Eduard Lebedyuk, 高级云工程师⭐️ @Steve Pisani, 高级解决方案架构师⭐️ @Timothy Leavitt, 开发经理⭐️ @Evgeny Shvarov, 开发者生态系统经理⭐️ @Dean Andrews, 开发者关系主管⭐️ @Alex Woodhead, 高级系统开发人员⭐️ @Andreas Dieckow , 首席产品经理⭐️ @Aya Heshmat, 产品专家⭐️ @Benjamin De Boe, 产品经理⭐️ @Bob Kuszewski, 产品经理⭐️ @Carmen Logue , 产品经理⭐️ @Jeffrey Fried, 产品管理总监⭐️ @Luca Ravazzolo, 产品经理⭐️ @Raj Singh, 产品经理⭐️ @Patrick Jamieson, 产品经理⭐️ @Stefan Wittmann, 产品经理⭐️ @Steven LeBlanc, 产品专家⭐️ @Thomas Dyar,产品专家⭐️ @Daniel Franco, 互操作性产品管理 社区提名奖(Community Nomination 对于每个用户,从以下两个类别中选择较高的分数: 满足条件 排名 第一名 第二名 第三名 在开发者社区上发布了文章并将应用程序上传到 Open Exchange (OEX) 9 6 3 在开发者社区上发布了至少 1 篇文章或已将 1 个应用上传到 OEX 6 4 2 对开发者社区做出任何有效贡献(发表评论/问题等) 3 2 1 等级 排名 第一名 第二名 第三名 Global Masters 的 VIP 级别 或 InterSystems 产品经理 15 10 5 Global Masters 的 Ambassador级别 12 8 4 Global Masters的Expert 级别或开发者社区版主 9 6 3 Global Masters的Specialist级别 6 4 2 Global Masters的Advocate级别,或 InterSystems员工 3 2 1 Blind vote! 每个应用获得的投票数将对所有人不可见。我们会每天在这个帖子(英文原贴)的评论区发布一次排行榜。 在竞赛页面上,项目按如下顺序排列:提交申请的时间越早,在列表中的排名就越靠前。 PS 不要忘记订阅这篇文章(请订阅英文原贴),点击铃铛图标(如下所示),即可收到最新评论。 在参与投票前,您需要: 登录 Open Exchange – 使用开发者社区账号即可。 在社区内进行有效贡献 ——回答问题、发帖、在Open Exchange发布新应用等等都可以,然后你的账号才可以参与投票。点击查看本帖 ,了解如何更好地成为有效的社区贡献者! 投票期间,如果你改了主意,可以随时将票改投给其他项目。 来支持您喜欢的应用吧! 注意:在投票期间,参赛者可以继续修复bug,提升应用,所以投票者不要错过最新发布的版本哦~ 很高兴参加了这次比赛,以下是我的应用链接 https://openexchange.intersystems.com/package/IntegratedMLandDashboardSample 给您点赞!欢迎写个中文介绍文章。 IntegratedML-IRIS-PlatformEntryPrediction平台服务器入场配置预测应用,以java连接iris并使用其IntegratedML技术完成对医院门诊量,服务数,消息数,消息保存时间等数据分析,可以在医院集成平台入场前,对医院入场平台所需的服务器配置进行预测,为客户提供便利。请大家为比赛投上一票文章地址:https://community.intersystems.com/post/integratedml-iris-platformentryprediction投票链接:https://openexchange.intersystems.com/contest/32#350 欢迎写个中文介绍,谢谢! 好的,这个是中文介绍文章链接,欢迎大家阅读。文章链接:https://cn.community.intersystems.com/post/%E5%B9%B3%E5%8F%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%85%A5%E5%9C%BA%E9%85%8D%E7%BD%AE%E9%A2%84%E6%B5%8B%E5%BA%94%E7%94%A8 谢谢您的回复,以下是中文介绍链接 https://cn.community.intersystems.com/post/%E5%9F%BA%E4%BA%8Eintegratedml%E5%8F%8Adashboard%E7%9A%84%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%BA%94%E7%94%A8 最新投票结果出来啦,一起来看看: Hi Developers! Here are the results at the moment: Community Nomination, Top 5 iris-fhir-generative-ai by @José Roberto Pereira irisChatGPT by @Muhammad Waseem oex-mapping by @Robert Cemper IntegratedMLandDashboardSample by @Shanshan Yu oex-vscode-snippets-template by @John Murray ➡️ Voting is here. Expert Nomination, Top 5 irisChatGPT by @Muhammad Waseem iris-fhir-generative-ai by @José Roberto Pereira oex-vscode-snippets-template by @John Murray ZProfile by @Dmitry Maslennikov DevBox by @Sean Connelly ➡️ Voting is here. Don't forget to vote for your favorite app! 来看最新的投票结果! Hi, Dev's! And here're the results at the moment: Community Nomination, Top 5 iris-fhir-generative-ai by @José Roberto Pereira IntegratedMLandDashboardSample by @Shanshan Yu IntegratedML-IRIS-PlatformEntryPrediction by @Zhang Fatong irisChatGPT by @Muhammad Waseem oex-mapping by @Robert Cemper ➡️ Voting is here. Expert Nomination, Top 5 iris-fhir-generative-ai by @José Roberto Pereira irisChatGPT by @Muhammad Waseem IRIS FHIR Transcribe Summarize Export by @Ikram Shah oex-mapping by @Robert Cemper FHIR - AI and OpenAPI Chain by @Ikram Shah ➡️ Voting is here.
公告
Claire Zheng · 七月 2, 2023

创意社区新闻摘要#7 | InterSystems Ideas News#7

Hi 开发者社区的成员们,大家好! 欢迎关注我们第7期 InterSystems Ideas News! 本期分享如下: ​​​​✓ 创意门户已收集了 200 多个创意 ✓ 由社区成员实施的创意 ✓ 在 Grand Prix 23 竞赛中实施一个创意并获得技术奖励 ✓ 最近发布的创意 自创意门户推出以来,已发布 204 个创意。目前已实施25项, 待实施17项。 @Kurro Lopez 被添加到名人堂,因为@Kurro Lopez 实施了由@Yuval Golan 提交的创意: IRIS classes for OpenAI API 👏感谢您实现了这个创意👏 参加InterSystems Grand Prix 23 年度编程大赛开发者可以通过实施 Community Opportunity 中的创意而获得 4 个技术奖励积分。 最新发布的创意 1.在下拉选择中添加“类型过滤”功能。 作者:@VICTORIA CASTILLO2.让数据转换 UI 自动猜测消息类型,作者:@Evgeny Shvarov3.让每个操作和服务公开其消息类 作者: @Evgeny Shvarov4.为医生定制可视化,作者:@Ikram Shah5. 引入 InterSystems IRIS 对 Apache Airflow 的支持 作者:@Evgeny Shvarov6.为 pdf.co 引入互操作性模块(适配器、操作),作者:@Evgeny Shvarov7.在 Visual Trace 中添加参数以查看 XML 或 JSON 中的消息内容 作者:@Sylvain Guilbaud8.每个数据库的特定缓存缓冲区,作者:@Yaron Munz 9.在开发环境中的 Production Export 提供模块部署支持,作者:@Alex Woodhead10.系统默认设置中的环境变量支持 作者:@Alex Woodhead11.设置应该是镜像的一部分 作者:@Scott Roth 12.为社区用户起昵称 作者:@Minoru Horita 13. 使所有生产项目设置在默认设置中可用 作者:@Stefan Cronje14.从管理门户选项添加到文档网页的超链接,作者:@Luis Angel Pérez Ramos 15.从 InterSystems 开发者社区删除草稿 作者:@yurimarx Marx 👏感谢您提交的新创意👏 不要忘记投票、评论和订阅这些创意来跟踪、影响其进展。 请继续关注下一期 InterSystems Ideas 新闻公告!
文章
Weiwei Gu · 六月 28, 2023

InterSystems IRIS 数据平台的以太坊适配器

1. 区块链 当我写这篇文章时,比特币的价格还不到其成功顶峰时期的五分之一。因此,当我开始向某人讲述我的区块链经历时,我听到的第一句话是毫不掩饰的怀疑:“现在谁需要这个区块链东西?” 没错,区块链炒作已经减弱。然而,它所基于的技术将继续存在并将继续在特定领域使用。互联网通常提供大量描述这些技术的一般用法的材料 (例如在Medium和福布斯上)。 众所周知,区块链是一个分布式注册表,即分布在多个节点之间的数据库,每个节点都存储注册表的完整副本。区块链的主要特征是记录(交易)形成块,块形成块链。区块链仅支持追加操作。这意味着几乎不可能对已经保存在区块链中的交易进行更改。 网上有无数的区块链教程(如果您从未听说过区块链,可以从这个简单的视频开始)。 当区块链蓬勃发展时,人们多次呼吁在任何地方使用该技术。然而,可能需要区块链的项目/任务有某些明显的特征。 首先,必须有很多玩家/用户编写大量数据,这些数据必须一致且可信。 那么,就不应该存在每个人都信任的第三方。 必须有一个公共数据验证的机制。如果满足所有这些标准,考虑使用区块链可能是个好主意。 任何行业都可以找到这样的任务。 www.101blockchains.com项目汇总了有关潜在和现有区块链项目的信息,以及在各个行业中使用区块链技术的细微差别。 例如,区块链可用于医疗保健领域的以下任务: 用于安全地远程管理患者记录; 通过整个供应链中不可更改的交易来打击假药; 通过排除欺诈和篡改数据的可能性来提高临床试验的监控和有效性。 企业部门通常使用一种特殊类型的区块链,称为私有许可区块链。此类网络具有一组特殊的节点来验证交易。 然而,在开发第一个 InterSystems IRIS 区块链适配器时,我们选择了以太坊,这是一种属于无许可区块链类别的区块链 - 一个没有单一控制中心的开放平台。该决定是基于该区块链引擎的受欢迎程度以及具有大量工具和库的足够成熟的基础设施。请注意,您还可以使用以太坊工具创建私有区块链。 2. 适配器 让我们实际上回到适配器。 InterSystems IRIS 中的适配器(就像 Ensemble 中一样)是 InterSystems IRIS 类的类或包,允许您与外部系统交互。 InterSystems IRIS 适配器分为入站(当外部系统是交互发起者时,用于从外部系统接收数据)和出站(当 InterSystems IRIS 是交互发起者时,用于与外部系统一起工作)。 IRIS 以太坊适配器是出站适配器,与大多数其他 InterSystems IRIS 适配器略有不同。该适配器还包括一个小型 NodeJS 模块。其架构如图 1 所示。 图1。适配器的 NodeJS 模块使用现有的 NodeJS 库来与以太坊配合使用。 该适配器允许您执行以下操作: 将智能合约部署到以太坊(我们计划撰写另一篇文章,涵盖智能合约、开发工具和示例)。 调用智能合约方法:改变区块链状态的方法和不改变区块链状态的方法 保存交易(将资金从一个钱包转移到另一个钱包) 调用额外的方法来获取区块链的状态 记录所有请求(由 NodeJS 模块完成,方便调试) 该适配器附带 OpenExchange 上的源代码。 3. 一个简单的例子 该适配器附带一个“Hello world”示例。 要开始使用以太坊(并运行此示例),您将需要以下内容: 选择您要使用的网络。 Ropsten 等测试网络通常用于开发目的 在此网络中创建一个钱包并向其存款 安装本地以太坊客户端(例如 Geth)或获取与云提供商(例如 Infura)合作的密钥 配置业务操作时需要设置以下内容(图2): NodeJS模块工作的服务器和端口(默认使用3000端口) 提供商设置(在本例中访问 Infura) 访问凭据(指定您的钱包号码作为用户名,指定您的私钥作为密码。InterSystems IRIS 将访问凭据存储在一个单独的数据库中,您必须为其启用加密) 图 2. 为了使用智能合约,您需要在文件系统中创建(为您将使用的每个智能合约)一个文件夹,并在其中放置两个文件:*abi.txt*字节码.txt 这些文件应包含智能合约的 ABI 及其字节码。智能合约的 ABI 是 JSON 格式的接口的正式描述。 ABI 和字节码是在编译智能合约时创建的。 仅部署合约时需要字节码。 您可以使用 InterSystems IRIS 互操作性测试服务来测试业务运营。 图 3 说明了如何使用测试服务部署智能合约。调用此业务操作的结果是包含交易哈希的消息。 图 3. 您可以使用 ropsten.etherscan.io (https://etherscan.io/) 浏览器找到此交易并获取已部署的智能合约的地址。 要使用适配器调用智能合约的方法,您需要在生产配置中填写以下字段:ContractFolder 和 ContractAddress。 智能合约的执行代码非常简单: -----0----- 将智能合约的地址和 ABI 传递给适配器的 GetContract 方法,以创建一个智能合约对象,然后将其用于调用方法。在这种情况下,必须在智能合约中定义返回字符串的 hello() 方法。 在这个例子中,hello()方法不会改变区块链状态,因此可以同步调用。然而,改变区块链状态的方法的执行时间可能相当长(因为必须等待交易被验证)。 要调用此类方法,请使用 InterSystems IRIS 提供的延迟响应机制。适配器必须提交延迟响应令牌,当交易获得批准时,NodeJS 模块会将其执行结果传递给 InterSystems IRIS。为此,您需要配置一个 Web 应用程序并向生产添加额外的业务服务来处理收到的响应。 以下是调用改变区块链状态的方法的代码: -----1----- 在这种情况下,在调用智能合约的 setName() 方法之前,您需要指定许多参数,包括延迟响应令牌。 在下一篇文章中,我们将详细介绍智能合约,并提供使用 InterSystems IRIS 以太坊适配器解决实际问题的示例。
公告
Claire Zheng · 六月 19, 2023

InterSystems 2023年度编程大奖赛(Grand Prix)技术奖励细则

大家好! InterSystems Grand Prix 2023 结合了 InterSystems IRIS 数据平台的所有主要功能! 因此,我们邀请您使用以下功能并收集额外的技术奖励,以帮助您赢得奖品! 如下: LLM AI 或 LangChain 用法:Chat GPT、Bard 等 - 6 InterSystems FHIR SQL Builder- 5 InterSystems FHIR-3 IntegratedML - 4 Native API - 3 嵌入式 Python - 4 互操作性 - 3 生产扩展(PEX)- 2 自适应分析 (AtScale) Cube的使用 - 3 Tableau、PowerBI、Logi 的使用 - 3 InterSystems IRIS BI - 3 列索引使用 - 1 Docker 容器使用 - 2 ZPM 包部署 - 2 在线演示 - 2 单元测试 - 2 实施 InterSystems Community Idea中的创意 - 4 在开发者社区发布的第一篇文章 - 2 在开发者社区发布的第二篇文章 - 1 代码质量通过 - 1 第一次贡献 - 3 YouTube 上的视频 - 3 LLM AI 或 LangChain 使用:Chat GPT、Bard 等 - 6 分 为构建使用LangChain库或大型语言模型(LLM)(例如 ChatGPT、Bard 和其他 AI 引擎(例如PaLM 、 LLaMA等)的解决方案会为您赢得 6 个专家奖励积分。 AutoGPT 的使用也很重要。 在 Open Exchange 中已经可以找到一些示例: iris-openai、 chatGPT telegram bot 。 这是一篇带有 langchain 使用示例的文章。 InterSystems FHIR SQL Builder - 5 分 InterSystems FHIR SQL Builder是 InterSystems IRIS for Health 的一项功能,有助于将 FHIR 资源映射到 SQL 表并通过应用程序中的 SQL 查询使用它。 在文档中了解更多信息。 在线课程。这是一个关于 Open Exchange 的例子。 注意:如果您实施 InterSystems FHIR SQL Builder,则不包括 InterSystems FHIR 即服务和 IRIS For Health 的 3 分奖励。 InterSystems FHIR 即服务和 IRIS For Health - 3 分 我们邀请所有开发人员使用InterSystems FHIR Server (FHIRaaS)构建新的或测试现有的应用程序。登录门户,进行部署并开始在您的编程竞赛应用程序中使用 AWS 上的 InterSystems FHIR 服务器。 您还可以使用 InterSystems IRIS for Health docker 版本构建 FHIR 应用程序。您可以使用IRIS-FHIR-Template ,它在 docker 镜像构建期间准备 FHIR 服务器。可以在此处找到 FHIR API 4.0.1 的文档。在InterSystems IRIS for Health 文档中了解更多信息。 IntegratedML 使用 - 4 分 1. 在您的 AI/ML 解决方案中使用 InterSystems IntegratedML。这是使用它的模板。 InterSystems IntegratedML 模板 2、数据导入工具: 数据导入向导 CSVGEN - CSV 导入工具 CSVGEN-UI - CSVGEN 的网络用户界面 3.文档: 使用 IntegratedML 4.在线课程和视频: 在 InterSystems IRIS 中学习 IntegratedML 为机器学习准备数据 使用机器学习工具包进行预测建模 IntegratedML 资源指南 IntegratedML 入门 使用 IntegratedML 和数据机器人进行机器学习 InterSystems Native API 使用 - 3 分 如果您使用任何 InterSystems Native API 选项( .NET 、 Java 、 Python 、 Node.js )访问全栈应用程序中的数据,您将获得此奖励。在这里了解更多。 嵌入式 Python - 4 分 在您的应用程序中使用嵌入式 Python并获得 4 分加分。您至少需要 InterSystems IRIS 2021.2。 注意:如果您还使用 Native API for Python,则只有 Embedded Python 才算奖励。 与 BPL 或 DTL 的互操作性生产 - 3 分 IRIS Interoperability Productions的主要特征之一是业务流程,可以用 BPL(业务流程语言)来描述。 在文档中了解有关业务流程的更多信息。 业务规则是一种无代码/低代码方法,用于管理互操作性生产的处理逻辑。在 InterSystems IRIS 中,您可以创建一个业务规则,您可以通过可视化或通过 ObjectScript 表示创建该规则。 如果您在互操作性产品中创建和使用业务流程或业务规则,您可以获得业务流程/业务规则奖励。 业务规则示例 在文档中了解有关业务规则的更多信息 生产扩展 (PEX) 使用 - 2 分 PEX 是互操作性产品的 Python、Java 或 .NET 扩展。 如果您在互操作性产品中将 PEX 与 Python、JAVA 或 .NET 结合使用,您将获得此奖励。 PEX演示。 在文档中了解更多关于 PEX 的信息。 InterSystems IRIS 具有Python Pex模块,该模块提供了从 Python 开发 InterSystems 互操作性产品的选项。使用它并为您的应用程序收集 3 个额外积分。也可以使用 Guillaume Ronguier 介绍的替代 python.pex 轮。 您还可以使用Python 互操作性,它是@Guillaume Rongier 提供的 Python 上 InterSystems IRIS 的 PEX 插件模块 这提供了在清晰的 python 中开发 InterSystems IRIS 互操作性解决方案的机会。 将 PEX 用于 Hugging Face 的文章,示例。 自适应分析 (AtScale) 多维数据集使用 - 3 分InterSystems Adaptive Analytics 提供创建和使用AtScale多维数据集的选项,用于分析解决方案。 您可以使用我们为比赛设置的 AtScale 服务器(可以在Discord 频道中收集 URL 和凭据)来使用多维数据集或创建一个新的多维数据集并通过 JDBC 连接到您的 IRIS 服务器。 使用 AtScale 的分析解决方案的可视化层可以使用 Tableau、PowerBI、Excel 或 Logi 制作。 文档, AtScale 文档 训练 Tableau、PowerBI、Logi 的使用 - 3 分 为您使用 Tableau、PowerBI 或 Logi 制作的可视化收集 3 分 - 每个 3 分。 可以通过直接 IRIS BI 服务器或通过与 AtScale 的连接进行可视化。 Logi 代表 InterSystems Reports 解决方案可用 - 您可以在InterSystems WRC 上下载作曲家。可以在discord channel中收集临时许可证。 文档 训练 InterSystems IRIS BI - 3 分 InterSystems IRIS 商业智能是 IRIS 的一项功能,它使您可以选择针对 IRIS 中的持久数据创建 BI 立方体和枢轴,然后使用交互式仪表板将此信息传递给用户。 了解更多 基本的iris-analytics-template包含 IRIS BI 多维数据集、数据透视表和仪表板的示例。 以下是 IRIS BI 解决方案的一组示例: 样品商务智能 Covid19分析 分析这个 权力的游戏分析 透视订阅 错误全局分析 使用 Docker 和 VSCode 创建 InterSystems IRIS BI 解决方案(视频) 可视化选择的自由:InterSystems BI (视频) InterSystems BI(DeepSee) 概述(在线课程) InterSystems BI(DeepSee) 分析器基础知识(在线课程) 列索引使用 - 1 分 列索引功能可以显着提高分析查询的性能。在您的解决方案的持久数据模型中使用列式索引并获得 1 个额外奖励积分。了解有关列索引的更多信息。 Docker 容器使用 - 2 分 如果应用程序使用在 docker 容器中运行的 InterSystems IRIS,则该应用程序将获得“Docker 容器”奖励。这是最简单的模板。 ZPM 包部署- 2 分 如果您做到以下措施,可以收集到奖励。为全栈应用程序构建和发布 ZPM(InterSystems Package Manager)包,这样它就可以通过以下方式部署: zpm "install your-multi-model-solution" 安装了 ZPM 客户端的 IRIS 上的命令。 ZPM客户端。文档。 项目的在线演示 - 2 分如果您将项目作为在线演示提供给云,则可额外获得 2 个奖励积分。您可以自己完成,也可以使用此模板- 这是一个 示例。这是有关如何使用它的视频。 单元测试 - 2 分 对 InterSystems IRIS 代码进行单元测试的应用程序将获得奖励。 在文档和开发人员社区中了解有关 ObjectScript 单元测试的更多信息。 实施Developer Opportunity Idea的创新理念 - 4 分 实施来自InterSystems Community Ideas 门户的处于具有“社区机会(Community Opportunity)”状态的任何创新想法。这将为您提供 4 个额外的奖励积分。 关于开发者社区的文章 - 2 分 在 Developer Community 上发表一篇文章,描述您的项目的功能,并为该文章收集 2 分。 开发者社区第二篇文章 - 1分 您可以为第二篇文章或有关申请的翻译获得额外的奖励积分。第 3 次及以上不会带来更多积分,但您仍将赢得所有关注。 代码质量通过且零错误 - 1 分 包括用于代码静态控制的代码质量 Github 操作,并使其显示 0 个 ObjectScript 错误。 首次贡献 - 3 分 如果您是第一次参加 InterSystems Open Exchange 竞赛,可获得 3 个奖励积分! YouTube 上的视频 - 3 分 制作演示您的产品的 Youtube 视频,每个视频可获得 3 分奖励积分。 奖励清单可能会发生变化。敬请持续关注!
文章
Michael Lei · 六月 18, 2023

医疗行业的未来--数据与人的融合

在数字化时代,数据的重要性无可置疑。数据作为新型生产要素,不仅在宏观政策层面得到党和政府的大力推动,也是医院高质量发展的关键和改变医疗行业的驱动力。随着医疗信息化的迅猛发展,我们正迈向一个数据随处可及、人人可用易用的医疗信息化时代。这一时代将数据与人的需求相结合,致力于让数据能“主动”找到需要他们的医护人员和患者,每一个行业从业者,都应致力于为医护人员和患者提供简单易用的软件解决方案,减少工作量,提高效率,推动医疗行业的进步。 数据与人的融合是实现医疗行业数字化转型的核心。当然,医疗数据的收集、存储和管理对于提供高质量的医疗服务至关重要。然而,仅仅有大量的数据并不足够,我们需要将数据与人的需求紧密结合起来。这意味着我们应该让更多的数据关联起来,并且能服务于更多的人群,让患者能够随时随地访问他们的电子病历,让医生和科研人员也能及时有效地获取病人在医院围墙内外进行治疗和健康管理的数据,并且以直观易懂的方式呈现给医护人员和患者,使他们能够快速、准确地获取所需的信息。数据的融合还包括将不同来源的数据整合起来,为医护人员提供全面、完整的视图,同时基于医疗诊断的规则,不管是通过CDSS的形式,还是通过ChatBot(聊天机器人),帮助他们做出更好的决策。 实现数据和人的融合要按照人的需求投放数据。数字化转型的重要目标是为医护人员和患者提供所需的数据,以支持决策和治疗过程。这意味着我们应该了解用户的需求,将数据按照他们的角色、职责和关注点进行分类和投放。医生可能需要即时的患者数据、病历历史和最新的医学研究,而患者可能需要查看自己的健康记录、预约医生和接收个性化的健康建议。通过根据人的需求进行数据投放,新型软件可以提供个性化的服务和支持,形成千人千面,为每个用户提供有价值的信息。 简单易用是实现数字化转型成功的另一个关键。医护人员和患者使用的软件解决方案应该简单易用,不需要复杂的培训和技术知识。界面应该简单、直观、友好,操作流程简化和优化,以确保用户能够快速上手并高效地使用软件。简单易用的软件不仅能够减少用户的学习曲线和工作负担,还能提高用户满意度和工作效率。(比如Apple的医疗软件Apple Health,通过FHIR 技术,通过一个app能够连接数千家医院的病历数据,让患者可以通过一个app实现多家医院的互联网服务和数据整合) 无论是数字化转型还是高质量发展,软件为人服务始终是医疗信息化的核心宗旨。我们应该将软件看作是为人服务的工具,旨在帮助医护人员提供更好的医疗服务,提升患者的体验和健康结果。软件应该以用户体验为中心,并不断优化和改进,不断进行供给侧改革,以满足不断变化和不同人群的需求,而不是增加负担。 最后,数据会在安全可靠的前提下进行传递和流通。在互联网发展的早期时代,由于无法可依,野蛮生长,数据的滥用、隐私保护等存在很大问题。但随着《数据安全法》等法律法规的发布,相信未来的医疗行业数据一定会在更加安全、可靠、合规的前提下进行有序流动。 在未来的医疗信息化发展中,数据与人的关系将变得更加密不可分。通过数据的融合、按需投放、简单易用、安全可靠和以人为本的新一代软件,我们可以实现数据随处可及、人人可用易用的医疗信息化目标。这将为医护人员和患者提供更好的工作环境和医疗体验,推动整个医疗行业向前迈进。InterSystems公司作为创新性的数据平台解决方案供应商,我们始终致力于助力合作伙伴开发创新的解决方案,与合作伙伴一起共同实现这一愿景,改善医疗服务的质量和效率,提高患者体验的获得感的同时帮助医院降本增效,实现高质量发展。
文章
姚 鑫 · 六月 17, 2023

第六十章 镜像中断程序 - 使用主 ISCAgent 的日志数据进行 DR 提升和手动故障转移

# 第六十章 镜像中断程序 - 使用主 `ISCAgent` 的日志数据进行 `DR` 提升和手动故障转移 ## 使用主 `ISCAgent` 的日志数据进行 `DR` 提升和手动故障转移 如果 `IRIS A` 的主机系统正在运行,但 `IRIS` 实例没有且无法重新启动,您可以使用以下过程在通过升级后使用来自 `IRIS A` 的最新日志数据更新升级的 `IRIS C IRIS A` 的 `ISCAgent`。 1. 推广 `IRIS C`,选择 `IRIS A` 作为故障转移伙伴。 `IRIS C` 被提升为故障转移成员,从 `IRIS A` 的代理获取最新的日志数据,并成为主要成员。 2. 重新启动 `IRIS A` 上的 `IRIS` 实例,它作为备份重新加入镜像。 3. 在 `IRIS A` 重新加入镜像并变为活动状态后,可以使用使用升级的 DR 异步临时替换故障转移成员中描述的过程,将所有成员返回到它们以前的角色,首先是正常关闭 `IRIS C` ,然后在 `IRIS B` 的配置参数文件的 `[MirrorMember]` 部分中设置 `ValidatedMember=0`(请参阅配置参数文件参考中的 `[MirrorMember]`),将 `IRIS B` 重新启动为 `DR` 异步,将 `IRIS B` 提升为备份,并以 `DR` 异步方式重新启动 `IRIS C`。 注意:如果 `IRIS A` 的主机系统已关闭,但 `IRIS B` 的主机系统已启动,尽管其 `IRIS` 实例未运行,请按照手动故障转移到活动备份中所述在 `IRIS B` 上运行 `^MIRROR` 例程以确定 是否`IRIS B` 在发生故障时是一个活动备份。如果是这样,使用前面的过程,但在升级期间选择 `IRIS B` 作为故障转移伙伴,允许 `IRIS C` 从 `IRIS B` 的 `ISCAgent` 获取最新的日志数据。 ## 使用来自日志文件的日志数据进行 DR 提升和手动故障转移 如果 `IRIS A` 和 `IRIS B` 的主机系统都已关闭,但可以访问 `IRIS A` 的日志文件,或者 `IRIS B` 的日志文件和消息日志可用,您可以使用最新的日志数据更新 `IRIS C`从升级前的初级开始,使用以下过程。 1. 使用 `IRIS A` 或 `IRIS B` 的最新日志文件更新 `IRIS C`,如下所示: - 如果 `IRIS A` 的日志文件可用,则将最新的镜像日志文件从 `IRIS A` 复制到 `IRIS C`,从 `IRIS C` 上的最新日志文件开始,并包括来自 `IRIS A` 的任何后续文件。例如,如果 `MIRROR -MIRRORA-20180220.001` 是 `IRIS C` 上的最新文件,复制 `MIRROR-MIRRORA-20180220.001` 和 `IRIS A` 上的任何更新文件。 - 如果 `IRIS A` 的日志文件不可用但 `IRIS B` 的日志文件和消息日志可用: 1. 确认`IRIS B`很可能已被捕获,如下所示: a. 确认当`A`及其代理不可用时,`B`同时断开与 A的连接。可以通过在`Messages.log`文件中搜索类似于以下内容的消息来检查 `IRIS B`断开连接的时间: ```java MirrorClient: Primary AckDaemon failed to answer status request ``` b. 通过在其 `messages.log` 文件中搜索类似于以下内容的消息,确认 IRIS B 在断开连接时是活动备份: ```java Failed to contact agent on former primary, can't take over ``` 注意:`messages.log` 文件中的如下消息表明 `IRIS B` 在断开连接时未处于活动状态: ```java nonactive Backup is down ``` 当无法确认它是否已被追上时强制提升的 `DR` 异步成为主数据库可能会导致它成为主数据库而没有镜像生成的所有日志数据。因此,一些全局更新操作可能会丢失,而其他镜像成员可能需要从备份中重建。 2. 如果可以确认 `IRIS B` 处于活动状态,请将最新的镜像日志文件从 `IRIS B` 复制到 `IRIS C`,从 `IRIS C` 上的最新日志文件开始,然后包括来自 `IRIS B` 的所有后续文件。例如,如果 `MIRROR-MIRRORA-20180220.001` 是 `InterSystems IRIS C` 上的最新文件,请从 `IRIS C` 复制 `MIRROR-MIRRORA-20180220.001` 和任何更新的文件。检查文件的权限和所有权,并在必要时更改它们以匹配现有日志文件。 2. 在不选择故障转移合作伙伴的情况下将 `IRIS C` 提升为故障转移成员。 `IRIS C` 成为主要的。 3. 当 `IRIS A` 和 `IRIS B` 的问题得到修复时,尽早并在重新启动 `IRIS` 之前,在每个成员上的 `IRIS` 实例的配置参数文件的 `[MirrorMember]` 部分中设置 `ValidatedMember = 0`(参见 `[ MirrorMember]` 在配置参数文件参考)。说明指出,此更改是必需的。完成此操作后,在每个成员上重新启动 `IRIS`,从 `IRIS A`(最近成为主成员的成员)开始。 1. 如果成员在 `IRIS` 重新启动时作为备份或 `DR` 异步加入镜像,则不需要进一步的步骤。任何在故障成员上但不在当前主成员上的日志数据都已被丢弃。 2. 如果在 `IRIS` 实例重新启动时成员无法加入镜像,如重建镜像成员中描述的引用不一致数据的消息日志消息所示,则成员上的最新数据库更改晚于存在于上的最新日志数据 `IRIS C` 成为主要时。要解决此问题,请按照该部分中的描述重建成员。 4. 在大多数情况下,`DR` 异步系统不是主要故障转移成员的合适永久主机。在 `IRIS A` 和 `IRIS B` 重新加入镜像后,使用使用升级的 `DR` 异步临时替换故障转移成员中描述的过程将所有成员返回到它们以前的角色。如果 `IRIS A` 或 `IRIS B` 作为备份重新启动,则在备份处于活动状态时从正常关闭 `IRIS C` 开始,以故障转移到备份;如果 `IRIS A` 或 `IRIS B` 都重新启动为 `DR` 异步,将其中一个提升为备份,然后在 `IRIS C` 上执行正常关闭。将另一个以前的故障转移成员提升为备份,然后将 `IRIS C` 作为 `DR` 异步重启。
文章
Michael Lei · 六月 14, 2023

使用LangChain 修复 SQL

本文是 SqlDatabaseChain 的简单快速入门(我所做的)。 希望大家会感兴趣。 非常感谢: sqlalchemy-iris 作者@Dmitry Maslennikov 您的项目使我的试验变得可能。 文章脚本使用 openai API,因此请注意不要在外部共享您不打算共享的表信息和记录。 如果需要,可以插入本地模型。 创建一个新的虚拟环境 mkdir chainsql cd chainsql python -m venv . scripts\activate pip install langchain pip install wget # Need to connect to IRIS so installing a fresh python driver python -c "import wget;url='https://raw.githubusercontent.com/intersystems-community/iris-driver-distribution/main/DB-API/intersystems_irispython-3.2.0-py3-none-any.whl';wget.download(url)" # And for more magic pip install sqlalchemy-iris pip install openai set OPENAI_API_KEY=[ Your OpenAI Key ] python 初始测试 from langchain import OpenAI, SQLDatabase, SQLDatabaseChain db = SQLDatabase.from_uri("iris://superuser:******@localhost:51775/USER") llm = OpenAI(temperature=0, verbose=True) db_chain = SQLDatabaseChain.from_llm(llm, db, verbose=True) db_chain.run("How many Tables are there") 错误结果 sqlalchemy.exc.DatabaseError: (intersystems_iris.dbapi._DBAPI.DatabaseError) [SQLCODE: <-25>:<Input encountered after end of query>] [Location: <Prepare>] [%msg: < Input (;) encountered after end of query^SELECT COUNT ( * ) FROM information_schema . tables WHERE table_schema = :%qpar(1) ;>] [SQL: SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public';] (Background on this error at: https://sqlalche.me/e/20/4xp6) ←[32;1m←[1;3mSELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public';←[0m>>> 开发者之间的对话 IRIS 不喜欢以分号结尾的 SQL 查询。 现在做什么? ? 想法:我告诉 LangChain 帮我修理SQL如何 太酷了,我们开工吧 !! 测试二 from langchain import OpenAI, SQLDatabase, SQLDatabaseChain from langchain.prompts.prompt import PromptTemplate _DEFAULT_TEMPLATE = """Given an input question, first create a syntactically correct {dialect} query to run, then look at the results of the query and return the answer. Use the following format: Question: "Question here" SQLQuery: "SQL Query to run" SQLResult: "Result of the SQLQuery" Answer: "Final answer here" The SQL query should NOT end with semi-colon Question: {input}""" PROMPT = PromptTemplate( input_variables=["input", "dialect"], template=_DEFAULT_TEMPLATE ) db = SQLDatabase.from_uri("iris://superuser:******@localhost:51775/USER") llm = OpenAI(temperature=0, verbose=True) llm = OpenAI(temperature=0, verbose=True) db_chain = SQLDatabaseChain(llm=llm, database=db, prompt=PROMPT, verbose=True) db_chain.run("How many Tables are there") 结果二 SQLQuery:←[32;1m←[1;3mSELECT COUNT(*) FROM information_schema.tables←[0m SQLResult: ←[33;1m←[1;3m[(499,)]←[0m Answer:←[32;1m←[1;3mThere are 499 tables.←[0m ←[1m> Finished chain.←[0m 'There are 499 tables.' 我就说很快吧 参考资料: https://walkingtree.tech/natural-language-to-query-your-sql-database-using-langchain-powered-by-llms/ https://python.langchain.com/en/latest/modules/chains/examples/sqlite.html#sqldatabasesequentialchain https://python.langchain.com/en/latest/modules/agents/plan_and_execute.html
文章
姚 鑫 · 六月 14, 2023

第五十七章 镜像中断程序 - 在手动故障转移之前确定备份是否处于活动状态

# 第五十七章 镜像中断程序 - 在手动故障转移之前确定备份是否处于活动状态 ## 在手动故障转移之前确定备份是否处于活动状态 假设有两个名为 `IRIS A` 和`IRIS B` 的故障转移成员。如果 `^MIRROR` 例程确认备份 (`IRIS B`) 在与主 (`IRIS A`) 丢失联系时处于活动状态,因此具有最新的来自 `IRIS A` 的日志数据,可以使用单个过程手动进行故障转移。当连接因主要故障而丢失时,不会造成数据丢失的风险。但是,当发生多个故障时,活动备份可能没有来自主服务器的所有最新日志数据,因为主服务器在连接丢失后继续运行了一段时间。 使用以下过程确定备份是否处于活动状态: 1. 确认 `IRIS` 实例 `IRIS A` 上的 `ISCAgent` 实际上已关闭(并确保它们在整个手动故障转移过程中保持关闭状态)。 2. 在 `IRIS B` 上,在终端的 `%SYS` 命名空间中运行 `^MIRROR` 例程(请参阅使用 `^MIRROR` 例程)。 3. 在主菜单中选择镜像管理,显示如下子菜单: ```java 1) Add mirrored database(s) 2) Remove mirrored database(s) 3) Activate or Catchup mirrored database(s) 4) Change No Failover State 5) Try to make this the primary 6) Connect to Mirror 7) Stop mirroring on this member 8) Modify Database Size Field(s) 9) Force this node to become the primary 10) Promote Async DR member to Failover member 11) Demote Backup member to Async DR member 12) Mark an inactive database as caught up 13) Manage mirror dejournaling on async member (disabled) 14) Pause dejournaling for database(s) ``` 4. 选择 `Force this node to become the primary` 选项。如果在联系丢失时备份处于活动状态,则会显示如下消息: ```java This instance was an active backup member the last time it was connected so if the primary has not done any work since that time, this instance can take over without having to rebuild the mirror when the primary reconnects. If the primary has done any work beyond this point (file #98), C:\InterSystems\MyIRIS\mgr\journal\MIRROR-GFS-20180815.009 then the consequence of forcing this instance to become the primary is that some operations may be lost and the other mirror member may need to be rebuilt from a backup of this node before it can join as a backup node again. Do you want to continue? ``` 如果有权访问主要文件的日志文件,则可以在继续之前确认引用的文件是最新的。 如果在与主服务器失去联系时备份未处于活动状态,则会显示如下消息: ```java Warning, this action can result in forcing this node to become the primary when it does not have all of the journal data which has been generated in the mirror. The consequence of this is that some operations may be lost and the other mirror member may need to be rebuilt from a backup of this node before it can join as a backup node again. Do you want to continue? ``` ## 手动故障转移到活动备份 如果 `^MIRROR` 例程的 `Force this node to become the primary` 选项确认备份在失去与主节点的连接时处于活动状态,请完成手动故障转移过程,如下所示: 1. 在要继续吗?提示继续该过程。 `Force this node to become the primary` 选项等待 `60` 秒以使镜像成员成为主要节点。如果操作未在 `60` 秒内成功完成,`^MIRROR` 报告操作可能未成功并指示您检查消息日志以确定操作是失败还是仍在进行中。 2. 一旦 `^MIRROR` 例程确认备份已成为主要备份,请在可以这样做时重新启动 `IRIS A`。当 `IRIS` 实例重新启动时, `IRIS A` 作为备份加入镜像。 ## 备份不活动时手动故障转移 即使 `^MIRROR` 例程未确认备份 ( `IRIS B`) 在与主 ( `IRIS A`) 失去连接时处于活动状态,仍然可以使用以下过程继续手动故障转移过程,但是如果这样做,会有数据丢失的风险。如本程序所述,可以在手动故障转移之前将最新的镜像日志文件从 `IRIS A`(如果有权访问)复制到 `IRIS` B,从而最大限度地降低这种风险。 1. 如果有权访问主服务器的镜像日志文件,请将最新的文件复制到 `IRIS B`,从 `IRIS B` 上的最新日志文件开始,然后包括来自 `IRIS A` 的任何后续文件。例如,如果 `MIRROR-MIRRORA-20180220.001`是 `IRIS B` 上的最新文件,复制 `MIRROR-MIRRORA-20180220.001` 和 `IRIS A` 上的任何更新文件。检查文件的权限和所有权,并在必要时更改它们以匹配现有日志文件。 2. 如果接受数据丢失的风险,请在提示时输入 `y` 以确认要继续;备份成为主要的。 `Force this node to become the primary` 选项等待 `60` 秒以使镜像成员成为主要节点。如果操作未在 `60` 秒内成功完成,`^MIRROR` 报告操作可能未成功并指示您检查消息日志以确定操作是失败还是仍在进行中。 3. 一旦 `^MIRROR` 例程确认备份已成为主要备份,请在可以这样做时重新启动 `IRIS A`。 - 如果 `IRIS A` 在 `IRIS` 实例重新启动时加入镜像作为备份,则不需要进一步的步骤。任何在故障成员上但不在当前主成员上的日志数据都已被丢弃。 - 如果在 `IRIS` 实例重新启动时 `IRIS A` 无法加入镜像,如重建镜像成员中描述的引用不一致数据的消息日志消息所示 `IRIS A` 上的最新数据库更改晚于最新的日志数据当 `IRIS B` 被迫成为主服务器时,它会出现在 `IRIS B` 上。要解决此问题,请按照该部分中的描述重建 `IRIS A`。