搜索​​​​

清除过滤器
文章
Louis Lu · 十一月 2, 2021

IRIS 2021 技术文档 First Look 20 -- SQL 文本搜索

本文档向您介绍 InterSystems IRIS®数据平台对 SQL 文本搜索的支持,它为各种语言的非结构化文本数据提供语义上下文搜索。它涵盖了以下主题: 为什么 SQL 搜索很重要 InterSystems IRIS 如何实现 SQL 搜索 尝试 SQL 搜索 有关 SQL 搜索的更多信息 本文档介绍了 SQL 上下文感知文本搜索,并介绍了一些与索引文本数据相关的初始任务,以进行搜索和执行 SQL 搜索。一旦您完成了这个探索,您将在一个 SQL 列中为文本搜索建立索引,并执行几种类型的搜索。这些活动被设计为只使用默认设置和功能,以便您熟悉该功能的基本原理。有关 SQL 搜索的完整文档,请参见 SQL Search Guide(《SQL 搜索指南》)。 处理非结构化文本的一个相关但独立的工具是自然语言处理(Natural Language Processing,NLP)。SQL 搜索假定您知道要查找的内容。NLP 文本分析允许您在没有事先了解文本内容的情况下分析文本的内容 。 要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。 为什么 SQL 搜索很重要 快速搜索非结构化文本数据的能力是访问许多公司和机构普遍存储的大量文本内容的基础。任何此类数据的搜索工具必须具有以下功能: 快速搜索:InterSystems IRIS SQL 搜索可以快速搜索大量的数据,因为它搜索的是生成的优化数据索引,而不是顺序搜索数据本身。 单词感知(Word-aware)搜索:SQL 搜索不是字符串搜索,它是基于文本中语义结构的搜索。SQL 搜索的最基本的语义结构是单词。这就减少了在字符串搜索中发现嵌入另一个单词中的字符串,或当字符串连接两个单词时产生的误报数量。 实体感知(Entity-aware)搜索:SQL 搜索考虑了多个单词,这些单词根据语义关系分组形成实体。因此,它可以搜索指定顺序(位置短语)中的多个单词、出现在彼此特定接近范围内的单词(无论顺序如何),以及在实体的开头或结尾找到的单词。这使您能够将搜索范围缩小到在其他单词的指定上下文中找到的一个单词(或短语)。 语言感知(Language-aware)搜索:识别单词之间的语义关系是基于语言的。SQL 搜索包含十种自然语言的语义规则(语言模型)。它还提供对其他语言的支持。它不需要创建或关联字典或本体。 模式匹配:SQL 搜索同时提供通配符匹配和正则表达式(RegEx)匹配,来匹配字符模式。 模糊匹配:SQL 搜索为近似匹配提供模糊搜索,这些搜索考虑了搜索字符串的计算变化程度。这使拼写错误的匹配成为可能。 派生匹配:SQL 搜索可以使用分解来匹配词根和组件词。SQL 搜索可以使用同义词表来匹配同义词和短语。 InterSystems IRIS 如何实现 SQL 搜索 SQL 搜索可以搜索在 SQL 表的列中发现的文本数据。为了做到这一点,您必须为包含文本数据的列创建一个 SQL 搜索索引。InterSystems 将表列实现为持久化类中的属性。 有三个级别的索引可用,每个级别都支持附加的功能以及较低级别的所有功能:基本(Basic)、语义( Semantic)和分析(Analytic): 基本(Basic)支持单词搜索和位置短语搜索,包括使用通配符、短语中单词之间的范围、正则表达式(RegEx)匹配和共同出现搜索。 语义(Semantic) 支持所有的基本功能,并且还支持 InterSystems IRIS 自然语言处理(NLP)实体。它可以搜索实体,以及以实体开头或以实体结尾的单词或短语。它能识别 NLP 的属性,比如否定。 分析(Analytic) 支持所有的语义(Semantic)功能,也支持 NLP 路径。它还可以根据 NLP 优势和接近度分数进行搜索。 填充索引。像所有的 SQL 索引一样,您可以在数据填充表之后直接构建索引,也可以在将记录插入空表时让 SQL 自动构建索引条目。无论哪种情况,SQL 都会自动更新此索引作为后续插入、更新或删除操作的一部分。 您执行 SQL 搜索,编写一个 SELECT 查询,其中的 WITH 子句包含 %ID %FIND search_index() 语法。search_index() 函数的参数包括 SQL 搜索索引的名称和搜索字符串。这个搜索字符串可以包括通配符、位置短语和实体语法字符。搜索字符串还可以包括 AND、OR 和 NOT 逻辑运算符。 尝试 SQL 搜索 使用 InterSystems IRIS SQL 搜索很容易。这个简单的程序将引导您完成搜索以字符串形式存储在 SQL 表列中的文本数据的基本步骤。 要使用该程序,您需要一个正在运行的 InterSystems IRIS 实例。您对 InterSystems IRIS 的选择包括多种类型的已授权的和免费的评估实例;该实例不需要在您正在工作的系统中(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。 您还将使用一个 IDE,如 VS Code 或 Studio,在实例中创建 ObjectScript 代码。有关设置这些 IDE 并将其连接到您的实例的说明,请参见 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Visual Studio Code 或 Studio。。 用前须知 要使用该程序,您需要一个正在运行的 InterSystems IRIS 实例。您对 InterSystems IRIS 的选择包括多种类型的已授权的和免费的评估实例;该实例不需要在您工作的系统中(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。 您还需要从 GitHub repo https://github.com/intersystems /Samples-Aviation 获得 Aviation.Event 表和相关文件。 下载和设置示例文件 Samples-Aviation 源(sources)必须可由实例访问。下载文件的程序取决于您所使用的实例类型,如下所示: 如果您使用的是 ICM 部署的实例: 使用带有 -machine 和 -interactive 选项的 icm ssh 命令,在托管实例的节点上打开默认 shell,例如: icm ssh -machine MYIRIS-AM-TEST-0004 -interactive 在 Linux 命令行上,使用以下命令之一将 repo 克隆到实例的数据存储卷(data storage volume)。例如,对于部署在 Azure 上的配置,数据卷的默认挂载点(default mount point)是 /dev/sdd,因此您可以使用如下命令: $ git clone https://github.com/intersystems/FirstLook-SQLBasics /dev/sdd/FirstLook-SQLBasics OR $ wget -qO- https://github.com/intersystems/FirstLook-SQLBasics/archive/master.tar.gz | tar xvz -C /dev/sdd 这些文件现在对容器文件系统上 /irissys/data/FirstLook-SQLBasics 中的 InterSystems IRIS 可用。 如果您正在使用通过其他方式部署的容器化实例(授权版或社区版(Community Edition)): 在主机上打开 Linux 命令行。如果您在云节点上使用社区版(Community Edition),请使用 SSH 连接该节点,如在 Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)中所述。 在 Linux 命令行上,使用 git clone 或 wget 命令,如上所述,将 repo 克隆到容器中挂载为卷(mounted as a volume)的存储位置。 对于社区版(Community Edition)实例,您可以克隆到实例的持久化 %SYS 目录 (存储特定于实例的配置数据的目录)。在 Linux 文件系统中,这个目录是 /opt/ISC/dur。这使得文件对容器文件系统上 /ISC/dur/FirstLook-SQLBasics 中的 InterSystems IRIS 可用。 对于已授权的容器化实例,选择容器中作为卷挂载(mounted as a volume)的任何存储位置(如果使用它,包括持久化 %SYS 目录)。例如,如果您的 docker run 命令包含选项 -v /home/user1:/external,并且您将 repo 克隆到 /home/user1, 则文件对容器文件系统上 /external/FirstLook-SQLBasics 中的 InterSystems IRIS 可用。 如果您使用的是 InterSystems 学习实验室(Learning Labs)实例: 在集成 IDE 中打开命令行终端。 将目录更改为 /home/project/shared 并使用 git clone 命令克隆 repo: $ git clone https://github.com/intersystems/FirstLook-SQLBasics 该文件夹被添加到左边资源管理器(Explorer)面板的 Shared (共享)下,并且该目录对 /home/project/shared 中的 InterSystems IRIS 可用。 如果您使用的是已安装的实例: 如果实例的主机是安装了 GitHub 桌面(GitHub Desktop)的 Windows 系统: 在主机的 web 浏览器中进入 https://github.com/intersystems/Samples-Aviation。 选择 Clone or download(克隆或下载) ,然后选择 Open in Desktop(在桌面上打开)。 这些文件对您的 GitHub 目录中的 InterSystems IRIS 可用,例如在 C:\Users\User1\Documents\GitHub\FirstLook-SQLBasics 中。 如果主机是 Linux 系统,只需在 Linux 命令行上使用 git clone 命令或 wget 命令,就可以将 repo 克隆到您所选择的位置。 一旦您获得了示例文件,请按照"设置说明"下的 Samples-AviationREADME.md 文件中提供的步骤操作: 创建一个名为 SAMPLES 的命名空间,如下所示: 使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中URL described for your instance(为您的实例描述的 URL),在浏览器中打开您的实例的管理门户(Management Portal)。 选择 System Administration(系统管理) > Configuration(配置) > System Configuration(系统配置) > Namespaces(命名空间) ,进入 Namespaces(命名空间)页面。 在 Namespaces(名称空间) 页面,选择 Create New Namespace(创建新的命名空间)。这将显示 New Namespace(新命名空间) 页面; 按照 System Administration Guide(《系统管理指南》) 中“Configuring InterSystems IRIS(《配置 InterSystems IRIS》)”章节中 Create/Modify a Namespace(创建/修改命名空间)中的说明使用此页面。 调用新的命名空间 SAMPLES。 选择靠近页面顶部的 Save(保存) ,然后在生成的日志末尾选择 Close(关闭)。 使 SAMPLES web 应用程序与 InterSystems IRIS 分析(Analytics) 一起使用: a.在管理门户(Management Portal)中,点击 System Administration(系统管理) > Security(安全) > Applications(应用程序) > Web Applications(web 应用程序)。 b.点击最左侧列中的 /csp/samples 链接(假设您创建的命名空间名为 SAMPLES)。 c.在 Enable(启用) 部分,选择 Analytics(分析)。 d.点击 Save(保存)。 使用 InterSystems IRIS Basics:Connecting an IDE( 《InterSystems IRIS 基础:连接一个 IDE》)中procedure described for your instance(为您的实例描述的程序)打开 InterSystems 终端(Terminal),并输入以下命令,更改加载示例的命名空间: set $namesapce="SAMPLES" 输入以下命令,将 .path 替换为包含您克隆或下载的 repo 的 README.md 和 LICENSE 文件的目录的完整路径: do $system.OBJ.Load("<path>\buildsample\Build.AviationSample.cls","ck") 输入以下命令: do ##class(Build.AviationSample).Build() 当出现提示时,输入包含 README.md 和 LICENSE 文件的目录的完整路径。然后,该方法加载和编译代码,并执行其他需要的设置步骤。 创建和测试一个基本的 SQL 搜索索引 一旦代码编译完成(可能需要一两分钟),继续执行以下步骤: 使用您选择的 IDE,通过在 SAMPLES 命名空间中定义以下类(class)来创建基本 SQL 搜索(Basic SQL Search)索引: Class Aviation.TestSQLSrch Extends %Persistent [DdlAllowed,Owner={UnknownUser},SqlRowIdPrivate, SqlTableName=TestSQLSrch ] { Property UniqueNum As %Integer; Property Narrative As %String(MAXLEN=100000) [ SqlColumnNumber=3 ]; Index NarrBasicIdx On (Narrative) As %iFind.Index.Basic(INDEXOPTION=0,LANGUAGE="en",LOWER=1); Index UniqueNumIdx On UniqueNum [ Type=index,Unique ]; } 这个示例创建了一个持久化类(表),其中包含一个 Narrative 属性(列),并为这个属性定义了一个基本 SQL 搜索(Basic SQL Search)索引。因为这是一个新类,所以您必须用文本数据填充表。 用文本数据填充表并构建 SQL 搜索索引。SQL 搜索索引的构建和维护与任何其他 SQL 索引一样。 并输入以下命令,以使用您下载的 Aviation.Event 表中的文本数据填充新表。在这个示例中,SQL 搜索索引是在添加每条记录时自动构建的: set $namespace = "SAMPLES" set in1="INSERT OR UPDATE INTO Aviation.TestSQLSrch (UniqueNum,Narrative) " set in2="SELECT %ID,NarrativeFull FROM Aviation.Event WHERE %ID < 100" set myinsert=in1_in2 set tStatement=##class(%SQL.Statement).%New() set qStatus=tStatement.%Prepare(myinsert) if qStatus'=1 {write "%Prepare failed:" DO $System.Status.DisplayError(qStatus) quit} set rset=tStatement.%Execute() write !,"Total rows inserted=",rset.%ROWCOUNT 出于性能的考虑,您可能希望使用 %NOINDEX 选项来推迟构建索引,直到表被完全填充,然后使用 %Build() 方法构建 SQL 搜索索引(和任何其他定义的索引)。 或者,您可以在已经包含文本数据的现有持久化类中添加 SQL 搜索索引,然后使用 %Build() 方法填充 SQL 搜索索引。 在终端(Terminal)中打开一个 SQL Shell,如在 First Look:InterSystems SQL(《技术概要:InterSystems SQL》)中 Creating and Populating a Table With a SQL Script File(使用 SQL Script 文件创建和填充表)的前几个步骤中所述,并使用 SQL 搜索作为 SELECT 查询的 WHERE 子句条件。WHERE 子句可以包含由 AND 逻辑关联的其他条件。在 SAMPLES 命名空间运行以下 SQL 查询: SELECT %iFind.Highlight(Narrative,'"visibility [1-4] mile*" AND "temp* ? degrees"') FROM Aviation.TestSQLSrch WHERE %ID %FIND search_index(NarrBasicIdx,'"visibility [1-4] mile*" "temp* ? degrees"',0,'en') Search_index() 函数指定了一个 search_index 参数。这是为要搜索的属性(列)定义的 SQL 搜索索引。它可以是一个基本(Basic)、语义(Semantic)或分析(Analytic)索引。 Search_index() 函数指定了一个 search_item 参数。 这个示例将 search_item 定义为 "visibility [1-4] mile*" "temperature ? degree*"。这将以任意顺序返回包含两个位置短语的所有记录: "visibility [1-4] mile*"返回单词“visibility”和“mile”之间有 1 到 4 个单词的短语。 因为 mile* 指定了一个通配符,它可以匹配 mile 或 miles。例如,"visibility less than 1 mile ","visibility 10 miles ","visibility approximately 20 statute miles","visibility for many miles"。 "temp* ? degrees"返回以 "temp "开头、以 0 个或更多非空格通配符结尾的单词,一个缺失的单词,然后是单词"degree"的短语。因此,它将返回带有 短语 "temperature 20 degrees","temp. 20 degrees","temperature in degrees",以及(可能是无意的)"temporarily without degrees"。 search_index() 函数可以选择性地指定一个 search_option 参数。 该选项可以对搜索应用可选转换,如下所示:1=词干搜索应用词干匹配词或短语基于他们的词干形式。2=分解搜索将分解应用于复合词。3=模糊搜索将指定的模糊程度(字符差异的数量)应用于搜索。4=正则表达式搜索允许使用 RegEx 匹配进行搜索。这个示例指定了默认值 0,意味着没有搜索转换。 Search_index() 函数可以选择性地指定一个 search_language 参数。您可以指定一种语言,或指定'*'来调用自动语言识别,支持搜索包含多种语言的文本。这个示例指定默认值'en'(英语)。 这个示例还通过将相同的 search_item 应用于返回的记录来突出显示返回的文本。这通过使用 <b> 和 </b> 标签为它们定界来突出这两个短语的每一个实例。 提供这个示例是为了让您初步体验 InterSystems IRIS SQL 搜索。您不应该将这个示例作为开发真正的应用程序的基础。要在实际情况下使用 SQL 搜索,您应该充分研究软件提供的可用选择,然后开发您的应用程序以创建健全和高效的代码。 了解有关 SQL 搜索的更多信息 InterSystems 还有其他参考资料可以帮助您了解有关 SQL 搜索的更多信息,包括: Using InterSystems SQL Search(《使用 InterSystems SQL 搜索》)
公告
Claire Zheng · 九月 23, 2022

【腾讯会议邀请】InterSystems开发者社区中文版首届技术征文大赛线上见面会

亲爱的社区同学们! 2022年9月5日-10月24日,我们正在举办InterSystems开发者社区中文版首届技术征文大赛! 🏆InterSystems开发者社区中文版首届技术征文大赛🏆(←点击链接进入参赛页面,浏览所有参赛文章)! 2022年9月27日(下周二)11:00-11:30,我们将进行一次针对此次征文大赛的线上宣讲,欢迎您通过腾讯会议参加,了解关于此次征文大赛的信息,针对感兴趣的问题提问。 #腾讯会议信息 会议主题:InterSystems 社区技术征文大赛宣讲&解读会议时间:2022/09/27 11:00-11:30 (GMT+08:00) 中国标准时间 - 北京 点击链接入会,或添加至会议列表:https://meeting.tencent.com/dm/4UEzyh467wae #腾讯会议:493-643-076
公告
Claire Zheng · 八月 22, 2022

InterSystems开发者大赛:以互操作性技术为可持续发展构建解决方案

亲爱的开发者们! 到了展示互操作性技术的时候了!来参加我们最新的竞赛吧! 🏆 InterSystems开发者大赛:以互操作性技术为可持续发展构建解决方案 🏆 时间: 8月29日-9月19日(北京时间) 奖金更高: $13,500 – 请留意,奖金分配跟以往有所不同! 主题 💡 基于InterSystems IRIS和InterSystems IRIS医疗版的互操作性解决方案 💡 基于InterSystems IRIS数据平台或InterSystems IRIS医疗版开发互操作性解决方案,或为开发/维护互操作性解决方案提供帮助的解决方案。 此外,我们邀请开发者尝试解决一个全球性问题,这次我们提出的是“可持续发展问题”。 我们鼓励您参与此次竞赛,构建旨在解决可持续发展问题的解决方案: 1) 如果您的应用对解决可持续发展问题、ESC、可替代能源、最佳利用等问题有帮助,您将获得特别奖励。2) 如果您准备并提交了一个与可持续发展、ESG、可替代能源、最佳利用等问题相关的数据集,您将获得更多额外奖励。 基本要求 有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。 该应用可以在 IRIS Community Edition or IRIS for Health Community Edition or IRIS Advanced Analytics Community Edition上运行。 该应用需开源并在GitHub上发布。 该应用的README文件应为英文,包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。 🆕 奖品: 如您所愿!我们这次提高了奖金,优化了奖金分配机制! 1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出: 🥇 第1名 - $5,000 🥈 第2名 - $3,000 🥉 第3名 - $1,500 🏅 第4名 - $750 🏅 第5名 - $500 🌟 第6-10名 - $100 2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用: 🥇 第1名 - $1,000 🥈 第2名 - $750 🥉 第3名 - $500 ✨ 所有获奖者都将获得Global Masters徽章! 注意:如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金 关键参赛节 🛠 应用开发、提交阶段 2022年8月29日 (12:00PM 北京时间):竞赛启动。 2022年9月12日 (11:59AM 北京时间):提交截止。 ✅ 投票阶段 2022年9月12日 (12:00PM 北京时间): 投票开始。 2022年9月19日 (11:59AM 北京时间): 投票结束。 注意:在整个参赛期间(开发与投票期间),开发者可持续提升其应用 谁可以参加? 任何开发者社区的成员均可参加,InterSystems内部员工除外(InterSystems contractor员工可以参加)。还没有账号?现在来建一个! 👥 开发者可以组团 创建一个协作应用程序,组团限定人数为2-5人。 请注意,要在您的README文件中标注您的团队成员——社区用户profile 资源助力: ✓ 示例应用: interoperability-embedded-python IRIS-Interoperability-template ETL-Interoperability-Adapter HL7 and SMS Interoperability Demo UnitTest DTL HL7 Twitter Sentiment Analysis with IRIS Healthcare HL7 XML RabbitMQ adapter PEX demo ✓ 在线课程: Interoperability for Business Interoperability QuickStart Interoperability Resource Guide - 2019 ✓ 视频: Intelligent Interoperability Interoperability for Health Overview ✓ IRIS初学者: Build a Server-Side Application with InterSystems IRIS Learning Path for beginners ✓ 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 ✓ 如何将您的APP提交给大赛: 如何在InterSystems Open Exchange上发布应用程序 如何把参赛APP提交给大赛 需要帮助? 加入InterSystems的 Discord server频道,或跟帖评论提出您的问题! 期待您的精彩提交!祝好运 👍 参与此次竞赛,您同意 遵守相关条款,请认真阅读。
文章
jieliang liu · 九月 22, 2021

IRIS 2021 技术文档 First Look 4 ObjectScript 入门

技术概要:ObjectScript 技术概要:ObjectScript 本文档将向您介绍 ObjectScript 编程语言,并提供了几个示例,说明如何使用它来存储和检索来自 InterSystems IRIS®数据平台的数据。本技术概要(First Look)并不试图提供对该语言或其功能的全面概述。您可以使用本文件末尾列出的参考资料,继续您的探索。 要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。 什么是 ObjectScript? ObjectScript 是一种编程语言,用于在 InterSystems IRIS 数据平台上快速开发复杂的业务应用。ObjectScript 源代码被编译成 object 代码,该代码可针对业务应用程序中的典型操作(包括字符串操作和数据库访问)进行高度优化。 ObjectScript 的独特之处之一是它的底层存储结构,即所谓的 globals。Globals 可以被认为是持久的多维稀疏数组。ObjectScript 允许您直接从 globals 访问数据,但也允许您通过其本机 object 和 SQL 支持来访问这些数据。 <span id="2_Try_It:_Storing_and_Retrieving_Data_Us" class="anchor"></span>虽然您可以在 InterSystems IRIS 平台上使用 Java、.NET、node.js 或其他语言编写应用程序,但通过使用该平台的许多 API,您可以使用 ObjectScript 编写高效的、基于服务器的代码,让您对数据有更精细的控制。 试一试:使用 ObjectScript 存储和检索数据 在这篇技术概要(First Look)中,您将学习如何使用 ObjectScript 来: 在 globals 中存储和检索数据。 定义一个类,并实例化、使用和存储该类的 objects。 使用 SQL 查询访问为该类存储的数据,并对结果集进行处理。 正如您将看到的,ObjectScript 使您能够以多种方式存储和访问数据,既强大又灵活。 用前须知 要使用本技术概要(First Look),您需要一个正在运行的 InterSystems IRIS 实例。您的选择包括几种类型的已授权的和免费的评估实例;该实例不需要由您正在工作的系统托管(尽管您的系统必须能够通过网络访问该实例)。关于如何部署每种类型的实例的信息,如果您还没有一个实例可以使用,请参见(InterSystems IRIS Basics:Connecting an IDE《InterSystems IRIS 基础:连接一个 IDE》)中的Deploying InterSystems IRIS(部署 InterSystems IRIS)。 您也需要知道: 实例的基于 web 的管理门户(Management Portal)的 URL,这是 InterSystems IRIS 的系统管理用户界面。 试一试:使用 ObjectScript 存储和检索数据 如何访问终端(Terminal),InterSystems IRIS 命令行工具。 您的实例的用户名和密码(InterSystems Learning Labs 上的 web 实例不需要)。 您还需要从 InterSystems GitHub repo 下载 ObjectScript 示例代码:https://github.com/intersystems/FirstLook-ObjectScript。 关于如何访问管理门户(Management Portal )或终端(Terminal)的更多信息,请参见InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》) 中的 " InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)"。尽管您实际上不需要 IDE 来做这些练习,但您可以使用安装了 ObjectScript 扩展的 Studio 或 Visual Studio Code 查看和编辑示例代码 。 导入 ObjectScript 代码示例 首先,将 ObjectScript 代码示例导入 InterSystems IRIS: 从管理门户(Management Portal)的主页,选择 System Explorer(系统资源管理器) > Classes(类)。 在 Classes 页面上,查看左栏,确保您在 USER 命名空间。您可以把命名空间看作是工作空间或目录。 点击 Import(导入)。 在 Import Classes 的对话框中: a. 如果您的 InterSystems IRIS 实例在远程服务器上运行,请指定是将示例文件下载到远程服务器还是下载到您的本地计算机。 b. 在"File" 或 "Directory"的 Import(导入)区域,点击 File(文件)。 c. 浏览您从 GitHub 下载的 FirstLookObjectScript.xml 文件。 d. 选择 Compile Imported Items(编译导入项)。 e. 对于 Compile Flags(编译标志),指定 cuk。 f. 点击 Next(下一步)。 g. 点击 Import(导入)。 h. 当出现加载成功的消息时,点击 Done(完成)。 现在,在 Classes 页面上,您应该看到 FirstLook.ObjectScript.cls 和 FirstLook.Person.cls 在类的列表中。在 InterSystems IRIS 中,包含类的包名称(FirstLook)附加有类的名称(ObjectScript 或 Person)。扩展名 .cls 用来表示类文件。 注意: 如果您的命名空间包含大量的类,可以在页面左栏的 Class Name(类名) 框中输入 F*.cls 来过滤列表。 ObjectScript 和 Globals 如果您想使用一些 ObjectScript 命令,一个很好的方法是使用 InterSystems 终端(InterSystems Terminal)。(如果您以前没有使用过终端(Terminal),请参见InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》) 中的 "InterSystems IRIS Connection Information(《InterSystems IRIS 连接信息》)"。) 在您启动终端会话(Terminal session)后,提示会指示您处于哪个命名空间。如果您不在 USER 命名空间,执行以下命令: set $namespace = "USER" 试一试:使用 ObjectScript 存储和检索数据 在 ObjectScript 中, 您可以使用 set 命令给变量赋值: USER>set x = "Welcome to ObjectScript!" 要显示一个变量的内容,请使用 write 命令: USER>write x Welcome to ObjectScript! 您刚刚创建的变量只存在于这个终端会话(Terminal session)的工作内存中。如果您想在数据库中存储一个值,您可以使用 global,它看起来像一个带插入符号(^)的变量: USER>set ^Settings("Color") = "Red" Globals 提供持久性存储,这意味着在您关闭终端会话后,^Settings 将继续存在。 这个特殊的 global 也是一个数组,有一个下标。与许多其他语言中的数组不同,globals 可以有整数、小数或字符串等下标。Globals 也是稀疏的,这意味着下标可能是连续的,也可能不是连续的。 您可以利用 globals 的多维特性来定义一个更复杂的结构: USER>set ^Settings("Auto1", "Properties", "Color") = "Red" USER>set ^Settings("Auto1", "Properties", "Model") = "SUV" USER>set ^Settings("Auto2", "Owner") = "Mo" USER>set ^Settings("Auto2", "Properties", "Color") = "Green" 要显示 global 中的所有节点,您可以使用 zwrite 命令: USER>zwrite ^Settings ^Settings("Auto1","Properties","Color")="Red" ^Settings("Auto1","Properties","Model")="SUV" ^Settings("Auto2","Owner")="Mo" ^Settings("Auto2","Properties","Color")="Green" ^Settings("Color")="Red" 要检索存储在 global 特定节点上的值,您可以使用 $get() 函数。如果您试图从不存在的 global 节点检索值,这个函数将返回空字符串,以避免潜在的未定义错误。 在终端(Terminal)尝试以下操作: USER>set ^testglobal(1) = 8888 USER>set ^testglobal(2) = 9999 USER>set globalValue = $get(^testglobal(1)) USER>write "The value of ^testglobal(1) is ", globalValue The value of ^testglobal(1) is 8888 要在 global 中迭代节点,您可以使用 $order() 函数,它返回 global 中的下一个下标。传入一个下标等于空字符串的 global 节点会导致 $order() 返回第一个下标。返回值等于空字符串表示 $order() 已经到达最后一个下标。 您可以像编写变量或 global 的值一样编写函数返回的值: USER>write $order(^testglobal("")) 1 USER>write $order(^testglobal(1)) 2 USER>write $order(^testglobal(2)) USER> 在实践中,您通常会在 ObjectScript 类文件中的类方法中创建一个 $order() 循环。在 FirstLook.ObjectScript.cls 中为您提供了以下方法。 试一试: 使用 ObjectScript 存储和检索数据 /// Iterate over global ^testglobal ClassMethod Iterate() { // Start by setting subscript to "" set subscript = "" // "Argumentless" for loop for { // Get the next subscript set subscript = $order(^testglobal(subscript)) // When we get to the end, quit the for loop quit:(subscript = "") // Otherwise, write the subscript and the value // stored at ^testglobal(subscript) write !, "subscript=", subscript, ", value=", ^testglobal(subscript) } } 请注意,"无参数(argumentless) "的 for 循环没有指定终止条件,如果我们不显式退出该循环,它将永远循环下去。Write 语句中的感叹号告诉 ObjectScript 在编写 global 中每个节点的下标和值之前移动到下一行。 要在终端(Terminal)运行该方法,请输入: USER>do ##class(FirstLook.ObjectScript).Iterate() 这产生了输出: subscript=1, value=8888 subscript=2, value=9999 ObjectScript 和 Objects 您可以使用 ObjectScript 来创建具有方法和属性的类。然后您可以将该类的 objects 实例化。示例类 FirstLook.Person.cls 定义了一个类 Person,然后让您创建该类的实例,如 person John Smith 或 person Jane Doe。 基本的类定义如下所示: Class FirstLook.Person Extends %Persistent { Property FirstName As %String [ Required ]; Property LastName As %String [ Required ]; } Person 类扩展了内置的 InterSystems IRIS 类 %Persistent,它允许您访问父类中一些有用的方法,如 %New() 和 %Save()。 然后列出该类的属性。在这种情况下,您只是了存储一个 person 的名字和姓氏。 继续使用 终端(Terminal)创建一个新 person。如果您不在 USER 命名空间,执行以下命令: set $namespace = "USER" 要创建一个新的 Person object,请使用 %New() 方法,该方法返回一个新 person 的 "句柄",更正式的说法是一个 object 引用,或 OREF。然后设置新 person 的属性,并调用 %Save() 方法将新 person 存储在数据库中。 USER>set person = ##class(FirstLook.Person).%New() USER>set person.FirstName = "Sarah" USER>set person.LastName = "Aarons" USER>set status = person.%Save() USER>write status 1 试一试: 使用 ObjectScript 存储和检索数据 %Save() 方法返回一个状态,如果成功的话,其值为 1。 当您保存一个 object 时,InterSystems IRIS 会自动为您把它储存在一个 global 中。默认的 global 名称是末尾带有 Dappended 的类名,在本例中是 ^FirstLook.PersonD。 如果显示 global 的内容,您可以看到根节点(没有下标的节点)持有一个 ID,这个 ID 对存储的每个新对象来说是递增的。Global 的其余部分由 ID 下标。每个 Person 节点包含一个属性值列表,其中列表用 $lb 表示,用于 "列表构建"。 USER>zwrite ^FirstLook.PersonD ^FirstLook.PersonD=1 ^FirstLook.PersonD(1)=$lb("","Sarah","Aarons") 您还可以定义实例方法,它对特定的实例进行操作,而类方法则是类的泛型方法。例如, FirstLook.Person.cls 包含一个 WriteName() 方法, 该方法编写 person 的名字。 /// Given an instance of a person, write person's name Method WriteName() { write "The name of this person is:" write !, ..FirstName write !, ..LastName } 属性或方法名称前面的额外点表示当前对象或类。 由于变量 person 目前指的是 Sarah Aarons,您可以这样写她的名字: USER>do person.WriteName() The name of this person is: Sarah Aarons 作为练习,创建、存储和编写 Person 类的一些新对象,例如,Andrew Shaw、Peter Shaw 和 Kate Aarons。 ObjectScript 和 SQL 您刚刚已经看到了如何将创建的每个 person 存储为 global 中的节点。正如您将在本节中所看到的,每个 person 也是表中的一行,可以使用 SQL 进行访问。 InterSystems 提供了几种在 ObjectScript 中使用 SQL 的方法。例如,您可以使用类查询,这基本上是类文件中的 SQL 查询。 在 FirstLook.Person.cls 中,下面的类查询,对类中的所有对象执行 SELECT 命令: /// Query for all stored names Query Select() As %SQLQuery [SqlProc] { SELECT %ID, FirstName, LastName FROM Person ORDER By LastName, FirstName } 要测试该查询,您可以从终端(Terminal)运行它: USER>do ##class(%ResultSet).RunQuery("FirstLook.Person", "Select") 输出将显示一个列表,其中包含您在前面的练习中创建并存储的每个 person,按姓氏,然后是名字排序: ID:FirstName:LastName: 4:Kate:Aarons: 1:Sarah:Aarons: 2:Andrew:Shaw: 3:Peter:Shaw: 了解有关 ObjectScript 的更多信息 在实际生活中,您可能会编写一个类方法,比如 FirstLook.Person.cls 中为您提供的方法,将查询的结果放在结果集中,然后遍历这个结果集中的每一行: /// Run select query and write all names in result set ClassMethod WriteAllNames() { // Create a new %SQL.Statement object set stmt = ##class(%SQL.Statement).%New() // Prepare the class query to execute by passing in // the ClassName and QueryName. set status = stmt.%PrepareClassQuery("FirstLook.Person", "Select") // Handle any errors if $$$ISERR(status) { do $system.OBJ.DisplayError(status) quit } // Execute the query set resultSet = stmt.%Execute() // Iterate over results while (resultSet.%Next()) { // Write person's first and last name write !, resultSet.%Get("FirstName"), " ", resultSet.%Get("LastName") } } 在调用 %PrepareClassQuery() 后,这个类方法使用 $$$ISERRmacro 来检查错误状态。然后, 在执行查询后,代码使用 resultSet.%Next() 循环遍历结果集,如果存在另一行,则返回 true。 要在终端(Terminal)运行该方法,请输入: USER>do ##class(FirstLook.Person).WriteAllNames() Kate Aarons Sarah Aarons Andrew Shaw Peter Shaw 正如您所看到的,ObjectScript 为您提供了几个处理数据的选项。使用 globals 可以最大限度地控制数据的存储方式,使用 objects 可以轻松地处理类的单个实例,而 SQL 可以跨表的行进行操作。如何看待数据完全取决于您自己。 了解有关 ObjectScript 的更多信息 使用下面列出的参考资料,了解更多关于 ObjectScript 编程的知识。 ObjectScript 教程 --- 提供 ObjectScript 语言的交互式介绍。 Using ObjectScript(使用 ObjectScript)--- 提供 ObjectScript 编程语言的概述和详细信息。 ObjectScript Reference(ObjectScript 参考资料) --- 提供 ObjectScript 的参考资料。 Orientation Guide for Server-Side Programming(服务器端编程定向指南) --- 为使用 InterSystems 产品编写服务器端代码的程序员提供基本信息。 InterSystems ObjectScript Basics(InterSystems ObjectScript 基础) --- 涵盖 ObjectScript 基础的交互式课程。
文章
Claire Zheng · 二月 23, 2022

【极客聊吧】从商保结算谈起,聊聊医疗IT行业的数据交换难题

最新一期“极客聊吧”,InterSystems销售工程师们聊了聊这些话题:为什么有些医院和某些商保之间可以直接结算,有些又不能?医院和保险之间的结算难在哪儿?在InterSystems 2021全球线上峰会中提到的医保结算案例对国内实践有哪些借鉴意义?FHIR又能起到什么关键作用?医疗数据实现互联互通的关键是什么?来听听的答案。
公告
Jingwei Wang · 八月 29, 2022

[视频]使用 Business Process Designer(业务流程设计器)

各位开发者, 新的视频已经发布在BiliBili平台: ⏯ 在InterSystmes IRIS 使用 Business Process Designer(业务流程设计器) 请观看如何构建一个新的业务流程,在InterSystems Production 中提供业务逻辑和路由功能。了解如何使用管理门户中的业务流程设计器构建一个BPL业务流程。此外,还可以尝试使用InterSystems集成开发环境自己构建一个。 祝您观看愉快 ! B站上能看到字幕
问题
smith tob · 五月 12, 2023

使用sql访问数据库时,如何对sql语句进行加密?

使用sql访问数据库时,如何对sql语句进行加密? 您是想在 插入表数据的时候将数据加密吗? 比如 在执行insert的 时候把一个字段 用md5 hash 起来存储的,这个现成的sql function 是没有的。SQL Functions | InterSystems SQL Reference | InterSystems IRIS for Health 2023.1这个是我们目前最新版本支持的所有 sql function 如果你是想把sql语句作为整体加密,然后在cache执行的时候解密出来,这样操作的话,加密基本都行吧
文章
Qiao Peng · 三月 29, 2021

精华文章--CDC系列之一 :使用Dejournal Filter在InterSystems IRIS/Caché上通过Mirroring实现CDC功能

InterSystems IRIS/Caché的CDC InterSystems IRIS/Caché未提供开箱即用的变更数据捕获(CDC)工具,而且由于其多模型建模能力和底层的多维存储模型,相对于关系型数据库的单一模型,针对于SQL的CDC在InterSystems IRIS/Caché上会更复杂一些。例如通过Journal日志记录的是底层持久化多维数组的数据变更,而不是SQL table的变更。 通常,在应用层面实现变更数据捕获是更灵活和简单的方式,例如通过设置触发器、类的DSTIME参数。但如果无法在应用层做CDC,可以考虑使用InterSystems IRIS/Caché的Journal和强大的开发能力获取数据变更。 这里介绍使用InterSystems IRIS/Caché的Reporting类型的异步镜像成员获取数据变更。 Dejournal 过滤器 InterSystems IRIS/Caché的 Dejournal 过滤器用于在Reporting类型的异步镜像成员上过滤Journal记录。当配置了Dejournal 过滤器后,异步镜像成员在redo journal前会自动调用Dejournal过滤器类的方法RunFilter,并传入以下参数: 1. MirrorDBName:镜像数据库名称; 2. GlobalReference:Global节点(包括下标); 3. RecordType:操作类型,为S(Set)和K(Kill); 4. Address:Journal记录在Journal文件中的偏移量。 我们可以利用自定义的Dejournal过滤器,捕获持久化多维数组(Global)的数据变化,并输出给外部系统。 注意:1. 如果仅为实现CDC,并不需要配置镜像备机。2. Dejournal过滤器只能配置在Reporting类型的异步镜像成员上。3. 镜像配置不在本文内容里,请参考文档:[IRIS] https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GHA_mirror[Caché] https://cedocs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GHA_mirror 编写Dejournal过滤器 InterSystems IRIS/Caché提供镜像Dejournal系统类 - SYS.MirrorDejournal。对于用户自定义过滤逻辑,通过继承于SYS.MirrorDejournal的子类来实现。 在Reporting异步镜像成员的%SYS命名空间(IRISLIB数据库)下创建SYS.MirrorDejournal的子类,命名应以Z或z开头,以避免升级时被覆盖,例如命名为ZCustom.MirrorDejournal。注意: IRISLIB数据库默认是只读的,需要先将其修改为可读写。 Override该类的RunFilter方法,将数据变更捕获的逻辑放在该方法里,并根据需要返回1或0。1代表这个global变更需要dejournal,0代表不需要。即便仅仅是为实现CDC,建议在Reporting异步镜像成员恢复所有数据,即让该方法返回1,从而不需要影响生产系统,直接从Reporting异步镜像成员上获取所有的变更数据。 例如,将global的数据变更记录在^CDCLog中: Class ZCustom.MirrorDejournal Extends SYS.MirrorDejournal { Method RunFilter( MirrorDBName As %String, GlobalReference As %String, RecordType As %String, Address As %Integer) As %Integer { Set ^CDCLog( $$I ($^CDCLog))=$lb(MirrorDBName,GlobalReference,RecordType,Address) Quit 1 } } 配置Dejournal过滤器 在Reporting异步镜像成员上,配置其镜像Dejournal过滤器为上面创建的过滤器类的名称。 后记 今天有人问到,如何获取变更的值和变更前的值。可以使用`$$$JRNNEWVAL(Address) 、$$$JRNOLDVAL(Address)`在上面的RunFilter方法中获取变更后和变更前的数据。注意,`$$$JRNNEWVAL(Address) 、$$$JRNOLDVAL(Address)`这2个宏定义在%syJrnRecord.inc文件里,因此需要将这个include文件加入ZCustom.MirrorDejournal类定义:Include %syJrnRecord 又,在InterSystems IRIS上修改并编译dejournal过滤器类后,需要重启异步镜像成员的Mirror,以使更改生效。 CDC系列 更多的CDC选项实现,请参考: 1. CDC系列之一 :使用Dejournal Filter在InterSystems IRIS/Caché上通过Mirroring实现CDC功能 2. CDC系列之二 :使用Dejournaling filter routine在Caché上通过Shadow实现CDC 3. CDC系列之三 :建立InterSystems IRIS/Caché的Global数据变更与SQL表记录的对应关系 4. CDC系列之四:使用DSTIME特性在InterSystems IRIS/Caché上实现CDC功能 很好的文章 学习一下
公告
Claire Zheng · 八月 2, 2022

你的问题是一个 #KeyQuestion(关键问题) 吗?

开发者们,大家好! 在此向您介绍开发者社区的一个新特性—— InterSystems开发者关键问题(Key Questions). 我们增加了一个新的 #Key Question 标签(#关键问题),用以显著标识与InterSystems数据平台有关的、影响重大的提问/问题。 每个月,InterSystems专家会选择一些这类问题,提出这些问题的社区成员将被授予荣誉奖励! 有哪些荣誉呢?详情如下! 什么是 #Key Question(#关键问题) ? 这个标签突出了关于如何使用InterSystems数据平台开发、测试、部署、管理等解决方案的问题,这些问题或富有洞察、或有趣、或最令人困惑等等。 谁来决定? InterSystems 专家(Expert)会审阅开发者社区的问题,并决定将哪些问题归为 #Key Questions(#关键问题)。 哪些问题会被审阅? 开发者社区的所有问题都会被纳入审阅范围。 你多久可以在开发者社区上看到新的 #Key Questions(#关键问题)? 我们的专家每个月都会选取一些问题并赋予 #Key Question(#关键问题)标签。 你会获得什么荣誉? 在Global Masters,你会获得新增荣誉徽章 "Key Question"。 开发者社区亮点:我们会在被选为 #Key Question(#关键问题)的问题下面,以@DC.Administration 账号添加评论。 提问赢取奖励积分, 开发者社区探索之夏,或许你的问题就是我们专家选取的下一个 #Key Question(#关键问题)! 关注标签 ,时刻了解详情!
文章
姚 鑫 · 四月 4, 2021

第十六章 导入SQL Code

# 第十六章 导入SQL Code 本章介绍如何将SQL代码从文本文件导入Intersystems SQL。导入SQL代码时,IntersystemsIris®数据平台使用动态SQL准备并执行每行SQL。如果遇到无法解析的代码行,则SQL导入跳过该行代码并继续准备和执行后续行,直到它到达文件的末尾。所有SQL代码导入操作导入到当前名称空间。 SQL导入主要用于导入数据定义语言(DDL)命令(例如`Create Table`),并使用`Insert`,`Update`和`Delete`命令填充表。 SQL导入确实准备并执行`SELECT`查询,但不创建结果集。 SQL导入可用于导入Intersystems SQL代码。它也可以用于代码迁移,从其他供应商导入SQL代码(`FDBMS`,`Informix`,`Interbase`,`MSSQLServer`,`MySQL`,`Oracle`,`Sybase`)。来自其他供应商的代码被转换为Intersystems SQL代码并执行。 SQL导入无法将所有SQL命令导入Intersystems SQL。它导入与SQL标准的Intersystems Iris实现兼容的那些命令和条款。不兼容的功能通常被解析,但忽略了。 SQL导入可以成功准备一个SQL查询 - 在适当的情况下创建相应的缓存查询 - 但它不会执行查询。 通过从`%system.sql.schema`类中调用相应的方法,执行SQL代码导入。导入SQL代码时,这些方法可以创建其他两个文件:`errors.log`文件,它记录解析SQL命令中的错误,以及一个不支持的。其中包含该方法无法识别为SQL命令的文字文本。 # 导入Intersystems SQL. 可以使用以下`%System.sql.schema`方法从文本文件中导入Intersystems SQL代码: - `ImportDDL()`是一个通用的SQL导入方法。此方法运行作为背景(非交互式)进程。要导入Intersystems SQL,请将“IRIS”指定为第一个参数。 - `run()`是一个Intersystems SQL导入方法。该方法从终端交互方式运行。它会提示指定导入文本文件的位置,创建`Errors.log`文件和U`nsupported.log`文件以及其他信息。 注意:此导入和执行SQL DDL代码不应与管理门户SQL接口的Import语句操作混淆。该操作以XML格式导入SQL语句。 以下示例导入Intersystems Iris SQL代码文件`Pathname MySQLCode.txt`,在当前命名空间中执行该文件中列出的SQL命令: ```java DO $SYSTEM.SQL.Schema.ImportDDL("IRIS",$USERNAME,"c:\temp\mysqlcode.txt",,1) ``` 默认情况下,`ImportDDL()`创建错误日志文件。此示例在与SQL代码文件中创建名为`mysqlcode_errors.log`的文件。第五个参数是一个布尔值,指定是否创建列出不受支持的SQL命令的文件。默认值为0.在此示例中,第五个参数设置为1,在与SQL代码文件相同的目录中创建名为`mysqlcode_unsupported.log`的文件。即使没有写入它们时,也会创建这些日志文件。 从终端执行`ImportDDL()`时,它首先列出输入文件,错误日志文件和不受支持的日志文件。然后,对于每个SQL命令,它显示一个列表,例如以下内容: ```sql SQL statement to process (number 1): CREATE TABLE Sample.MyStudents (StudentName VARCHAR(32), StudentDOB DATE) Preparing SQL statement... Executing SQL statement... DONE ``` 如果在任何SQL命令中发生错误,则终端显示错误,如以下示例所示: ```sql SQL statement to process (number 3): INSERT INTO Sample.MyStudents (StudentName,StudentDOB) SELECT Name, DOB FROM Sample.Person WHERE Age
问题
e Neo · 七月 31, 2023

VSCode 中InterSystems Server Manager 插件配置https方式连接提示Server Could not be accessed by ‘“_system”

vscode通过插件:intersystems Server Manager 连接测试开发环境,配置连接后无法使用 配置参数: "intersystems.servers": { "local": { "webServer": { "scheme": "http", "host": "127.0.0.1", "port": 52773 }, "test": { "webServer": { "scheme": "https", "host": "xxx.xxx.xxx.xxx", "port": 2443 }, "description": "test", "username": "_system" } 错误信息: Server Could not be accessed by ‘“_system” 看起来是_system用户没有通过vscode接入平台的权限,如果换成SuperUser之类的客户是否可以接入?
公告
Claire Zheng · 十一月 23, 2023

InterSystems开发者社区中文版第二届技术征文大赛获奖名单公布!

大家好! 终于到了宣布获奖名单的时间! 🏆InterSystems开发者社区中文版第二届技术征文大赛🏆(←点击链接进入参赛页面,浏览所有参赛文章)已经结束,此次大赛收到了来自8名参赛者的12篇参赛文章,最终进入评选的文章为10篇,感谢大家的积极参与! 以下是获奖名单! 专家提名奖:活动期间发布文章且成功参赛后,由InterSystems专家评选得出 🥇第一名,姚 鑫,作品:浅谈一下个人基于IRIS后端业务开发框架的理解 🥈第二名,王喆 👀, 作品:IRIS自动安装集群--manifest(安装清单) 🥉第三名,Yuxiang Niu,作品:关于Cache中查看关键锁的几种方式 🏆第四名,liu bo,作品:通过自定义数据类型实现参数统一验证优化重构代码 开发者社区奖:活动期间发布文章且成功参赛后,由社区成员点赞评选得出 🥇第一名,Yongfeng Hou ,作品:IRISHealth在DBServer和ECPApp之间启用SSL/TLS安全双向认证加密通信 🥈第二名,Meng Cao ,作品:使用支持SSL的ODBC连接IRIS数据库 🥉第三名,water huang,作品:进程表 🏆第四名,haoyinhang Hao ,作品:通过XSL自动生成消息模型 恭喜获奖者! 感谢大家的积极参与! 奖品领取 请获奖者点击【获奖者信息提交】提交信息,以便我们及时与您联系奖品寄送事宜。 提醒:填写前请准备好自己的社区主页链接(点击头像右上角进入个人主页,复制浏览器链接即可,如:https://cn.community.intersystems.com/user/claire-zheng)
文章
姚 鑫 · 八月 29, 2022

第十六章 维护本地数据库(一)

# 第十六章 维护本地数据库(一) 可以在管理`Portal` (`System Operations` > `databases`)的“数据库”页面查看和维护本地数据库。 在此页面,可以查看到以下信息: - 数据库一般信息` Databases General Information`-所有数据库的概述信息。 - 数据库空闲空间信息 `Databases Free Space Information` - 所有数据库的空闲空间信息 - 数据库详细信息页 `Database Details Page` -个别数据库的特定信息。 还可以通过维护操作增加该页面的可用空间。 本节中描述的大多数信息和操作也可以使用`^DATABASE`命令行实用程序找到并执行。 # 数据库的一般信息 数据库页面(系统操作 > 数据库)包含所有本地数据库的列表。对于每个本地数据库,会看到以下信息: #### 本地数据库信息 - `Name` - 数据库名称。 - `Directory` - 分配给数据库可以增长的最大大小,以 `GB` 为单位。 - `Max Size (GB)` - 分配给数据库可以增长的最大大小,以 `GB` 为单位。 - `Size (MB)` - 当前分配的数据库大小,以兆字节为单位。 注意:此字段衡量数据库的逻辑大小。因此,此处报告的大小可能低于数据库的物理大小,特别是对于 `IRISTEM` 数据库。 - `Status` - 数据库的状态:`mounted` (包括它有哪些权限)、`unmounted`或`dismounted`。 - 已安装的数据库是选择了启动时需要安装的数据库,因此必须安装该数据库才能使 `IRIS` 启动或成为镜像中的主数据库;在这种情况下,它总是在 `IRIS` 启动时被安装和访问。或者,它是一个先前未挂载的数据库,在访问它或显式挂载时已动态挂载;在这种情况下,它会一直挂载,直到明确卸载它或重新启动/停止 `IRIS`。 - 未挂载的数据库是未选择启动时需要挂载的数据库,因此不需要挂载 `IRIS` 即可启动或成为镜像主数据库,并且既未访问也未显式挂载;当访问它或显式安装它时,它会动态安装,并保持安装状态,直到显式卸载它或重新启动/停止 `IRIS`。 - 已卸载的数据库是已显式卸载的数据库;在显式安装它或重新启动/停止 `IRIS` 之前,它是不可访问的(也就是说,如果尝试访问已卸载的数据库,则不会动态安装它)。要永久卸载数据库,您必须将其从配置中删除。 - `Encrypted` - 指示数据库是否已加密。 - `Journal` - 指示数据库中的全局变量是用 `Y` 还是 `N` 记录的。 此外,该页面包含一个过滤栏,可以使用它来控制显示的数据库数量。例如,要仅列出系统数据库,可以在 `Filter:` 文本框中输入 `IRIS*`;和/或要每页仅列出五个数据库,请在页面大小:文本框中输入 `5`;和/或将显示的行数限制为 `3`,在 `Max rows`: 文本框中输入 `3`(在 `Results` 字段中显示带有数字的 `+` 号表示存在满足指定条件的其他数据库,但它们不会显示)。 # 数据库可用空间信息 管理数据库中的可用空间(空块)是数据库维护的一个重要方面。要查看可用空间信息,可以显示管理门户的可用空间视图或使用 `^%FREECNT` 实用程序。请记住,正常操作中数据库的大小和可用空间属性会不断变化,门户网站或实用程序在给定时间点报告的数字只是近似值。 ## 使用管理门户显示可用空间信息 要显示可用空间信息,其中显示有关每个本地数据库上可用空间量的信息,请导航到数据库页面(系统操作 > 数据库)并单击可用空间视图单选按钮。下表描述了显示的信息: #### 本地数据库可用空间信息 - `Name` - 数据库名称。 - `Directory` - 数据库的主卷所在的系统目录。 - `Max Size` - 数据库可以增长到的最大分配大小,以 `GB` 为单位。创建数据库时默认为无限制。 - `Size` - 当前分配的数据库大小,以兆字节为单位。 注意:此字段衡量数据库的逻辑大小。因此,此处报告的大小可能低于数据库的物理大小,特别是对于 `IRISTEM` 数据库。 - `Expansion Size` - 扩展数据库的大小(以 `MB` 为单位)。创建数据库时,默认和推荐设置为零 (`0`),这表示使用系统默认值(当前大小的 `12%` 或 `10 MB`,以较大者为准)。在此设置下,扩展大小不会大于 1GB。 - `Available` - 数据库中可用的可用空间量(以 `MB` 为单位)。 - `%Free` - 数据库中可用空间的百分比。 - `Disk Free Space` - 卷上的可用空间量。 - `Status` - 目录的状态,指示数据库是否已挂载以及具有哪些权限。 # 使用 ^%FREECNT 显示可用空间信息 `IRIS` 还提供了 `^%FREECNT` 实用程序,可以通过在终端中输入 `do` `^%FREECNT` 来运行该实用程序,以显示数据库中的可用空间。 在 `%SYS` 命名空间中使用 `^%FREECNT` 时,可以选择通过在提示符处输入星号 (`*`) 来显示所有数据库的可用空间,或者输入一个数据库目录名称。例如: ```java %SYS>do ^%FREECNT Database directory to show free space for (*=All)? * Databases Selected ------------------ c:\intersystems\irishealth\mgr\ c:\intersystems\irishealth\mgr\enslib\ c:\intersystems\irishealth\mgr\hscustom\ c:\intersystems\irishealth\mgr\hslib\ c:\intersystems\irishealth\mgr\hssys\ c:\intersystems\irishealth\mgr\irisaudit\ c:\intersystems\irishealth\mgr\irislib\ c:\intersystems\irishealth\mgr\irislocaldata\ c:\intersystems\irishealth\mgr\iristemp\ c:\intersystems\irishealth\mgr\user\ Device: Right margin: 80 => Database Free Space Aug 20 2022 12:30 PM Database Max Size Size Available %Free Disk Free c:\intersystems\irishealth\mgr\ 无限制 113MB 19MB 16.81 31.67GB c:\intersystems\irishealth\mgr\enslib\ 无限制 208MB 16MB 7.69 31.67GB c:\intersystems\irishealth\mgr\hscustom\ 无限制 21MB 8.7MB 41.42 31.67GB c:\intersystems\irishealth\mgr\hslib\ 无限制 1.19GB 132MB 10.82 31.67GB c:\intersystems\irishealth\mgr\hssys\ 无限制 21MB 8.9MB 42.38 31.67GB c:\intersystems\irishealth\mgr\irisaudit\ 无限制 11MB 10.0MB 90.9 31.67GB c:\intersystems\irishealth\mgr\irislib\ 无限制 356MB 0.51MB .14 zn "user" USER>do ^%FREECNT Databases Selected ------------------ c:\intersystems\cache\mgr\user\ Device: Right margin: 80 => Cache Database Free Space Aug 20 2022 12:32 PM Database Max Size Size Available %Free Disk Free c:\intersystems\cache\mgr\user\ 无限制 11MB 9.4MB 85.45 31.67G B ``` **注意:`
文章
姚 鑫 · 九月 17, 2022

第三十五章 在 Windows 上使用 IRIS(二)

# 第三十五章 在 Windows 上使用 IRIS(二) # IRIS 启动器 `Microsoft Windows` 平台上的主要`IRIS` 界面是 `IRIS` 启动器。从 `IRIS` 启动器,可以启动所有 `IRIS` 配置和管理工具。还可以从快捷方式或命令行调用每个启动器命令。 相应地,可以从 `Windows` 程序菜单中启动许多 `IRIS` 工具,方法是指向 `IRIS` 文件夹,然后指向启动 `IRIS` 以获得适当的 `IRIS` 实例名称。 当在基于 `Windows` 的系统上启动 `IRIS` 时, `IRIS` 启动器图标会出现在任务栏的系统托盘中。 当单击 `IRIS` 启动器时,会出现一个菜单,其中包含使用 `ObjectScript` 实用程序和编程环境的命令。 下表描述了 IRIS 启动器菜单中可用的命令。 IRIS 启动器命令| 描述 ---|--- `Getting Started`|显示教程、发行说明、文档和其他相关信息的链接 `Start IRIS`|启动菜单项后方括号中指定的默认实例,例如 `[ii2081]`。如果 `IRIS` 服务器已经启动,这个选项会变暗——它不可用。 `Stop InterSystems`|关闭或重新启动本地 `IRIS` 实例。如果 `IRIS` 服务器已停止,此选项将显示为灰色——它不可用。 `Studio`|创建、编辑、删除和编译 `IRIS` 类定义和例程。 `Terminal`|调用 `IRIS` 的命令行解释器。 `Management Portal`|执行常见的系统管理任务。创建数据库和命名空间,并调整所有 `IRIS` 配置设置。显示类、全局变量和例程,以及用于管理它们的函数。显示表和视图,执行查询和 `SQL` 管理功能。 `Documentation`|显示 `IRIS` 在线文档。 `Preferred Server [server name]`|显示远程服务器列表并使用子菜单上的“添加/编辑”命令维护服务器连接。首选服务器出现在括号中,并且在服务器列表中旁边有一个复选标记。 `About`|显示 `IRIS` 版本和构建信息。 `Exit`|从系统托盘中删除`IRIS` 启动器图标;这不会停止 `IRIS`。当实例重新启动时,启动器会重新出现。 # 启动 IRIS 要启动 `IRIS`,请在系统级别运行启动程序。此过程使用默认配置文件或指定的配置文件运行。 **注意:如果在启动 `IRIS` 时遇到任何问题,请按照“监控指南”的“监控日志文件”部分中的说明查看 `messages.log` 文件。** 要在 `Windows` 平台上启动 `IRIS`,请从 `IRIS` 启动器中选择启动 `IRIS`。这将使用指定的配置文件启动 `IRIS` 实例。当 `IRIS` 未运行时, `IRIS` 启动器图标显示为灰色。 如果 `IRIS` 启动器不在系统托盘中,请从 `Windows` 程序菜单中选择 `IRIS` 文件夹并为该实例启动 `IRIS`。要将启动器返回到系统托盘,请转到 `install-dir/bin` 目录并双击 `iristray.exe` 文件。 或者,可以从“开始”菜单上“运行”命令的“打开”框中的 `install-dir/bin` 目录输入这些命令。例如,要从 `MyIris\bin` 目录启动名为 `MyIris` 的实例,请输入以下命令: ``` c:\MyIris\bin\iris start iris ``` # 停止 `IRIS` 通常让 `IRIS` 系统保持运行。但是,如果操作系统需要重新启动,请在关闭系统之前停止 `IRIS`。诸如备份和数据库修复实用程序等维护任务不需要停止 `IRIS`。 从 `IRIS` 启动器菜单中单击停止 以关闭或重新启动本地 `IRIS` 实例。默认情况下,此选项使用默认关闭例程立即关闭(或重新启动) `IRIS`。但是,它还提供了设置延迟关闭的计时器、运行用户定义的关闭例程、向服务器上的用户广播警告消息以及关闭而不进行故障转移的选项。可以从 `Windows` 程序菜单运行相同的过程。为该实例名称选择 `IRIS` 文件夹并停止 `IRIS`。一旦倒计时达到 `0` 并且关机程序已开始,将无法取消关机。 ![image](B69E2B79E8DD4AB1BB966D8CE3F1017F) **重要提示:`InterSystems` 建议运行 `Stop IRIS` 来关闭 `IRIS` 以确保其正确关闭。** ## 删除 `Stop InterSystems` 命令 为防止意外执行 `Stop InterSystems` 命令,可以通过从相应 `IRIS` 实例的 `install-dir/bin` 目录中删除 `irisstop.exe` 文件来从 `IRIS` 启动器中删除该命令。还可以从“开始”菜单中的相应 `IRIS` 实例中删除停止 `InterSystems` 快捷方式。指向 `Programs` 和 IRIS 实例名称,然后右键单击 `Stop` 并单击 `Delete`。 # 从命令提示符控制 `IRIS` 可以通过运行 `install-dir\bin` 目录中的 `iris.exe` 程序从 `Windows` 命令提示符控制 `IRIS` 实例。 要显示此命令的最新帮助信息,请从 `IRIS install-dir\bin` 目录调用 `iris` 帮助。例如: ```java C:\InterSystems\IRISHealth\bin>iris help usage: iris start [] to start instance , optionally using the specified .cpf file. An optional /EmergencyId=Username,Password can be used to start InterSystems IRIS in emergency mode. When the EmergencyId argument is supplied, the system starts up in emergency mode in which only the baseline databases are mounted and access to InterSystems IRIS is governed by InterSystems IRIS login using that username and password. Emergency mode is supplied to give access in the event that privileged users are not available or their password is forgotten. Emergency startup is only available from an administrator account. When InterSystems IRIS is started in emergency mode, the IRIS control service is not used. This means that if you log out of Windows, all the InterSystems IRIS processes will immediately exit. or: iris startnostu to start instance without running ^STU. or: iris stop to shut down instance . or: iris stopnoshut to shut down instance without running user shutdown routines. or: iris stopstart to shut down and restart instance . Note: An optional /nofailover argument can be specified for stop, stopnoshut, or stopstart to not trigger a mirror failover. or: iris force to force down instance . or: iris [ run OR console OR terminal ] to run InterSystems IRIS in programmer mode with [ no-device OR console OR terminal ] for $Principal. or: iris [ run OR console OR terminal ] to run InterSystems IRIS routine in application mode with [ no-device OR console OR terminal ] for $Principal. or: iris [ run OR console OR terminal ] to run InterSystems IRIS routine in in application mode with [ no-device OR console OR terminal ] for $Principal. or: iris runw [] to run InterSystems IRIS routine in application mode with no input/output device for $Principal using the optional namespace. When run from a batch script, iris will wait for the InterSystems IRIS process to terminate before returning. The exit code from the InterSystems IRIS process will be returned by iris. Note: An optional /Title="Title string" can specify the console or terminal title bar text. or: iris iristraystart to start IRISTray for instance . or: iris iristraystop to stop IRISTray for instance . or: iris licmanagerstop to stop licmanager running in instance . or: iris all [> outputfile] to list all installed instances. or: iris allw [> outputfile] to list (wide format) all installed instances. or: iris list [] [> outputfile] to list information about all installed instances or the specified instance. or: iris qlist [] [> outputfile] to display a quick list of information about all installed instances or the specified instance, in a format suitable for parsing in command scripts. The record for an instance contains fields separated by "^" (carats): Field 1: instance name Field 2: instance directory Field 3: version identifier Field 4: current status for the instance Field 5: configuration file name last used Field 6: SuperServer port number Field 7: WebServer port number Field 8: JDBC Gateway port number Field 9: Instance status (e.g., ok, warn, alert) Field 10: Product name of the instance Field 11: Mirror Member Type (e.g., Failover, Disaster Recovery) Field 12: Mirror Status (e.g., Primary, Backup, Connected) or: iris serverlist [> outputfile] to list information about all defined servers. Note: When [> outputfile] is present, output is redirected to the file instead of being displayed on the terminal. or: iris telnetstop to stop the InterSystems IRIS TELNET daemon. or: iris telnettrace to toggle the TELNET trace state. or: iris iristrmdstop to stop the InterSystems IRIS terminal daemon. Note: iris often displays error information in a message box. You can suppress the message box containing error information by adding "quietly" (without the quotation marks) as the final argument to the iris command. or: iris help [display] to show this help. If display is specified the help is displayed in a browser window. ``` `iris help` 命令将在终端中显示最新的帮助信息。还可以通过将 >outputfilename 添加到 `iris` 帮助命令,将帮助信息保存到 `intsall-dir\bin` 目录中的文件中。例如: ``` C:\MyIris\bin>iris help>helpinformation ``` # 在命令行上连接到 `IRIS` 可以使用 `iris` 终端命令在命令行上登录 `IRIS` 实例。
文章
Michael Lei · 一月 17, 2023

HTAP 数据平台插入和查询速度测试

每秒插入大量记录,同时同步进行实时查询的能力称为**混合事务分析处理 (HTAP)**。 它也被称为 Transactional analytics 或 Transanalytics 或 Translytics,当存在来自工业物联网传感器的持续实时数据流或股票市场的波动数据时,它是非常有用的技术,并且允许实时或接近实时地查询这些数据集。 在本文中我将分享我在不同平台上运行带有测试流数据的演示,同时进行持续插入和持续查询,看看每个平台上有何不同反应,如在每个平台上输入和输出数据的速度以及它们的性能。 我在本演示中试验的平台包括:InterSystems IRIS、MariaDB 和 MySQL。 试验结果 20秒的测试时间里: | | 插入数据条数 | 查询次数 | 插入数据大小 | 查询数据大小 | | --- | ------ | ---- | ------ | ------ | | IRIS | 708,000 | 59,000 | 184M | 15.217M | | MariaDB | 98,000 | 23,679 | 25M | 6.69M | | MySQL | 38,000 | 11,947 | 9.869M | 2.45M | 本演示的视频: 需要环境 Docker 和 Docker Compose 本地运行 我们在三个不同的平台(MySQL、MariaDB 和 InterSystems IRIS 社区版)上运行记录的摄取和查询速度测试。 为此,需要按如下所示为每个平台下载容器的 YAML 文件: 1. 使用 MySQL 运行速度测试 1. 下载 YAML 文件: 2. 在上述 YAML 文件所在的文件夹中打开命令提示符并运行命令,为 MySQL 构建 docker 镜像:**docker-compose -f ./docker-compose-mysql.yml up** 3. 在浏览器选项卡中输入 以查看演示 UI。 2. 使用 MariaDB 运行速度测试 1. 下载 YAML 文件: 2. 在上述 YAML 文件所在的文件夹中打开命令提示符并运行命令,为 MariaDB 构建 docker 镜像:**docker-compose -f ./docker-compose-mariadb.yml up** 3. 在浏览器选项卡中输入 以查看演示 UI。 3. 使用 InterSystems IRIS 运行速度测试 1. 下载 YAML 文件: 2. 在上述 YAML 文件所在的文件夹中打开命令提示符并运行命令,为 InterSystems IRIS 构建 docker 镜像:**docker-compose up** 3. 在浏览器选项卡中输入 以查看演示 UI。 从 localhost 运行测试后,可以看到以每秒钟摄取和查询的记录数形式显示的结果。 与 MySQL 和 MariaDB 相比,InterSystems IRIS 的数值更令人印象深刻。 异常 在尝试为每个平台运行 docker 容器时,可能会出现以下错误: “Missing Linux capabilities”(缺少 Linux 功能) ![](/sites/default/files/inline/images/error_4.png)   可以在 YAML 文件的 htapirisdb 部分添加以下行,以跳过 Linux 功能检查: **command: --check-caps false** _(@Robert.Kuszewski, 2022)_ __如下所示:![](/sites/default/files/inline/images/ss_0.png)   每个平台上的实时测试运行: 每个平台的速度测试结果 InterSystems IRIS: ![](/sites/default/files/inline/images/iris.png)   MariaDB: ![](/sites/default/files/inline/images/mariadb.png)   MySQL: ![](/sites/default/files/inline/images/mysql.png)  参考文献 1. [intersystems.com](http://intersystems.com). (Amir, S.). _InterSystems Open Exchange_. [在线] 网址: [访问日期:2022 年 9 月 20 日]。 2. Kuszewski, B. (2022). _[在 Docker 20.10.14+使用 InterSystems IRIS 容器_.](https://cn.community.intersystems.com/post/在-docker-201014-使用-intersystems-iris-容器) [在线] InterSystems 开发者社区。 英文原文: [访问日期:2022 年 10 月 20 日]。 ‌