搜索​​​​

清除过滤器
文章
Lele Yang · 二月 18, 2022

FAQ 常见问题系列--系统管理篇 InterSystems产品的内存使用

InterSystems的产品包括Caché/Ensemble/Health Connect/IRIS/IRIS for Health,均基于进程,当它们及在它们之上开发的应用运行时,您能在操作系统上看到大量cache/irisdb进程。下面以InterSystems IRIS为例,来说明下InterSystems产品的内存使用。 InterSystems IRIS进程的内存使用主要有以下两大类, 第一类,进程私有内存。 私有内存只由该进程使用,且会为每个进程单独分配。进程初始时会被分配128KB的内存空间,随着进程运行根据需要,这个内存空间会自动扩展。InterSystems IRIS对于进程内存使用的限制是Maximum Per-Process Memory, 该参数的设置位置在系统管理门户SMP,System > Configuration > Memory and Startup,允许的取值范围是256KB到2147483647KB(2TB)。如果系统遇到<STORE>错误,那么可以尝试增加该数值,来解决进程运行时无法申请到更多内存的问题。从InterSystems IRIS开始,我们推荐将该值设置为-1, 也就是取上限2TB。 更多InterSystems IRIS进程内存使用可参见如下在线文档"Process Memory in InterSystems Products",https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=AVMEM 第二类,共享内存。共享内存是一个在进程之间共享的内存区域,因此内存中只有一个实体。 InterSystems中的共享内存包括如下,1. Database Cache, 也就是我们常说的Global Buffer,设置位置在SMP,System > Configuration > Memory and Startup。 2. Routine Cache, 也就是Routine Buffer,设置位置同上。3. gmheap,设置位置在SMP,System > Configuration > Advanced Memory Settings。我们通常所说的Process Table和Lock Table占用的内存也是从这部分内存中划分出来的,如果遇到Lock Table Full的问题,需要增加locksiz大小,请注意同步调大gmheap。 InterSystems IRIS在实例启动时,会首先尝试为这部分共享内存分配Huge Page/Large Page,以获得最佳性能实践,如果分配成功,您可以在日志文件messages.log中看到如下类似内容, 11/28/21-21:00:09:081 (41752) 0 [Generic.Event] Allocated 35046MB shared memory (large pages): 31000MB global buffers, 1024MB routine buffers 另外,除以上两大类之外,还有一类特殊的内存使用, 1.长字符串内存使用InterSystems IRIS默认启用长字符串,最多支持3,641,144个字符,当进程使用长字符串时,为其分配的内存直接来自于操作系统的malloc() buffer,它不占用进程的私有内存空间,因此为字符串实际分配的内存不受限于Maximum Per-Process Memory。 综上,InterSystems IRIS所使用的内存总量是所有InterSystems IRIS进程使用的内存之和,也就等于,(进程私有内存 * 进程数) + Global Buffer + Routine Buffer + gmheap + 长字符串总体使用内存。
文章
Jingwei Wang · 七月 14, 2022

精华文章 InterSystems SQL 的使用 - 第一部分 - 架构及特性介绍

InterSystems SQL为存储在IRIS数据库中的数据提供不折不扣的、标准的关系型访问。 InterSystems SQL具有以下优点。 高性能和可扩展性 - InterSystems SQL的性能和可扩展性优于其他关系型数据库产品。 与IRIS对象技术的集成 - InterSystems SQL与IRIS对象技术紧密集成。你可以混合使用关系型和对象型的数据访问,而不牺牲任何一种方法的性能。 低维护 - 与其他关系型数据库不同,IRIS应用程序不需要在部署的应用程序中重建索引和压缩表。 支持标准SQL查询 - InterSystems SQL支持SQL-92标准语法和命令。 你可以将InterSystems SQL用于许多目的,包括。 基于对象和Web应用程序 - 你可以在InterSystems Object和Caché Server Page应用程序中使用SQL查询,以执行强大的数据库操作,如查询和搜索。 在线事务处理 - InterSystems SQL为插入和更新操作以及通常在事务处理应用程序中发现的查询类型提供出色的性能。 BI和数据仓库 - IRIS多维数据库引擎和位图索引技术的结合使其成为数据仓库式应用的绝佳选择。 点对点查询和报告 - 你可以使用InterSystems SQL包含的全功能ODBC和JDBC驱动来连接到流行的报告和查询工具。 企业应用集成 - InterSystems SQL网关使你能以SQL方式无缝访问存储在符合ODBC或JDBC标准的外部关系型数据库中的数据。这使得在IRIS应用程序中整合各种来源的数据变得很容易。 架构 IRIS SQL的核心由以下部分组成。 统一数据字典 - 所有元信息的存储库,以一系列的类定义的形式存储。自动为每个存储在统一字典中的持久类创建关系访问(表)。 SQL处理器和优化器 - 是一套解析和分析SQL查询的程序,为给定的查询确定最佳搜索策略,并生成执行查询的代码。 InterSystems SQL Server - 一组InterSystems IRIS服务器进程,负责与InterSystems ODBC和JDBC驱动的所有通信。它还管理着一个常用查询的缓存;当同一个查询被多次执行时,它的执行计划可以从查询缓存中检索出来,而不必由优化器再次处理。 特性 InterSystems SQL包括一整套标准的关系型功能。这些功能包括。 定义表和视图的能力(DDL或数据定义语言)。 对表和视图执行查询的能力(DML或数据操作语言)。 执行事务的能力,包括INSERT、UPDATE和DELETE操作。当执行并发操作时,InterSystems SQL使用行级锁。 能够定义和使用索引以提高查询效率。 能够使用各种各样的数据类型,包括用户定义的类型。 能够定义用户和角色并给他们分配权限。 能够定义外键和其他完整性约束。 能够定义INSERT, UPDATE, 和DELETE触发器。 定义和执行存储程序的能力。 能够以不同的格式返回数据。ODBC模式用于客户端访问;显示模式用于基于服务器的应用程序(如CSP页面)。 SQL-92标准 InterSystems SQL支持完整的入门级SQL-92标准,但有以下例外: 不支持在表定义中添加额外的CHECK约束。 不支持SERIALIZABLE隔离级别。 分隔标识符不区分大小写;标准规定它们应该区分大小写,例如create table "user info" (id number); 和 create table "USER INFO" (id number); 在InterSystems SQL中不区分大小写。 在包含HAVING子句的子查询中,人们应该能够引用HAVING子句中 "可用 "的min(),max(),avg()。这不被支持。即 aggregate函数无法在 WHERE 或 GROUP BY 子句中使用。例如Select DeptID , Avg(Salary) From Employee GROUP BY DeptID, Avg(Salary) HAVING Avg(Salary) > 1000, 但是可以使用Select DeptID , Avg(Salary) From Employee GROUP BY DeptID HAVING Avg(Salary) > 1000 SQL-92标准在算术运算符优先级方面是不精确的;关于这个问题的假设在不同的SQL实现中是不同的。InterSystems SQL支持两种系统范围内的SQL算术运算符优先级的选择。 默认情况下,InterSystems SQL严格按照从左到右的顺序解析算术表达式,没有运算符优先级。这与ObjectScript中使用的惯例相同。因此,3+3*5=30。你可以使用圆括号来强制执行所需的优先级。因此,3+(3*5)=18。 你可以配置InterSystems SQL使用ANSI优先级来解析算术表达式,它给乘法和除法运算符的优先级高于加法、减法和连接运算符。因此,3+3*5=18。如果需要,你可以使用圆括号来覆盖这个优先级。因此,(3+3)*5=30。 扩展功能 InterSystems SQL支持一些有用的扩展。其中许多都与InterSystems IRIS同时提供对象和关系访问数据的事实有关。 其中一些扩展包括: 支持用户定义的数据类型和函数。 用于跟踪对象引用的特殊语法。 支持子类化和继承。 支持对存储在其他数据库中的外部表的查询。 控制用于表的存储结构的一些机制,以实现最大的性能。 支持ODBC,JDBC 使用JDBC驱动和ODBC驱动 嵌入式SQL 在ObjectScript中,InterSystems SQL支持嵌入式SQL:在方法(或其他代码)的内部放置SQL语句的能力。 使用嵌入式SQL,你可以查询一条记录,或者定义一个游标并使用它来查询多条记录。 嵌入式SQL是被编译的;它可以与ObjectScript例程同时被编译(默认),或者你可以将嵌入式SQL的编译推迟到运行时。 当与IRIS的对象访问能力结合使用时,嵌入式SQL是相当强大的。例如,下面的方法可以找到具有给定Name值的记录的RowID。 ClassMethod FindByName(fullname AS %String) { &sql(SELECT %ID INTO :id FROM Sample.MyTable WHERE name= :fullname) IF SQLCODE <0 {SET baderr="SQLCODE ERROR:"_SQLCODE_" "_%msg RETURN baderr} ELSEIF SQLCODE=100 {SET nodata="Query returns no data" RETURN nodata} RETURN "RowID="_id } Dynamic SQL 作为标准库的一部分,InterSystems IRIS提供了一个%SQL.Statement类,你可以用它来执行动态(即在运行时定义)的SQL语句。你可以在ObjectScript方法中使用动态SQL。例如,下面的方法查询指定数量的21世纪出生的人。该查询选择所有在1999年12月31日以后出生的人,按出生日期对所选记录进行排序,然后选择前 x 条记录。 ClassMethod Born21stC(x) [language=objectscript] { set myquery =2 set myquery(1) = "SELECT TOP ? Name, %EXTERNAL(DOB) FROM Sample.Person " set myquery(2) = "WHERE DOB >58073 ORDER BY DOB" set tStatement = ##class(%SQL.Statement).%New() set qStatus = tStatement.%Prepare(.myquery) IF qStatus '=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT} SET rset = tStatement.%Execute(x) Do rset.%Display() WRITE !, "End of data" } 当你prepare一个查询时,该查询的优化版本被存储为一个缓存的查询。这个缓存的查询在随后的查询调用中被执行,避免了每次执行查询时重新优化的开销。 限制 注意InterSystems SQL的以下限制: NLS可以用来指定$ORDER的行为,用于特定的国家地区语言行为的Global,以及当前运行进程中的本地变量。InterSystems SQL可以在任何国家语言区划内使用,并且运行良好。然而,目前InterSystems SQL的一个限制是,对于任何特定的进程,它所引用的所有相关的globals都必须使用与当前进程locale相同的国家locale。
文章
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 多篇技术论文并合着了三本技术书籍。 查看原文
文章
Jingwei Wang · 七月 29, 2022

InterSystems SQL 的优化 - 第一部分 - 定义和构建索引

什么时候使用索引 索引提供了一种机制,通过维护常用数据的分类子集来优化查询。确定哪些字段应该被编入索引需要一些思考:太少或错误的索引,关键查询会运行得太慢;太多的索引会减慢INSERT和UPDATE的性能(因为索引值必须被设置或更新)。 索引什么 为了确定添加索引是否能提高查询性能,从管理门户的SQL界面运行查询,并在Performance中注意 global引用的数量。添加索引,然后重新运行查询,注意 global引用的数量。一个有用的索引应该减少 global引用的数量。你可以通过使用%NOINDEX关键字作为WHERE子句或ON子句条件的前言来阻止索引的使用。 你应该对JOIN中指定的字段(属性)进行索引。例如,LEFT OUTER JOIN从左表开始,然后查看右表,因此,你应该对右表的字段进行索引。在下面的例子中,你应该为T2.f2编制索引。一个INNER JOIN应该在两个ON子句字段上都有索引。 FROM Table1 AS T1 LEFT OUTER JOIN Table2 AS T2 ON T1.f1 = T2.f2 如果查询计划中的第一个项目是 "read master map",或者查询计划调用的模块的第一个项目是 "read master map",那么查询的第一个map就是master map而不是索引map。因为主图读取的是数据本身,而不是数据的索引,这几乎总是表明一个低效的查询计划。除非该表相对较小,否则你应该创建一个索引,以便当你重新运行这个查询时,查询计划的第一张map显示 "read index map"。 你应该为WHERE子句中指定的相等条件的字段建立索引。 你可能希望为WHERE子句范围条件中指定的字段,以及GROUP BY和ORDER BY子句中指定的字段建立索引。 在某些情况下,基于范围条件的索引会使查询变慢。如果绝大多数的记录都满足指定的范围条件,就会出现这种情况。例如,如果查询子句WHERE Date < CURRENT_DATE被用于一个数据库,其中大部分记录来自以前的日期,在Date上建立索引实际上会降低查询速度。这是因为查询优化器假定范围条件将返回相对较少的行,并针对这种情况进行优化。你可以通过在范围条件前加上%NOINDEX来确定是否发生了这种情况,然后再次运行查询。 如果你使用一个索引字段进行比较,那么在比较中指定的字段应该具有和它在相应索引中相同的collation类型。例如,在SELECT的WHERE子句或JOIN的ON子句中的Name字段应该具有与为Name字段定义的索引相同的排序方式。如果字段的排序和索引的排序不匹配,那么索引的有效性就会降低,或者根本就不能使用。 在map中存储的表 一个SQL表被存储为一组map。每个表都有一个主图,包含了表中的所有数据;表还可能有其他图,如索引图和位图。每个map可以被想象成一个多维global,一些字段的数据在一个或多个子标中,其余字段存储在节点值中。这些子标控制着哪些数据被访问。 对于主映射,RowID或IDKEY字段通常被用作映射子标。 对于索引map,通常使用其他字段作为前导下标,RowID/IDKEY字段作为额外的低级下标。 对于一个位图,位图层可以被认为是一个额外的RowID下标层。然而,位图只能用于正整数的RowIDs。 Master Map 系统为每个表自动定义了一个主图(Data/Master)。master map不是一个索引,它是一个使用其map下标字段直接访问数据本身的map。默认情况下,主图的下标字段是系统定义的RowID字段。默认情况下,这种使用RowID字段的直接数据访问是用SQL map名称(SQL索引名称)IDKEY表示的。 默认情况下,一个用户定义的主键不是IDKEY。这是因为使用RowID整数的Master Map查询几乎总是比通过主键值查询更有效率。然而,如果你指定主键是IDKEY,主键索引就会被定义为表的主映射,SQL Map Name是主键SQL索引的名称。 对于一个单字段的主键/IDKEY,主键索引是Master Map,但是Master Map的数据访问列仍然是RowID。这是因为记录的唯一主键字段值和它的RowID值之间存在一对一的匹配,而且RowID被认为是更有效的查询。对于多字段主键/IDKEY,主映射被赋予主键索引名称,主映射的数据访问列是主键字段。 选择一个索引类型 下面是在位图索引和标准索引之间进行选择的一般指导原则: 一般来说,可以对这些类型使用标准索引:主键、外键、唯一键、关系、简单的对象引用。 否则,位图索引通常是比较好的(假设该表使用系统分配的数字ID号)。 其他因素:每个属性上的独立位图索引通常比多个属性上的位图索引有更好的性能。这是因为SQL引擎可以使用AND和OR操作有效地组合独立的位图索引。 如果一个属性(或一组你真正需要一起索引的属性)有超过10,000-20,000个不同的值(或值组合),请考虑标准索引。然而,如果这些值的分布非常不均匀,以至于少量的值占了相当一部分行,那么位图索引可能会好得多。一般来说,我们的目标是减少索引所需的总体大小。 定义和建立索引 以下是建立索引的原则: 你可以在表中的字段值上定义一个索引,或者在类中的相应属性上定义一个索引。 你也可以在几个字段/属性的组合值上定义一个索引。无论你是用SQL字段和表的语法,还是用类的属性语法来定义,都会创建相同的索引。 当某些类型的字段(属性)被定义时,InterSystems IRIS会自动定义索引,例如主键和唯一值属性。 你可以为同一个字段(属性)定义一个以上的索引,为不同的目的提供不同类型的索引。 每当对数据库进行数据插入、更新或删除操作时,InterSystems IRIS都会填充和维护索引(默认情况下),无论是使用SQL字段和表语法,还是使用类属性语法。你可以覆盖这个默认值(通过使用%NOINDEX关键字)来快速对数据进行修改,然后作为一个单独的操作建立或重建相应的索引。你可以在用数据填充一个表之前定义索引,你也可以为一个已经填充了数据的表定义索引,然后作为一个单独的操作填充(建立)索引。 InterSystems IRIS在准备和执行SQL查询时,会使用可用的索引。默认情况下,它选择使用哪些索引来优化查询性能。你可以覆盖这个默认值,以防止在特定的查询或所有的查询中使用一个或多个索引,视情况而定。 索引属性 每个索引都有一个唯一的名字。这个名称用于数据库管理目的(报告、建立索引、删除索引等等)。像其他SQL实体一样,一个索引也有一个SQL索引名和一个相应的索引属性名;这些名称在允许的字符、大小写敏感度和最大长度上有所不同。 如果使用SQL CREATE INDEX命令定义,系统会生成一个相应的索引属性名。如果使用持久化类定义,SqlName关键字允许用户指定一个不同的SQL索引名称(SQL映射名称)。管理门户SQL界面的目录详情显示了每个索引的SQL索引名称(SQL映射名称)和相应的索引属性名称(索引名称)。 索引类型是由两个索引类关键字Type和Extent定义的。InterSystems IRIS可用的索引类型包括: 标准索引(类型=索引)- 一个持久的数组,将索引值与包含该值的行的RowID联系起来。任何没有明确定义为位图索引、位片索引或范围索引的索引都是一个标准索引。 位图索引(类型=位图)--一种特殊的索引,它使用一系列的bitstring来表示对应于给定索引值的RowID值的集合;InterSystems IRIS包括一些针对位图索引的性能优化。 位片索引(类型=位片)--一种特殊的索引,能够非常快速地评估某些表达式,如sum范围条件。某些SQL查询会自动使用位片索引。 Extent Indices(位图范围索) - 一个范围内所有对象的索引。 一个表(类)的最大索引数是400。 系统自动定义的索引 当你定义一个表时,系统会自动定义某些索引。以下索引在你定义表时自动生成,并在你添加或修改表数据时被填充。如果你定义了: 一个不是IDKEY的主键,系统会生成一个Unique类型的相应索引。主键索引的名称可以是用户指定的,也可以是从表的名称中衍生出来的。例如,如果你定义了一个未命名的主键,相应的索引将被命名为tablenamePKEY#,其中#是每个唯一键和主键约束的一个连续的整数。 一个UNIQUE字段,InterSystems IRIS为每个UNIQUE字段生成一个索引,名称为tablameUNIQUE#,其中#是每个唯一键和主键约束的连续整数。 一个UNIQUE约束,系统为每个具有指定名称的UNIQUE约束生成一个索引,为共同定义一个唯一值的字段生成索引。 一个分片Shard Key,系统为分片键字段生成一个索引,名为ShardKey。 你可以通过管理门户的SQL目录细节标签查看这些索引。CREATE INDEX命令可以用来添加一个UNIQUE字段约束;DROP INDEX命令可以用来删除一个UNIQUE字段约束。 默认情况下,系统会在RowID字段上生成IDKEY索引。定义一个IDENTITY字段并不产生索引。然而,如果你定义了一个IDENTITY字段并使该字段成为主键,InterSystems IRIS会在IDENTITY字段上定义IDKEY索引并使其成为主键索引。这在下面的例子中显示。 CREATE TABLE Sample.MyStudents ( FirstName VARCHAR(12), LastName VARCHAR(12), StudentID IDENTITY, CONSTRAINT StudentPK PRIMARY KEY (StudentID) ) 同样,如果你定义了一个IDENTITY字段,并给该字段一个UNIQUE约束,InterSystems IRIS会明确地在IDENTITY字段上定义一个IdKey/Unique索引。这在下面的例子中显示。 CREATE TABLE Sample.MyStudents ( FirstName VARCHAR(12), LastName VARCHAR(12), StudentID IDENTITY, CONSTRAINT StudentU UNIQUE (StudentID) ) 这些IDENTITY索引操作只在没有明确定义的IdKey索引和表不包含数据的情况下发生。 手动定义索引 有两种方法来定义索引。 使用类定义来定义索引,其中包括: 可以被索引的属性 多个属性的索引 索引的整理 在索引中使用Unique、PrimaryKey和IdKey关键字 定义SQL搜索索引 用索引存储数据 对NULL进行索引 索引集合 阵列集合的索引 用(ELEMENTS)和(KEYS)对数据类型属性进行索引 为嵌入式对象(%SerialObject)属性建立索引 关于在类中定义的索引的说明 使用DDL定义索引 使用类定义来定义索引 Class MyApp.Student Extends %Persistent [DdlAllowed] { Property Prop1 As %String; Property Prop2 As %String; //单一属性定义索引 Index Prop1IDX On Prop1; //多属性值定义索引 Index MIXIDX On (Prop1, Prop2) //使用单一属性和collation定义索引 Index Prop2IDX On Prop2 As Exact; //使用多属性和collation定义索引 Index MIX2IDX On (Prop1 As SQLUPPER,Prop2 As Exact); //使用Unique关键字定义索引 Index Prop1IDX On Prop1 [Unique] //使用PrimaryKey关键字定义索引 Index Prop1IDX On Prop1 [PrimaryKey] //使用IdKey关键字定义索引 Index Prop1IDX On Prop1 [IdKey] //定义查询索引 -- 供文档查询使用 Index Prop1IDX On (Prop1) As %iFind.Index.Basic //List或者Array属性定义索引 Index EmpIndex On Employees(KEYS) Index EmpIndex On Employees(ELEMENTS) Index EmpIndex On (Employees(KEYS), Employees(ELEMENTS)); //对象属性定义索引 Index StateInx On Home.State; //定义位图索引 Index ReginIDX On Region [Type = bitmap] //定义位片索引 Index AgeIDX On Age [Type = bitslice] } 在类定义中处理索引时,有几点需要注意: 索引定义只从主(第一)超类中继承。 如果你使用Studio为一个有数据存储的类添加(或删除)一个索引定义,你必须通过构建索引来手动填充索引。 使用类定义定义%BID位图索引 如果表的ID不是正整数,你可以创建一个%BID属性,用来创建位图索引定义。你可以对具有任何数据类型的ID字段的表,以及由多个字段组成的IDKEY(其中包括子表)使用这个选项。可以为任一数据存储类型创建%BID位图:默认结构表或%Storage.SQL表。这个功能被称为 "任何表的位图Bitmaps for Any Table",或BAT。 要在这样的表中启用位图索引,你必须做以下工作。 为该类定义一个%BID属性/字段。这可以是该类的一个现有属性,也可以是一个新的属性。它可以有任何名字。如果这是一个新的属性,你必须为表中的所有现有行填充这个属性/字段。这个%BID字段必须用一个数据类型来定义,限制字段数据值为唯一的正整数。例如: Property MyBID As %Counter; 定义一个新的类参数来定义哪个属性是%BID字段。这个参数被命名为BIDField。这个参数被设置为%BID属性的SQLFieldName。例如,参数BIDField = "MyBID"。 Parameter BIDField = "MyBID"; 为%BID定义一个索引。例如, Index BIDIdx On MyBID [ Type = key, Unique ] 。 定义%BID定位器索引。这将%BID索引与表的ID关键字段联系起来。下面的例子是关于一个有两个字段组成的复合IDKey的表。 Index IDIdx On (IDfield1, IDfield2) [ IdKey, Unique ] 。 Index BIDLocIdx On (IDfield1, IDfield2, MyBID) [ Data = IdKey, Unique ] 。 这个表现在支持位图索引。你可以使用标准语法根据需要定义位图索引。例如: Index RegionIDX On Region [Type = bitmap] 该表现在也支持位片索引。你可以使用标准语法定义位片索引。 注意: 要建立或重建一个%BID位图索引,你必须使用%BuildIndices()。%ConstructIndicesParallel()方法不支持%BID位图索引。 使用DDL定义索引 DDL索引命令做了以下工作。 它们更新相应的类和表的定义,在这些定义上添加或删除索引。修改后的类定义被重新编译。 它们根据需要在数据库中添加或删除索引数据。CREATE INDEX命令使用当前存储在数据库中的数据来填充索引。同样,DROP INDEX命令从数据库中删除了索引数据(也就是实际的索引)。 CREATE INDEX //标准索引 CREATE INDEX StateIdx ON TABLE Sample.Person (Home_State) ​ //位图范围索引 CREATE BITMAPEXTENT INDEX Patient ON TABLE Sample.Patient ​ //位图索引 CREATE BITMAP INDEX RegionIDX ON TABLE MyApp.SalesPerson (Region) ​ //位片索引 CREATE BITSLICE INDEX AgeIDX ON TABLE MyApp.SalesPerson (Age) ​ DROP INDEX DROP INDEX PeopleIndex ON TABLE Employee 为嵌入式对象(%SerialObject)属性创建索引 要为嵌入式对象中的一个属性建立索引,你要在引用该嵌入式对象的持久化类中创建一个索引。属性名必须指定表(%Persistent类)中的引用字段的名称和嵌入对象(%SerialObject)中的属性,如下面的例子所示。 Class Sample.Person Extends (%Persistent) [ DdlAllowed ] { Property Name As %String(MAXLEN=50); Property Home As Sample.Address; Index StateInx On Home.State; } 这里Home是Sample.Person中的一个属性,它引用嵌入式对象Sample.Address,其中包含State属性,如下例所示。 Class Sample.Address Extends (%SerialObject) { Property Street As %String; Property City As %String; Property State As %String; Property PostalCode As %String; } 只有与持久化类属性引用相关的嵌入式对象实例中的数据值被索引。你不能直接索引%SerialObject属性。%Library.SerialObject(以及所有没有明确定义SqlCategory的%SerialObject的子类)的SqlCategory是STRING。 你也可以使用SQL CREATE INDEX语句在嵌入式对象属性上定义一个索引,如下面的例子所示。 CREATE INDEX StateIdx ON TABLE Sample.Person (Home_State) 位图索引 位图索引是一种特殊类型的索引,它使用一系列的bit字符串来表示与给定的索引数据值相对应的ID值集合。 位图索引有以下重要特点: 位图是高度压缩的:位图索引可以比标准索引小得多。这大大减少了磁盘和缓存的使用。 位图操作为事务处理进行了优化:你可以在表内使用位图索引,与使用标准索引相比,没有性能损失。 位图上的逻辑操作(计数、和、以及OR)被优化为高性能。 SQL引擎包括一些特殊的优化,可以利用位图索引的优势。 位图索引的创建取决于表的唯一标识字段的性质。 如果表的ID字段被定义为一个具有正整数值的单一字段,你可以使用这个ID字段为一个字段定义位图索引。这种类型的表要么使用系统分配的唯一正整数ID,要么使用IdKey定义自定义ID值,其中IdKey基于类型为%Integer且MINVAL>0的单一属性,或类型为%Numeric且SCALE=0且MINVAL>0的单一属性。 如果表的ID字段没有定义为具有正整数值的单一字段(例如,一个子表),你可以定义一个%BID(位图ID)字段,它采取正整数,作为一个代理ID字段;这允许你为这个表中的字段创建位图索引。 本章讨论了与位图索引有关的下列主题“ 位图索引操作 通过使用类定义来定义位图索引 使用DDL定义位图索引 生成一个位图范围索引 选择一个索引类型 对位图索引的限制 维护位图索引 位图分块的SQL操作 位图索引操作原理 位图索引的工作方式如下。假设你有一个包含若干列的Person表,这个表中的每一行都有一个系统分配的RowID号码(一组递增的整数值)。一个位图索引使用一组bitstring(一个包含1和0值的字符串)。在一个bitstring内,一个bit的序号位置对应于被索引表的RowID。对于一个给定的值,例如State是 "NY",有一个bitstring,对应于包含 "NY "的行,每个位置都是1,其他不包含'NY'的行,位置都是0。 例如,一个关于State的位图索引可能看起来像这样: 而关于年龄的索引可能看起来像这样。 注意: 这里显示的年龄字段可以是一个普通的数据字段,也可以是一个可以靠其他字段得出的字段(计算和SQLComputed)。 除了在标准操作中使用位图索引外,SQL引擎还可以使用位图索引,使用多个索引的组合有效地执行基于集合的特殊操作。例如,为了找到所有24岁并居住在纽约的Person实例,SQL引擎可以简单地执行Age和State索引的 AND 逻辑。结果如下: SQL引擎可以使用位图索引进行以下操作: 在一个给定的表上对多个条件进行ANDing。 在一个给定的表上的多个条件的ORing。 在一个给定的表上的RANGE条件。 在一个给定的表上进行COUNT操作。 位图索引的限制 所有的位图索引都有以下限制: 不能在一个UNIQUE列上定义一个位图索引。 不能在位图索引中存储数据值。 不能在一个字段上定义位图索引,除非该字段的SqlCategory是INTEGER, DATE, POSIXTIME, 或NUMERIC (with scale=0) 。 对于一个包含超过100万条记录的表来说,当唯一值的数量超过10,000时,位图索引的效率就不如标准索引。因此,对于一个大表,建议你避免对任何包含(或可能包含)超过10,000个唯一值的字段使用位图索引;对于任何规模的表,避免对任何可能包含超过20,000个唯一值的字段使用位图索引。这些都是一般的近似值,不是精确的数字。 你必须创建一个%BID属性来支持表上的位图索引,该表 使用一个非整数字段作为唯一的ID键。 使用一个多字段的ID键。 是父-子关系中的一个子表。 你可以使用$SYSTEM.SQL.Util.SetOption()方法SET status=$SYSTEM.SQL.Util.SetOption("BitmapFriendlyCheck",1,.oldval)来设置一个系统范围的配置参数,在编译时检查这个限制,确定%Storage.SQL类中是否允许定义位图索引。这个检查只适用于使用%Storage.SQL的类。你可以使用$SYSTEM.SQL.Util.GetOption("BitmapFriendlyCheck")来确定这个选项的当前配置。 应用逻辑的限制: 一个位图结构可以用一个bitstring数组来表示,其中数组的每个元素代表一个具有固定bit数的 "块"。因为未定义等同于一个全部为0位的块,所以数组可以是稀疏的。一个代表所有0 bit的块的数组元素根本就不需要存在。由于这个原因,应用逻辑应该避免依赖0值位的$BITCOUNT(str,0)计数。 因为一个bitstring包含内部格式化,应用逻辑不应该依赖于一个bitstring的物理长度,也不应该依赖于对两个具有相同位值的bitstring进行等价。在回滚操作之后,一个bitstring被恢复到事务之前的位值。然而,由于内部格式化,回滚的bitstring可能不等同于事务之前的bitstring,也不具有相同的物理长度。 维护位图索引 在一个不稳定的表(一个经历了许多INSERT和DELETE操作的表),位图索引的存储可能会逐渐变得不那么有效。 为了维护位图索引,你可以运行%SYS.Maint.Bitmap工具方法来压缩位图索引,将其恢复到最佳效率。你可以使用OneClass()方法来压缩单个类的位图索引。或者你可以使用Namespace()方法来压缩整个命名空间的位图索引。这些维护方法可以在一个生产系统上运行。 d ##class(%SYS.Maint.Bitmap).Namespace("Samples",1,1,"2014-01-17 09:00:00") d ##class(%SYS.Maint.Bitmap).OneClass("BitMap.Test",1,1) 运行%SYS.Maint.Bitmap实用方法的结果被写到调用该方法的进程中。这些结果也被写入%SYS.Maint.BitmapResults类中。 位片索引 当一个数字数据字段被用于某些数字操作时,位片索引被用于该字段。位片索引将每个数字数据值表示为一个二进制位串。比起使用布尔标志对数字数据值进行索引(如在位图索引中),位片索引用二进制表示每个值,并为二进制值中的每个数字创建一个位图来记录哪些行的二进制数字为1。这是一种高度专业化的索引类型,可以大幅度提高以下操作的性能。位片索引适用于以下类型: SUM, COUNT, 或AVG聚合计算。(位片索引不用于COUNT(*)计算) 位片索引不用于其他聚合函数。 在 TOP n ... ORDER BY field 的操作。 在一个范围条件操作中指定的字段,例如 WHERE field > n or WHERE field BETWEEN lownum AND highnum SQL优化器决定是否应该使用定义的位片索引。通常情况下,优化器只在处理大量的行(成千上万)时才使用位片索引。 在一个不稳定的表(一个经历了许多INSERT、UPDATE和DELETE操作的表)中,位片索引的存储效率会逐渐降低。%SYS.Maint.Bitmap工具方法同时压缩了位图索引和位片索引,恢复了效率。更多细节,请看 "维护位图索引"。 位图范围索引 位图范围索引是针对表的行的位图索引,而不是针对表的任何指定字段。在位图范围索引中,每个位代表一个连续的RowID整数值,每个位的值指定相应的行是否存在。InterSystems SQL使用这种索引来提高COUNT()的性能,COUNT()返回表中的记录数(行数)。一个表最多可以有一个位图范围索引。试图创建一个以上的位图范围索引,会导致SQLCODE -400错误,并出现%msg ERROR #5445: 定义了多个范围索引。 一个位图索引需要一个位图范围索引。只有在定义了一个或多个位图索引的情况下,定义一个持久化类才会生成一个位图范围索引。因此,当编译一个包含位图索引的持久化类时,如果没有为该类定义位图范围索引,类编译器会生成一个位图范围索引。 如果你从持久化类定义中删除了所有位图索引,那么位图范围索引会自动删除。但是,如果你重命名位图范围索引(例如,使用CREATE BITMAPEXTENT INDEX命令),删除位图索引并不会删除位图范围索引。 当为一个类建立索引时,如果你明确地建立了位图范围索引,或者你建立了位图索引而位图范围索引是空的,那么位图范围索引就会被建立。 一个类从主超类继承它的位图范围索引,如果它存在的话,可以定义或生成。一个位图范围索引被定义为:type = bitmap, extent = true。这意味着从主超类继承的位图范围索引被认为是一个位图索引,如果在子类中没有明确定义位图范围索引,则会触发在子类中生成一个位图范围索引。 InterSystems IRIS不会根据未来的可能性在超类中生成一个位图范围索引。这意味着InterSystems IRIS永远不会在一个持久性类中生成一个位图范围索引,除非有一个类型=位图的索引存在。假设某个未来的子类可能引入一个类型=位图的索引是不够的。 注意:在生产系统上为一个类添加位图索引的过程中需要特别注意(当用户使用一个特定的类,编译该类,并随后为它建立位图索引结构)。在这样的系统上,位图范围索引可能会在编译完成和索引建立过程的中间阶段被填充。这可能导致索引构建程序没有隐含地构建位图范围索引,这导致了部分位图范围索引不能被构建。 在一个经历了许多DELETE操作的表中,位图范围索引的存储会逐渐变得不那么有效。你可以通过使用BUILD INDEX命令重建位图范围索引,或者从管理门户选择表的Catalog Details标签,Maps/Indices选项并选择Rebuild Index。 构建索引 构建一个索引会做以下事情。 移除索引的当前内容。 扫描(读取每一行)主表,为表中的每一行添加索引条目。如果可能的话,使用特殊的$SortBegin和$SortEnd函数来确保建立大型索引的效率。当建立标准索引时,除了在内存中缓存数据外,这种对$SortBegin/$SortEnd的使用会占用IRISTEMP数据库的空间。因此,当建立一个非常大的标准索引时,InterSystems IRIS可能需要IRISTEMP中的空间,大致相当于最终索引的大小。 注意:建立索引的方法只提供给使用InterSystems IRIS默认存储结构的类(表)。 当前的数据库访问决定了你应该如何重建一个现有的索引: 非活跃系统(在索引建立或重建期间没有其他进程访问数据) 只读活跃系统(其他进程在索引建立或重建期间能够查询数据) 读和写活跃系统(其他进程能够修改数据,并在索引建立或重建期间查询数据)。 你可以按以下方式建立/重新建立索引。 使用BUILD INDEX SQL命令来构建指定的索引,或构建为一个表、一个Schema或当前命名空间定义的所有索引: //为整个表构建索引 BUILD INDEX FOR TABLE table-name //为一个Schema下的所有表构建索引 BUILD INDEX FOR SCHEMA schema-name //为整个命名空间构建索引 BUILD INDEX FOR ALL 使用管理门户为一个指定的类(表)重建所有的索引。 系统资源管理器 - SQL- 操作 - 重建表索引 使用%BuildIndices()(或%BuildIndicesAsync())方法,如本节所述。 建立索引的首选方法是使用%BuildIndices()方法或%BuildIndicesAsync()方法。 %Library.Persistent.%BuildIndices()。%BuildIndices()作为一个后台进程执行,但调用者必须等待%BuildIndices()完成后才能接收控制权。 %Library.Persistent.%BuildIndicesAsync()。BuildIndicesAsync()将%BuildIndices()作为一个后台进程启动,调用者立即收到控制权。%BuildIndicesAsync()的第一个参数是queueToken输出参数。其余的参数与%BuildIndices()相同。 %BuildIndicesAsync()返回一个%Status值:成功表示%BuildIndices()工作任务成功排队;失败表示工作任务没有成功排队。 %BuildIndicesAsync()向queueToken输出参数返回一个值,表示%BuildIndices()完成状态。为了获得完成状态,你通过引用queueToken值传递给%BuildIndicesAsyncResponse()方法。你还指定了wait布尔值。如果wait=1,%BuildIndicesAsyncResponse()将等待,直到由queueToken识别的%BuildIndices()作业完成。如果wait=0,%BuildIndicesAsyncResponse()将尽可能快地返回一个状态值。如果%BuildIndicesAsyncResponse()的queueToken在返回时不是NULL,那么%BuildIndices()作业还未完成。在这种情况下,queueToken可以用来再次调用%BuildIndicesAsyncResponse()。当%BuildIndicesAsyncResponse()的queueToken最终为空时,那么%BuildIndicesAsyncResponse()返回的%Status值就是由%BuildIndicesAsync()调用的作业的完成状态。 在一个不活跃的系统上构建索引: 系统自动生成方法(由%Persistent类提供),用于构建(即为其提供数值)或清除(即为其移除数值)为类(表)定义的每个索引。你可以通过以下两种方式使用这些方法。 通过管理门户: 系统资源管理器 - SQL- 操作 - 重建表索引 注意:当其他用户正在访问该表的数据时,不要重建索引。要在一个活跃系统上重建索引,请看在活跃系统上建立索引。 以编程方式调用。 构建所有索引:调用%BuildIndices(),没有参数,为给定的类(表)构建(提供)所有索引。 SET sc = ##class(MyApp.SalesPerson).%BuildIndices() IF sc=1 {WRITE !, "Successful index build" } ELSE {WRITE !, "Index build failed",! DO $System.Status.DisplayError(sc) QUIT} 构建指定的索引:调用%BuildIndices(),以$List的索引名称作为第一个参数,为一个给定的类(表)建立(提供)指定的索引。 SET sc = ##class(MyApp.SalesPerson).%BuildIndices($ListBuild("NameIDX", "SSNKey")) IF sc=1 {WRITE !, "Successful index build" } ELSE {WRITE !, "Index build failed",! DO $System.Status.DisplayError(sc) QUIT} 构建所有索引,除了某些指定索引:调用%BuildIndices(),将$List的索引名称作为第七个参数,为一个给定的类(表)构建(提供值)所有定义的索引,除了指定的索引。 SET sc = ##class(MyApp.SalesPerson).%BuildIndices("",,,,,,$ListBuild("NameIDX", "SSNKey")) IF sc=1 {WRITE !, "Successful index build" } ELSE {WRITE !"Index build failed",! DO $System.Status.DisplayError(sc) QUIT} %BuildIndices()方法做了以下工作: 在任何要重建的(非位图)索引上调用$SortBegin函数(这将为这些索引启动一个高性能的排序操作)。 循环处理该类的主要数据(表),收集索引使用的值,并将这些值添加到索引中(有适当的整理转换)。 调用$SortEnd函数来完成对索引的排序过程。 如果索引已经有了值,你必须用两个参数调用%BuildIndices(),其中第二个参数的值为1,为这个参数指定1会使该方法在重建索引之前清除这些值。比如说: SET sc = ##class(MyApp.SalesPerson).%BuildIndices(,1) IF sc=1 {WRITE !, "Successful index build" } ELSE {WRITE !, "Index build failed",! DO $System.Status.DisplayError(sc) QUIT} 这就清除并重建了所有的索引。你也可以清除和重建索引的一个子集,如: SET sc = ##class(MyApp.SalesPerson).%BuildIndices($ListBuild("NameIDX", "SSNKey"),1) IF sc=1 {WRITE !, "Successful index build" } ELSE {WRITE !, "Index build failed",! DO $System.Status.DisplayError(sc) QUIT} 注意:当其他用户正在访问该表的数据时,不要重建索引。要在一个活跃系统上重建索引,请看在活跃系统上建立索引。 在活跃系统上建立索引 当在一个活跃系统上建立(或重建)索引时,有两个问题: 活跃查询可能会返回不正确的结果,除非正在建立的索引被隐藏在SELECT查询之外。在建立索引之前,可以使用SetMapSelectability()方法来处理这个问题。 在建立索引期间对数据的主动更新可能不会反映在索引条目中。这可以通过在构建索引时让构建操作锁定个别行来处理。 注意:如果一个应用程序在一个事务中对数据进行大量的更新,可能会出现锁表争夺的问题。 在一个只读活跃系统上构建索引 如果一个表目前只用于查询操作(只读),你可以在不中断查询操作的情况下建立新的索引或重建现有索引。这是通过在重建这些索引时使索引对查询优化器不可用来实现的。 如果你想建立一个或多个索引的所有类目前都是只读的,使用 "在读和写活跃系统上建立索引 "中描述的相同系列操作,但有以下区别:当你使用%BuildIndices()时,设置pLockFlag=3(共享范围锁)。 在读和写活跃系统上建立索引 如果一个持久化的类(表)目前正在使用,并且可以进行读和写访问(查询和数据修改),你可以建立新的索引或者重建现有的索引而不中断这些操作。如果你想重建一个或多个索引的类目前可以被读和写访问,建立索引的首选方法是使用表的持久化类提供的%BuildIndices()(或%BuildIndicesAsync())方法。 在并发的读和写访问中,建立一个或多个索引需要进行以下一系列操作: 使你希望建立的索引对查询不可用(READ访问)。这是用SetMapSelectability()完成的。这使得该索引不能被查询优化器使用。这个操作应该在重建一个现有的索引和创建一个新的索引时执行。比如说 SET status=$SYSTEM.SQL.Util.SetMapSelectability("Sample.MyStudents", "StudentNameIDX",0) 第一个参数是Schema.Table名称,即SqlTableName,而不是持久化类的名称。例如,默认的Schema是SQLUser,而不是User。这个值是区分大小写的。 第二个参数是SQL索引图名称。这通常是索引的名称,指的是索引存储在磁盘上的名称。对于一个新的索引,这是你在创建索引时要使用的名称。这个值是不区分大小写的。 第三个参数是MapSelectability标志,其中0定义索引图为不可选择(关闭),1定义索引图为可选择(打开)。指定为0。 你可以通过调用GetMapSelectability()方法来确定一个索引是否是不可选择的。如果你已经明确地将一个索引标记为不可选择,这个方法返回0。在所有其他情况下,它返回1;它不对表或索引的存在进行验证检查。注意,Schema.Table名称是SqlTableName,并且区分大小写。 SetMapSelectability()和GetMapSelectability()仅适用于当前命名空间的索引映射。如果该表被映射到多个命名空间,并且需要在每个命名空间建立索引,则应在每个命名空间调用SetMapSelectability()。 在索引建立的过程中建立并发操作。 对于一个新的索引 在类中创建索引定义(或者在类的%Storage.SQL中创建新的SQL索引映射规范),编译该类。对于一个新的索引,这是合适的,因为索引还没有被填充。在可以对表进行查询之前,需要对范围索引进行填充。 对于一个现有的索引。清除任何引用该表的缓存查询。索引构建所执行的第一个操作是杀死索引。因此,当索引被重建时,你不能依靠任何被优化的代码来使用该索引。 //删除当前命名空间的所有缓存查询 PURGE CACHED QUERIES ​ //删除当前命名空间n天内的所有缓存查询 PURGE CACHED QUERIES BY AGE n Do $SYSTEM.SQL.Purge(n) ​ //删除某个表的缓存查询 PURGE CACHED QUERIES BY TABLE table-name 或者 Do $SYSTEM.SQL.PurgeForTable("MedLab.Patient") ​ //删除当类的缓存查询 PURGE [CACHED] QUERIES BY NAME class-name 使用你的持久化类(表)的%BuildIndices()方法,使用pLockFlag=2(行级锁)来建立索引。pLockFlag=2标志在重建过程中对个别行建立了一个排他性的写锁,这样并发的数据修改操作就可以与构建索引操作相协调。 默认情况下,%BuildIndices()会构建所有为持久化类定义的索引;你可以使用pIgnoreIndexList来排除重建索引。 默认情况下,%BuildIndices()为所有ID建立索引条目。然而,你可以你可以使用pStartID和pEndID来定义一个ID的范围。%BuildIndices()将只为该范围内的ID建立索引条目。例如,如果你使用带有%NOINDEX限制的INSERT将一系列新记录添加到表中,你可以随后使用带有ID范围的%BuildIndices()来为这些新记录建立索引条目。 %BuildIndices()返回一个%Status值。如果%BuildIndices()由于检索数据的问题而失败,系统会产生一个SQLCODE错误和一个消息(%msg),其中包括遇到错误的%ROWID。 一旦你完成了建立索引,请启用查询优化器的MapSelectability。设置第三个参数,MapSelectability标志为1,如下面的例子所示。 SET status=$SYSTEM.SQL.Util.SetMapSelectability("Sample.MyStudents", "StudentNameIDX",1) 再一次,清除任何引用该表的缓存查询。这将消除在此过程中创建的无法使用索引的缓存查询,因此,与使用索引的相同查询相比,缓存查询的效果较差。 这样就完成了这个过程。索引被完全填充,并且查询优化器能够考虑该索引。 注意:%BuildIndices()只能用于为有正整数ID值的表重建索引。如果父表有正的整数ID值,你也可以使用%BuildIndices()来重建子表的索引。对于其他表,使用%ValidateIndices()方法。因为%ValidateIndices()是建立索引的最慢的方法,所以只有在没有其他选择的情况下才应该使用它。 验证索引 你可以使用以下任一方法来验证索引: $SYSTEM.OBJ.ValidateIndices()验证一个表的索引,同时也验证该表的集合子表的任何索引。 %Library.Storage.%ValidateIndices()验证一个表的索引。集合子表的索引必须用单独的%ValidateIndices()调用进行验证。 这两种方法都检查指定表的一个或多个索引的数据完整性,并可选择纠正发现的任何索引完整性问题。它们分两步进行索引验证。 确认为表(类)中的每一行(对象)正确定义了一个索引实体。 遍历每个索引,对于每个被索引的条目,确保在表(类)中有一个值和匹配的条目。 如果任何一种方法发现不一致的地方,它可以选择性地纠正索引结构和内容。它可以验证并选择性地纠正标准索引、位图索引、位图范围索引和位片索引。默认情况下,这两个方法都验证索引,但不纠正索引。 只有在遵循以下条件的情况下,%ValidateIndices()才能用于纠正(建立)读和写活跃系统中的索引: SetMapSelectability()被使用,如上所述;%ValidateIndices()参数必须包括autoCorrect=1和lockOption>0。 因为%ValidateIndices()的速度明显较慢,%BuildIndices()是在活跃系统上建立索引的首选方法。 %ValidateIndices()通常从终端运行。它显示输出到当前设备。这个方法可以应用于指定的%List索引名称,或者为指定表(类)定义的所有索引。它只对那些起源于指定类的索引进行操作;如果一个索引起源于一个超类,该索引可以通过在超类上调用%ValidateIndices()进行验证。 只读类不支持%ValidateIndices()。 %ValidateIndices()被支持用于分片类和分片主类表(Sharded=1)。你可以调用%ValidateIndices,要么直接作为一个类方法,要么从$SYSTEM.OBJ.ValidateIndices上调用分片主类。然后在每个分片上的分片本地类上执行索引验证,并将结果返回给分片主类上的调用者。当在分片类上使用%ValidateIndices()时,verbose标志被强制为0,没有输出到当前设备。任何发现/纠正的问题都会在byreference errors()数组中返回。 下面的例子使用%ValidateIndices()来验证和纠正Sample.Person表的所有索引: SET status=##class(Sample.Person).%ValidateIndices("",1,2,1) IF status=1 {WRITE !, "Successful index validation/correction" } ELSE {WRITE !, "Index validation/correction failed",! DO $System.Status.DisplayError(status) QUIT}。 第一个参数("")指定要验证所有的索引; 第二个参数(1)指定要修正索引差异; 第三个参数(2)指定要对整个表进行独占锁定; 第四个参数(1)指定使用多个进程(如果有的话)来执行验证。该方法返回一个%Status值。 通过名称验证索引: SET IndList=$LISTBUILD("NameIDX", "SSNKey") SET status=##class(Sample.Person).%ValidateIndices(IndList,1,2,1) IF status=1 {WRITE !, "Successful index validation/correction" } ELSE {WRITE !, "Index validation/correction failed",! DO $System.Status.DisplayError(status) QUIT}。 %ValidateIndices()的第一个参数或$SYSTEM.OBJ.ValidateIndices()的第二个参数指定哪些索引将作为%List结构被验证。不管第一个参数的值如何,IdKey索引总是被验证的。你可以通过指定一个空字符串值("")来验证表的所有索引。你可以通过指定一个列表结构来验证该表的单个索引。下面的例子验证了IdKey索引和两个指定的索引。NameIDX和SSNKey。 对于这两种方法,如果索引列表包含一个不存在的索引名称,该方法不执行索引验证,并返回%Status错误。如果索引列表中包含一个重复的有效索引名称,该方法将验证指定的索引,忽略重复的索引,不发出错误。 索引信息查询 INFORMATION.SCHEMA.INDEXES持久化类显示当前命名空间中所有列索引的信息。它为每个被索引的列返回一条记录。它提供了一些索引的属性,包括索引的名称,表的名称,以及索引所对应的列的名称。每条列记录还提供了该列在索引图中的序号位置;除非索引映射到多个列,否则这个值是1。它还提供了布尔属性PRIMARYKEY和NONUNIQUE(0=索引值必须是唯一的)。 SELECT Index_Name,Table_Schema,Table_Name,Column_Name,Ordinal_Position, Primary_Key,Non_Unique FROM INFORMATION_SCHEMA.INDEXES WHERE NOT Table_Schema %STARTSWITH '%' 你可以使用管理界面的目录详情的映射/索引选项列出所选表的索引。这将为每个索引显示一行,并显INFORMATION.SCHEMA.INDEXES没有提供的索引信息。 使用索引对一个对象进行open、exist和delete的方法 InterSystems IRIS的索引支持以下操作: 通过索引键打开一个实例 检查一个实例是否存在 删除一个实例 通过索引key打开一个实例 对于ID键、主键或唯一索引,indexnameOpen()方法(其中indexname是索引的名称)允许你打开其索引属性值与所提供的值一致的对象。 例如,假设一个类包括下面的索引定义。 Index SSNKey On SSN [ Unique ] 。 那么,如果被引用的对象已经被存储到磁盘,并且有一个唯一的ID值,你可以按以下方式调用该方法。 SET person = ##class(Sample.Person).SSNKeyOpen("111-22-3333",2,.sc) 第一个参数对应于索引中的属性。 第二个参数指定要打开对象的并发值(这里是2 - 共享锁)。 第三个参数可以接受%Status代码,以防该方法无法打开一个实例,如果找到一个匹配的实例,该方法会返回一个OREF。如果该方法没有找到一个与所提供的值相匹配的对象,那么一个错误信息将被写入状态参数sc中。 这个方法被实现为%Compiler.Type.Index.Open()方法;这个方法类似于%Persistent.Open()和%Persistent.OpenId()方法,除了它使用索引定义中的属性而不是OID或ID参数。 检查一个对象是否存在 indexnameExists()方法(其中indexname是索引的名称)检查是否存在一个具有该方法的参数所指定的索引属性值的实例。该方法有一个参数对应于索引中的每个属性;它的最后一个可选参数可以接收对象的ID,如果有一个与提供的值相匹配的话。该方法返回一个布尔值,表示成功(1)或失败(0)。这个方法被实现为%Compiler.Type.Index.Exists()方法。 例如,假设一个类包括下面的索引定义。 Index SSNKey On SSN [ Unique ]; 那么,如果被引用的对象已经被存储到磁盘,并且有一个唯一的ID值,你可以按以下方式调用该方法。 SET success = ##class(Sample.Person).SSNKeyExists("111-22-3333",.id) 成功完成后,success等于1,id包含与找到的对象匹配的ID。 该方法返回所有索引的值,除了。 位图索引,或位图范围索引。 当索引包括(ELEMENTS)或(KEYS)表达式时。 删除一个对象 indexnameDelete()方法(其中indexname是索引的名称)是为了与Unique、PrimaryKey和/或IdKey索引一起使用;它删除其键值与提供的键属性/列值相匹配的实例。有一个可选的参数,你可以用它来指定该操作的并发设置。该方法返回一个%Status代码。它被实现为%Compiler.Type.Index.Delete()方法。
公告
Claire Zheng · 八月 11, 2022

网络研讨会:使用ECP在AWS上扩展 InterSystems FHIR Server

Hi 社区成员们, 我们很高兴地宣告 社区网络研讨会 回归了! 我们诚邀您参加 @Ron.Sweeney1582 主讲的 使用ECP在AWS上扩展InterSystems FHIR Server 网络研讨会。 Join this webinar to make a technical deep dive, see a demonstration, and benchmark horizontal scaling InterSystems FHIR Server on Amazon Web Services with Enterprise Cache Protocol (ECP). 欢迎加入此次网络研讨会,深入了解技术,观看演示,并在AWS上使用企业缓存协议(ECP)基准测试水平扩展InterSystems FHIR Server。 ⏱ 时间: 8月18日(周四)8am (美国东部时间) | 2:00pm (中欧夏季时间)| 8:00pm (北京时间)👨‍🏫 主讲人: @Ron.Sweeney1582, 全栈架构师,来自Integration Required 关于 Integration Required: 我们是一个针对InterSystems®工作负载的全栈技术交付团队,可根据您的安全状况和组织部署标准进行定制。凭借InterSystems®十年的合作伙伴关系和对客户满意度的严格坚持,客户对我们充满信任,我们能够实现最佳实践。 那么,不要错过这次机会!来了解更多关于扩展FHIR、ECP和AWS的知识吧! Don't miss this opportunity to learn more about scaling FHIR, ECP and AWS and how to mix it all! >> 点击注册 <<
公告
Claire Zheng · 八月 26, 2022

InterSystems开发者社区令人惊喜的里程碑!10K...11K...5M...

社区开发者们,大家好! 我们很自豪地宣布我们的InterSystems开发者社区已经达到了几个令人惊喜的里程碑: 📝 10,000 帖子 👥 11,000 注册用户 👁 5,000,000 浏览量 亲爱的开发者成员们,感谢你们的贡献,我们才能达成这样的目标:11K会员、10K发帖、5M浏览量 🍋🍋🍋🍋🍋 !我们为这一成就感到自豪,衷心感谢创造这一切的你们! 我们要感谢你们每一个人,因为你们是我们志同道合的一员!感谢你的每一次提问和对话!感谢你的每一次知识分享!感谢你的中肯建议,推动我们思考,从而变得更好、更有用!每一个你,都让这个社区保持活力和繁荣的原动力!我们很高兴与你在一起!❤️ 以下消息让这篇帖子的基调更欢乐! 开发者社区Discord channel 已经有500成员了! 🎉在这个方向上,我们还有很多工作要做,但我们已经准备好迎接挑战了。我们希望你也能加入我们,获得更多有用的信息和想法. 点击加入 再次感谢!让我们一起继续前行,共同成长!
文章
Claire Zheng · 一月 21, 2021

【视频】IRIS数据库在医疗行业发展(1):InterSystems IRIS架构

这是“IRIS数据库在医疗行业发展”系列课程的第一讲,InterSystems中国技术总监乔鹏为您介绍InterSystems IRIS架构。InterSystems IRIS数据平台是全球首款且唯一一款专门设计用于从医疗数据中提取价值的数据平台。
公告
Claire Zheng · 三月 1, 2021

InterSystems编程大奖赛投票时间:来为最佳App投票!

亲爱的社区开发者们: 本周进入 InterSystems 编程大奖赛 的投票时间! 来为你心目中基于InterSystems IRIS而构建的最佳方案投票吧! 🔥 点击投票 投票入口 🔥 如何投票?有哪些最新信息值得了解一下? 所有社区开发者都可以为自己提交的项目投票——投票将根据用户的Global Master级别自动计入专家提名奖(Experts Nomination)和社区提名奖(Community Nomination)。 所有InterSystems员工都可以为专家提名奖(Experts Nomination)或社区提名奖(Community Nomination)投票。 根据目前的投票引擎和算法,您可以选择三个项目进行投票,选出您心目中的一、二、三名。 以下是社区排行榜说明: 社区(Community)提名投票计分方式: 提名 得分 第一名 3 第二名 2 第三名 1 专家(Experts)提名投票计分会有更复杂的数学计算,不同级别的专家有更多的“点数”权力: 专家(Experts)提名投票计分方式: 级别 提名 第一名 第二名 第三名 VIP级:总经理,版主,产品经理 9 6 3 Global Masters中的专家(Expert)级 6 4 2 Global Masters中的专业(Specialist)级 3 2 1 专家(Experts)提名投票也将为按“3-2-1”为社区排行榜贡献出分数。 投票 1. 登录 Open Exchange – 使用开发者社区的账号即可登录。 2. 在开发者社区进行的任何有效贡献后——回答或提问,写一篇文章,对任何帖子发表评论,您就会看到可用的投票按钮。 如果您改变了主意,可以取消并投票给其他您看中的应用——从3月1日-3月7日,您有七天的时间充分选择! 提醒:在投票期间,参赛者可以继续修复bug,提升应用,所以投票者不要错过最新发布的版本哦~ ➡️ 请查收最新的 InterSystems在线竞赛投票规则. 还剩三天,北京时间3月8日中午12点截止,请大家抓紧投票! 我会为我欣赏的项目投票! 介绍的很详细,非常感谢!
文章
Claire Zheng · 一月 30, 2023

如何将 InterSystems 认证添加到您的社区资料(Profile)中?

亲爱的社区开发者们, 有一些开发者已经通过了InterSystems 官方认证,并希望在个人资料头像上有一个漂亮的绿色标识 以及您社区中的所有证书,以便其他人更好地了解你的能力…… 那么,要将认证添加到您的社区资料中,您需要执行 3 个简单的步骤: 1️⃣ 打开社区个人主页(点击右上角头像即可) 2️⃣ 找到InterSystems 认证( InterSystems Certification) 3️⃣ 点击加载我的认证(Load my certification) 就这么简单! 系统将通过您社区关联的电子邮件将请求发送到 Credly。如果您的证书链接到同一电子邮件,您的证书将会自动加载: 如果没有,请按照页面上描述的详细步骤操作: 完成后,每个人都可以看到你的认证资质哦 ;) 预祝每位社区成员成功添加认证并通过!
文章
Shanshan Yu · 四月 18, 2023

基于 InterSystems 一体化机器学习IntegratedML的儿童身高和体重预测

随着生活水平的提高,人们越来越注重身体健康。 而孩子的健康成长也越来越成为家长关心的话题。 孩子的身体发育可以从孩子的身高和体重反映出来。 因此,及时预测身高和体重具有重要意义。 通过科学的预测和比较,关注孩子的发育状态。 该项目使用InterSystems IRIS Cloud SQL通过输入大量体重和身高相关数据来支持,并建立基于IntegratedML的AutoML进行预测分析。 根据输入的父母身高,可以快速预测孩子未来的身高,并根据当前的身高和体重状况判断孩子的体重指数。 在正常范围内。 功能: 通过应用该程序,可以快速预测处于正常发育状态的儿童的身高。 通过结果,家长可以判断孩子发育是否正常,是否需要临床干预,有助于了解孩子未来的身高; 通过当前体重状态判断当前孩子的BMI是否正常,了解孩子当前的健康状况 应用场景 1.儿童身高预测 2. 监测儿童发育
文章
Meng Cao · 五月 10, 2023

记InterSystems IRIS for Health 2023.1配置MIRROR VIP报错的问题

今天从官网下载了IRISHealth-2023.1.0.229.0-lnxrh9x64版本的数据库安装包,在RHEL9.0上进行安装配置测试,遇到一个问题,趁热记录下来。 测试环境及软件版本: 操作系统——Red Hat Enterprise Linux release 9.0 (Plow) 数据库——IRISHealth-2023.1.0.229.0-lnxrh9x64 测试创建镜像时,配置好虚拟IP,点击保存。 保存后发现数据库没有变成主成员状态,一直是等待的状态,如下图所示: 这时查看控制台日志发现有大量报错,如下图所示: 从控制台日志看出,此时矛头指向了virtualIP.sh,经过查找发现这个脚本位置在安装目录下的bin目录中。 这里只是创建了MIRROR的配置,然后出现了问题,大概可以猜到可能是添加VIP的方法有什么问题,开启脚本的DEBUG,测试运行添加VIP的方法。 果然,发现了一处报错,如下图所示: 打开脚本文件,查看第588行代码。 研究发现RHEL9.0中,ID=`id | grep uid= | awk -F"=" '{print $2}' | awk -F"(" '{print $1}'`,$ID返回是空,不是数字,所以报错了,修改脚本,注释掉其中六行代码,并关闭DEBUG,如下: 保存脚本后,再次执行添加IP方法测试,IP可以正常添加。PS:不要忘记把测试添加的IP移除掉。 重启数据库,发现MIRROR状态恢复正常。 大家是否有遇到这个问题,可在评论区交流~~~
公告
Claire Zheng · 五月 8

InterSystems 2025开发者竞赛:FHIR和数字医疗健康互操作性

Hi开发者们, 我们很高兴邀请大家参加我们的新一轮开发者竞赛。 🏆 InterSystems开发者竞赛:FHIR和数字医疗健康互操作性 🏆 时间: 2025年5月12日-6月1日(美国东部时间) 奖金池: 12,000美元 主题 使用InterSystems IRIS for Health、Health Connect或FHIR服务器,开发任何基于FHIR的互操作性解决方案,或医疗健康互操作性解决方案,或帮助开发或维护互操作性解决方案的应用程序或库(解决方案)。 一般要求: 应用程序或库必须具有完整的功能。它不应该是另一种语言中已经存在的库的导入或直接接口(C++除外,在C++中,您确实需要做大量的工作来为IRIS创建接口)。它不应是现有应用程序或库的复制粘贴。 有效应用程序:100%全新的Open Exchange Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。 该应用程序应在IRIS Community Edition 或 IRIS for Health Community Edition上运行。均可作为host (Mac, Windows)版从 Evaluation site 下载,或者可以按从 InterSystems Container Registry或Community Container中提取的容器形式使用: intersystemsdc/iris-community:latest or intersystemsdc/irishealth-community:latest 。 该应用需开源并在GitHub或GitLab上发布。 该应用的README文件应为英文,包含安装步骤,以及应用程序的工作原理的视频演示或描述。 每位开发者最多只能提交3个作品。 注:我们的专家将根据作品的复杂性和实用性最终决定是否批准该作品参赛。他们的决定是最终决定,不可上诉。 奖品 1. 专家提名奖(Experts Nomination)——获奖者由我们特别挑选的专家团选出: 🥇第一名 - 5,000 美元 🥈第二名 - 2,500 美元 🥉第三名 - 1,000 美元 🏅第四名 - 500 美元 🏅第五名 - 300 美元 🌟第 6-10 名 - 100 美元 2. 社区提名奖(Community Nomination)—— 获得总票数最多的应用程序: 🥇第一名 - 1,000 美元 🥈第二名 - 600 美元 🥉第三名 - 300 美元 🏅第四名 - 200 美元 🏅第五名 - 100 美元 ❗如果多名参与者获得相同票数,则他们都被视为获奖者,奖金将在获奖者之间平分。❗ 现金奖励仅发放给能够验证身份的获奖者。如有任何疑问,组织者将联系参与者并要求提供额外信息。 谁可以参加? 任何开发者社区的成员均可参加,InterSystems内部员工除外(InterSystems contractor员工可以参加)。还没有账号?现在来建一个! 👥开发人员可以组队创建协作应用程序。一个团队允许 2 到 5 名开发人员。 请注意,要在您的README文件中标注您的团队成员(社区用户主页)。 重要截止日期: 🛠 应用程序开发和注册阶段: 2025年5月12日 (美国东部时间00:00): 竞赛开始 2025年5月25日 (美国东部时间23:59): 应用提交截止 ✅ 投票时间: 2025年5月26日 (美国东部时间00:00): 投票开始 2025年6月1日(美国东部时间23:59): 投票截止 注意:在整个参赛期间(开发与投票期间),开发者可持续编辑、提升其应用。 资源助力 ✓ 文档 InterSystems IRIS for Health FHIR Components documentation InterSystems Cloud FHIR Server documentation InterSystems Interoperability documentation Healthcare Data Transformations documentation ✓ 工具 Clinfhir - FHIR visualization and developer tool. ✓ 示例应用 FHIR Server Template iris-healthtoolkit-template interoperability-embedded-python FHIR HL7 SQL Demo FHIR DropBox HL7 and SMS Interoperability Demo IrisHealth Ensdemo UnitTest DTL HL7 Healthcare HL7 XML FHIR Interoperability Examples FHIR-Orga-dt FHIR Peudoanonimisation Proxy FHIR-client-java FHIR-client-.net FHIR-client-python FHIR related apps on Open Exchange HL7 applications on Open Exchange ✓线上课程 Interactive Digital Health Interoperability Foundation - An intro course into Digital Health Interoperability productions built with InterSystems IRIS for Health FHIR Data Architecture FHIR Integrations HL7 Integrations Learn FHIR for Software Developers Exploring FHIR Resource APIs Using InterSystems IRIS for Health to Reduce Readmissions Connecting Devices to InterSystems IRIS for Health Monitoring Oxygen Saturation in Infants FHIR Integration QuickStart ✓ 视频 6 Rapid FHIR Questions SMART on FHIR: The Basics Developing with FHIR - REST APIs FHIR in InterSystems IRIS for Health FHIR API Management Searching for FHIR Resources in IRIS for Health ✓ IRIS初学者 Build a Server-Side Application with InterSystems IRIS Learning Path for beginners ✓ ObjectScript Package Manager (IPM) 初学者 How to Build, Test and Publish IPM Package with REST Application for InterSystems IRIS Package First Development Approach with InterSystems IRIS and IPM ✓ 如何向大赛提交应用? How to publish an application on Open Exchange How to submit an application for the contest 需要帮助? 加入InterSystems' Discord server上的竞赛频道,或者在这篇帖子下面跟帖留言。 期待您的精彩提交 - 加入竞赛,来赢得胜利!👍 ❗️参加本次比赛即表示您同意此处列出的比赛条款。请在继续之前仔细阅读它们。 ❗️
文章
Hao Ma · 九月 22, 2021

IRIS 2021 技术文档 First Look 3 - 连接一个IDE

InterSystems IRIS 基础:连接一个 IDE 本文档告诉您如何快速连接您的集成开发环境(IDE),用于 ObjectScript、Java、.NET、Python 或 JavaScript/Node.js 的集成开发环境连接到 InterSystems IRIS® 的一个实例,并使用从 GitHub 下载的模板文件验证您是否已经成功连接。此外,接下来的两节还包括以下内容:• 部署 InterSystems IRIS列出用于部署 InterSystems IRIS 的已授权和免费评估实例的选项。如果您还没有一个可以使用的实例,请查看本节。• InterSystems IRIS 连接信息详细介绍了将 IDE 连接到已授权或免费的 InterSystems IRIS 实例,以及以其他方式与之进行交互所需的信息 ,并解释了如何获得实例的信息。无论您想用哪个 IDE 连接到 InterSystems IRIS,都要查看涉及您所使用的实例类型的部分。 1 部署 InterSystems IRIS本节涵盖了已授权的实例和免费的评估实例。 1.1 部署已授权的实例如果您已经从 InterSystems 购买了一个或多个许可证,您可以使用以下方法之一来部署一个已授权的 InterSystems IRIS 实例:• InterSystems 云管理器• InterSystems Kubernetes Operator• InterSystems IRIS 容器镜像• InterSystems IRIS 安装套件 当从容器镜像或安装套件进行部署时,您可以使用配置合并功能 来支持自动部署。 1.1.1 InterSystems 云管理器InterSystems 云管理器(ICM)是 InterSystems IRIS 的端到端配置和部署解决方案。使用 ICM,您可以在公共云平台(如谷歌云平台、亚马逊网络服务和微软 Azure)或您的私有 VMware vSphere 云中配置基础设施和部署容器化服务,您也可以在现有的虚拟或硬件系统中部署服务。您可以将您的自定义和第三方容器与 InterSystems 的容器一起部署,而且 ICM 还可以从 InterSystems IRIS 安装套件中安装。 部署 InterSystems IRIS 关于 ICM 的详细文档,请参见 InterSystems Cloud Manager Guide(《InterSystems 云管理器指南》)。您可以通个First Look: InterSystems Cloud Manager(《技术概要:InterSystems 云管理器》)试用 ICM。关于如何获得和部署 ICM 镜像的信息, 请参见InterSystems Cloud Manager Guide(《InterSystems 云管理器指南》)中的Launch ICM(启动 ICM)。 1.1.2 InterSystems Kubernetes OperatorKubernetes 是一个开源的编配引擎,用于自动化部署、扩展和管理容器化工作负载和服务。您可定义您想要部署的容器化服务和想要使用的治理策略;Kubernetes 以最有效的方式透明地提供所需的资源,在部署偏离规格时修复或恢复,并自动或按需扩展。InterSystems Kubernetes Operator(IKO)通过 IrisCluster 自定义资源扩展了 Kubernetes API,该资源可以在任何 Kubernetes 平台上作为 InterSystems IRIS 分片集群、分布式缓存集群或独立实例(所有可选镜像)进行部署。IKO 还为 Kubernetes 增加了 InterSystems IRIS 特定的集群管理功能,实现了任务的自动化 ,如向集群添加节点,否则您必须通过与实例直接交互来手动完成。关于使用 IKO 的信息,请参见Using the InterSystems Kubernetes Operator(《使用 InterSystems Kubernetes Operator》)。 1.1.3 InterSystems IRIS 容器镜像InterSystems 的 Docker 镜像让您可以使用自己的工具和方法将 InterSystems IRIS 部署到 Linux 主机——云、虚拟或物理主机上的容器中。对特定实例数据的持久性存储使容器化的 InterSystems IRIS 易于升级,因此您可以随时将现有的配置转移到最新版本的 InterSystems IRIS 中,而几乎不存在任何问题,停机时间也很少。关于使用 InterSystems IRIS 镜像的详细指南,请参见Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)。如果想亲身体验一下 InterSystems IRIS 镜像和容器,请尝试First Look: InterSystems Products in Containers(《技术概要:容器中的 InterSystems 产品》)。关于如何获得 InterSystems IRIS 镜像的信息,请参见Running InterSystems Products in Containers(《在容器中运行 InterSystems产品》)中的Downloading the InterSystems IRIS Image(《下载 InterSystems IRIS 镜像》)。您可以使用安装在谷歌云平台、微软 Azure 或亚马逊网络服务公共云平台上的 InterSystems IRIS 容器镜像和 Docker 来配置 BYOL(自带许可证)云节点, 然后添加您的许可并按照Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)或First Look: InterSystems Products in Containers(《技术概要:容器中的 InterSystems 产品》)中的描述,从该镜像中运行 InterSystems IRIS 容器。欲了解更多信息,请参见Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)中的Deploy InterSystems IRIS BYOL on a Cloud Node(《在云节点上部署 InterSystems IRIS BYOL》)。(您也可以使用免费的 InterSystems IRIS 社区版镜像来使用这些文档。) 1.1.4 InterSystems IRIS 安装套件您可以通过从 InterSystems 全球响应中心 (WRC)下载区获得您的平台的最新安装套件,在您的本地机器或网络上的另一台机器上安装和许可 InterSystems IRIS 的开发实例。有关基本的安装说明,请参见 InterSystems IRIS Basics: Installation (《InterSystems IRIS 基础:安装》);详细信息请参见安装指南。 1.1.5 使用配置合并进行部署配置合并功能在 Linux 和 UNIX®系统上可用,让您可以改变从同一镜像部署的 InterSystems IRIS 容器的配置,或从同一套件安装的本地实例,只需简单地将所需的声明性配置合并文件应用于部署的每个实例。这个合并文件, 也可以在重启现有实例或使用 iris 合并命令时应用,更新实例的配置参数文件 (CPF), 其中包含了大部分的配置设置;这些设置在每次启动时都会从 CPF 读取,包括实例部署后的第一次启动。当您在部署过程中应用配置合并时,实际上是用您自己的更新版本替换了随实例提供的默认 CPF。InterSystems 云管理器 和 InterSystems Kubernetes Operator 都包含了配置合并功能。 InterSystems IRIS 连接信息 有关使用配置合并的信息,请参见Configuration Parameter File Reference.(配置参数文件参考)中的Using Configuration Merge to Deploy and Reconfigure InterSystems IRIS(使用配置合并来部署和重新配置 InterSystems IRIS)和Create and Use a Configuration Merge File(创建和使用配置合并文件)。 1.2 部署免费的评估实例如果您还不是 InterSystems IRIS 的用户,您可以通过部署一个免费的评估实例,来探索它的许多功能,并使用您喜欢的语言和工具以及您自己的代码来试用它。有以下几个选项可以做到这一点:• 在云或者您自己的系统上部署 InterSystems IRIS 社区版实例。• 在网上启动一个 InterSystems 学习实验室(Learning Labs)实例。 1.2.1 InterSystems IRIS 社区版InterSystems IRIS 社区版有一个免费的内置 13 个月的许可证(和一些功能限制)。您可以通过两种方式部署社区版:• 在谷歌云平台、微软 Azure 或亚马逊网络服务公共云平台上提供一个托管运行社区版容器的云节点。• 从 InterSystems Container Registry (ICR)或 Docker Store 中提取社区版镜像,并使用它在您选择的系统上部署容器。 有关在云或自己的系统上部署和使用 InterSystems IRIS 社区版的说明,请参见Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)。 1.2.2 InterSystems 学习实验室(Learning Labs)InterSystems 学习实验室(Learning Labs)网页可以让您快速、轻松地启动 InterSystems IRIS 实验室实例,用于培训、开发和测试,并有 30 天的免费许可。您的 InterSystems 学习实验室实例包括一个集成的 IDE 和大量的示例,您可以连接您自己的 IDE。要启动 InterSystems 学习实验室实例,您必须登录 learning.intersystems.com;如果您没有账户,可以轻松创建一个。(与社区版一样,学习实验室实例有一些功能限制。) 2 InterSystems IRIS 连接信息(Connection Information)要将一个 IDE 连接到一个 InterSystems IRIS 实例,首先需要选择实例,然后确定所需的连接信息,如下所示:• 主机标识符:实例主机的 IP 地址或主机名。• 实例的超级服务器和 web 服务器端口号。• 实例的有效凭证。• 实例上现有命名空间的名称。 了解实例基于 Web 管理门户的 URL,以及如何在实例上打开 InterSystems 终端 (这需要实例的名称),这也是很有帮助的。如何确定这些信息取决于您如何部署您正在使用的实例,如下所示:• InterSystems 云管理器(Cloud Manager) InterSystems IRIS 连接信息 • 在一个容器中部署 InterSystems IRIS• 从套件中安装 InterSystems IRIS• InterSystems IRIS 社区版• InterSystems 学习实验室(Learning Labs) 2.1 InterSystems 云管理器(Cloud Manager)对于由 ICM 部署的容器中的 InterSystems IRIS 实例,主机标识符是容器所部署的配置或现有节点的 IP 地址或主机名。您可以随时使用 icm inventory 命令查看您部署的节点的主机名和 IP 地址。默认的超级服务器和 Web 服务器端口号分别为 1972 和 52773;您可以通过在 defaults.json 文件中加入 SuperServerPort 和 WebServerPort 属性来指定不同的端口号。管理门户的 URL 门户包含了主机标识符和 web 服务器端口,例如 http://40.122.36.160:52773/csp/sys/UtilHome.csp。IDE 连接或管理门户的凭证是您在基础设施上用 icm run 命令部署服务时设置的预定义用户账户之一和默认密码,或者是您先前添加到实例的账户和密码。要打开 ICM 部署的实例的终端,可以使用带有-interactive 选项和 -machine 选项的 icm session 命令 ,指定托管实例的节点;不需要验证。您始终可以将您的 IDE 连接到所有 InterSystems IRIS 实例中存在的 USERnamespace,但是如果您在部署时使用了 definitions.json 文件中的 Namespace 属性或 -namespace 选项以指定不同的默认执行命名空间, 您可能希望连接到该namespace。您还可以连接到以前使用管理门户创建的其他名称空间。 2.2 在一个容器中部署 InterSystems IRIS对于您从 InterSystems 镜像(包括在 BYOL 云节点上)部署的容器中的 InterSystems IRIS 实例,主机标识符是容器所运行的系统的 IP 地址或主机名。超级服务器和 Web 服务器的端口号取决于您在用 docker run 命令创建和启动容器时如何发布实例的端口;更多信息,请参见Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)中的Running InterSystems IRIS Containers(运行 InterSystems IRIS 容器)。举个例子,如果您把实例的 Web 服务器端口(始终是 52773)发布为 52773(如引用部分所述),并且您的浏览器与容器在同一个系统上运行,那么管理门户的 URL 是 http:/localhost:52773/csp/sys/UtilHome.csp。IDE 连接或管理门户的凭证是您在创建容器时设置的预定义用户账户之一和默认密码 [请参见Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)中的Authentication and Passwords(验证和密码)],或者是您先前添加到实例中的账户和密码。要为容器中的实例打开Terminal,您可以使用 docker exec 命令在容器中运行 iris terminal命令,您也可以使用 docker exec 在容器中打开一个 shell,并从那里运行 iris ternimal ;有关示例,请参见Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)中的Interacting Using the InterSystems Terminal(使用 InterSystems Terminal进行交互)。要使用 iris terminal,您需要实例名称,在 InterSystems 的任何容器中,该名称始终为 IRIS。如Running InterSystems Products in Containers(《在容器中运行 InterSystems 产品》)中的Ownership and Directories(所有权和目录)所述,使用 docker exec 从 InterSystems IRIS 容器外发出的命令在容器内以 irisowner 身份执行,不需要身份验证,因此您无需登录Terminal。您始终可以将您的 IDE 连接到存在于所有 InterSystems IRIS 实例中的 USER namespace,但您也可以连接到您先前使用管理门户创建的不同的namespace。 InterSystems IRIS 连接信息 2.3 从套件中安装 InterSystems IRIS对于从套件中安装的 InterSystems IRIS 实例,主机标识符是该实例运行的系统的主机名或 IP 地址;如果是本地安装,可以使用 localhost 。InterSystems IRIS 的安装将超级服务器和 web 服务器的端口号默认设置为 1972 和 52773。但是,如果您在系统中安装了一个以上的 InterSystems IRIS 实例,那么这些实例的超级服务器和 web 服务器的端口是不同的;要显示所有实例的端口号,您可以在操作系统的命令行中使用 iris list 命令。在 Windows 系统中,您可以通过点击系统托盘中的 InterSystems IRIS 图标并选择 Management Portal 来打开管理门户。在所有系统上,您都可以使用 URL http://host:webserverport/csp/sys/UtilHome.csp, 其中 host 是主机标识符, port 是 web 服务器端口号, 例如 http://localhost:52773/csp/sys/UtilHome.csp。要打开已安装实例的终端: • 在 Windows 系统上, 您可以选择 InterSystems IRIS 启动菜单上的 Terminal 选项。• 在所有的系统上,您可以在操作系统的命令行上使用 iris terminal命令,把实例名称作为参数。实例名称是在您安装实例时设置的,不能更改;您可以使用 iris list 命令来显示它。 用于所有目的的凭证是预定义用户账户(predefined user accounts)之一和默认密码 SYS(这样做后会提示您立即更改账户的密码),或者是您先前添加到实例的账户和密码。您始终可以将您的 IDE 连接到存在于所有 InterSystems IRIS 实例中的 USER namespace,但您也可以连接到您先前使用管理门户创建的不同的namespace。 2.4 InterSystems IRIS 社区版您可以通过以下两种方式之一部署社区版:• 当您在公共云平台上配置托管运行的 InterSystems IRIS 社区版容器的云节点时, 云节点的 IP 地址(主机标识符)、实例的超级服务器和 Web 服务器端口号(始终分别为 1972 和 52773),以及实例的管理门户 URL 在您首次使用 SSH 连接到节点时显示,并且可以通过在 Linux 命令行上输入 iris info 随时显示。门户网站的 URL 包含了 IP 地址和 web 服务器端口,例如 http://40.122.36.160:52773/csp/sys/UtilHome.csp。• 当您从 InterSystems Container Registry 或 Docker Store 提取社区版镜像并在您选择的系统上部署 InterSystems IRIS 社区版容器时,主机标识符是容器运行所在系统的 IP 地址或主机名。超级服务器和 Web 服务器的端口号取决于您在用 docker run 命令创建和启动容器时如何发布实例的端口,如在Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)中的Deploying InterSystems IRIS Community Edition on Your Own System(在您自己的系统上部署 InterSystems IRIS 社区版)中所述。举个例子,如果您把实例的 web 服务器端口(始终是 52773)发布为 52773(如引用部分所述),并且您的浏览器与容器在同一个系统上运行,那么管理门户的 URL 是 http:/localhost:52773/csp/sys/UtilHome.csp。 有关为任何社区版实例打开终端的信息,请参见Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)中的Interacting Using InterSystems Terminal(使用 InterSystems 终端进行交互)。IDE 连接和管理门户的凭证是预定义用户账户之一,以及您在第一次连接云节点修改密码时提供的新的默认密码[请参见Deploy and Explore InterSystems IRIS(《部署和探索 InterSystems IRIS》)中的Change the Default Passwords(修改默认密码)],或者默认密码 SYS,如果您在自己的系统上或者在没有先连接到节点的情况下登录到云实例。当您使用 SYS 时,系统会提示您 ObjectScript IDE 立即修改您所使用的账户的密码。您也可以使用您以前在实例上创建的账户。您始终可以将您的 IDE 连接到存在于所有 InterSystems IRIS 实例中的USER namespace,但您也可以连接到您以前使用管理门户创建的不同namespace。 2.5 InterSystems 学习实验室(Learning Labs)到容器化 InterSystems IRIS 实例的所有连接都是您的 InterSystems 学习实验室(learning labs)配置的一部分,在学习实验室启动期间,您需要的所有连接信息都显示在启动页面上,如下所示:• 集成 IDE 的 URL。• 一套用于所有目的的凭证。• 管理门户 URL。• Web 服务器端口号(始终是 80)。• 在外部连接下,服务器的 IP 地址和超级服务器的端口号(标记为 InterSystems IP 和 InterSystems 端口);您可以用它们将 IDE(如 InterSystems Studio 或 Visual Studio Code)与 ObjectScript 扩展连接到实例。 在集成 IDE 的 InterSystems 菜单上有一个Terminal选项(Management Portal 选项也是如此),所以您不需要跟踪实例名称。 3 ObjectScript IDE本节介绍了您可以用来在 InterSystems IRIS 实例上开发 ObjectScript 代码的 IDE:带有 ObjectScript 扩展的 Visual Studio Code (VS Code),以及 Studio。 3.1 Visual Studio CodeVisual Studio Code(VS Code)是微软为 Windows、Linux 和 macOS 制作的一个免费源代码编辑器。虽然它可以作为带有 InterSystems IRIS 的.NET、Python 或 JavaScript IDE 开箱即用,但可用的扩展功能使您能够使用 VS Code 开发 ObjectScript 代码,这些代码在客户端系统上存储和版本化,在 InterSystems IRIS 服务器上编译、运行和调试。关于安装扩展,连接到一个或多个 InterSystems IRIS 实例,以及使用 VS Code for ObjectScript 的信息,请访问 https://intersystems-community.github.io/vscode- objectscript/。 VS Code 可以连接到任何 InterSystems IRIS 实例,无论该实例在哪个平台上运行,使用主机的 DNS 名称或 IP 地址、实例的名称和实例的超级服务器端口号,默认为 1972(但如果系统上安装了多个实例,则可能不同)。 3.2 StudioInterSystems IRIS 应用程序开发人员还可以使用 Studio IDE,这是一个在 Windows 系统上运行的客户端应用程序;详细信息请参见使用 Studio 。Studio 可以连接到任何 InterSystems IRIS 实例,无论该实例在哪个平台上运行,使用主机的 DNS 名称或 IP 地址、实例的名称和实例的超级服务器端口号,默认为 1972(但如果系统上安装了多个实例,则可能有所不同)。 Java IDE 4 Java IDE本节提供了 Visual Studio Code (带有 Java 编码包或 Java 扩展包)、Eclipse、IntelliJ 和 NetBeans 的连接说明,您可以用它们来开发 Java 代码,使用 InterSystems Native API、JDBC 和 Java 网关与 InterSystems IRIS 交互。 4.1 Visual Studio Code要将 Visual Studio Code 连接到 InterSystems IRIS,请使用以下步骤。(如有必要,请登录 GitHub。)1. 在您的 web 浏览器中,下载或克隆 https://github.com/intersystems/Samples-java-helloworld。2. 在 Visual Studio Code 中,使用 File > Open Folder 来打开您最近从 GitHub 下载或克隆的文件夹。3. 选择并打开 src/main/java.com.intersystems.samples.helloworld.java。4. 在主要方法的顶部的变量声明中,为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)。这些值用于构造 InterSystems JDBC 连接字符串,格式为 jdbc:IRIS://ipAddress:superserverPort/namespace, 例如 jdbc:IRIS://12.345.678.910:51773/USER。5. 使用 View > Terminal 来打开终端并执行以下命令: javac -cp ".:intersystems-jdbc-3.2.0.jar" HelloWorld.java java -cp ".:intersystems-jdbc-3.2.0.jar" HelloWorld 6. 输出窗格显示信息 Hello World! You have successfully connected to InterSystems IRIS via JDBC. 4.2 Eclipse要将 Eclipse 连接到 InterSystems IRIS,请使用以下步骤。(点击 Next,根据需要推进到每个对话框的下一个面板。)首先,导入示例包,1. 选择 File > Import > Git > Projects from Git。2. 选择 Clone URI。将 https://github.com/intersystems/Samples-java-helloworld 复制并粘贴到 URI 字段中。3. 选择 master 分支,配置本地存储,然后选择 Import existing Eclipse projects。4. 点击 Finish 确认导入。 接下来,更新示例代码并运行它。1. 打开 samples-java-helloworld > src > main.java.com.intersystems.samples > HelloWorld.java 并做如下修改:a. 将顶层包声明更改为 package main.java.com.intersystems.samples;.b. 在主要方法的顶部变量声明中,为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)。这些值用于构造 InterSystems JDBC 连接字符串,格式为 jdbc:IRIS://ipAddress:superserverPort/namespace, 例如 jdbc:IRIS://12.345.678.910:1972/USER。 2. 通过选择 Run > Run 来运行代码。 Java IDE 3. Console 标签显示的信息是 Hello World! You have successfully connected to InterSystems IRIS via JDBC. 如果您没有成功,请通过以下操作确认 Java 执行环境设置正确:1. 右键点击 Package Explorer 窗格中的 samples-java-helloworld 项目,然后选择 Build Path > Configure Build Path...。2. 在 Libraries 标签上,选择 Add Library > JRE System Library > Execution environment >并选择一个执行环境,如 JRE-1.1 (jre 1.8.0_172)。点击 Finish,然后点击 Apply and Close。 4.3 IntelliJ要将 IntelliJ 连接到 InterSystems IRIS,请使用以下步骤。(点击 Next,根据需要推进到每个对话框的下一个面板。)首先,创建示例项目。1. 选择 VCS > Checkout from Version Control > Git。2. 在克隆存储库对话框中,a. 将 https://github.com/intersystems/Samples-java-helloworld 复制并粘贴到 Clone URI 字段中。b. 对于 Directory 字段,输入要创建本地 GitHub 存储库的位置的路径。 3. 点击 Clone,然后在弹出的窗口中选择 Yes ,以创建一个基于此源的项目。 接下来,更新示例代码并运行它。1. 在主要方法的顶部的变量声明中,打开 src/main/java.com.intersystems.samples.helloworld.java 并为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)。这些值用于构造 InterSystems JDBC 连接字符串,格式为 jdbc:IRIS://ipAddress:superserverPort/namespace, 例如 jdbc:IRIS://12.345.678.910:1972/USER。2. 在 Project 窗格中,右键单击 HelloWorld.java 并选择 Run ‘HelloWorld.main()’。3. Output 窗格显示的信息是 Hello World! You have successfully connected to InterSystems IRIS via JDBC. 如果您没有成功,请通过以下操作确认 Java 执行环境设置正确:1. 选择 Build Path > Build Project。2. 编辑配置并添加一个新的应用程序配置,选择 com.intersystems.samples.HelloWorld 作为主类。3. 如果错误 Error:java: invalid source release: 9 显现,在以下位置将项目 SDK 和项目语言级别修改为 1.8 :• File > Project Structure > Project Settings• File > Project Structure > Module Settings > Sources: Language Level 标签• File > Project Structure > Module Settings > Dependencies: Module SDK 标签 .NET IDE 4.4 NetBeans要将 NetBeans 连接到 InterSystems IRIS,请使用以下步骤。(点击 Next,根据需要推进到每个对话框的下一个面板。)首先,创建示例项目。1. 选择 Team > Git > Clone。2. 将 https://github.com/intersystems/Samples-java-helloworld 复制粘贴到 Repository URL 字段中。3. 选择 Master 作为要提取的分支,选择创建本地 GitHub 存储库的位置,然后点击 Finish。 接下来,更新示例代码并运行它。1. 在主要方法的顶部的变量声明中,打开 HelloWorld.java 并为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)。这些值用于构造 InterSystems JDBC 连接字符串,格式为 jdbc:IRIS://ipAddress:superserverPort/namespace, 例如 jdbc:IRIS://12.345.678.910:1972/USER。2. 在 Project 窗格中,打开 Dependencies 文件夹,然后右键点击 intersystems-jdbc-3.0.0.jar 并选择 Manually install artifact。导航到您最近克隆的文件夹,选择 intersystems-jdbc-3.0.0.jar,然后点击 Install Locally。3. 在 Project 窗格中,右键单击 HelloWorld.java 并选择 Run File。4. Output 窗格显示的信息是 Hello World! You have successfully connected to InterSystems IRIS via JDBC. 5 .NET IDE本节为微软的 Visual Studio 和 Visual Studio Code 提供连接说明,您可以用它来开发.NET 代码,这些代码通过 InterSystems Native API、ADO.NET Managed Provider for .NET、InterSystems XEP 和.NET 网关与 InterSystems IRIS 交互。 5.1 Visual Studio要将 Visual Studio 连接到 InterSystems IRIS,请使用以下步骤。(如有必要,请登录 GitHub。) 首先,创建示例解决方案。1. 选择 View > Team Explorer。2. 在 Team Explorer – Connect 窗格中, 选择 Local Git Repositories > Clone, 将 https://github.com/inter- systems/Samples-dotnet-helloworld 复制粘贴到 URL 框中, 并点击 Clone。 接下来,更新示例代码并运行它。1. 双击 HelloWorld.sln 来查看解决方案中的文件,然后打开 helloworld.cs。2. 使用变量声明,为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》),3. 按 F5 键,运行该程序。 Python IDE 4. 命令窗口显示的信息是 Hello World! You have successfully connected to InterSystems IRIS. Press any key to continue. 5.2 Visual Studio Code通过 ObjectScript 扩展,Visual Studio Code 可以用来在 InterSystems IRIS 上开发 ObjectScript 代码;请参见ObjectScript IDE。要将 Visual Studio Code 连接到 InterSystems IRIS,请使用以下步骤。(如有必要,请登录 GitHub。)1. 在您的 web 浏览器中,下载或克隆 https://github.com/intersystems/Samples-dotnet-helloworld。2. 在 Visual Studio Code 中,使用 File > Open Folder 来打开您最近从 GitHub 下载或克隆的文件夹。3. 拓展 samples-dotnet-helloworld 并选择 helloworld.cs。4. 使用变量声明,为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)。5. 使用 View > Terminal 来打开终端并执行以下命令: csc /reference:InterSystems.Data.IRISClient.dll helloworld.cs.\helloworld.exe 6. 输出窗格显示的信息是 Hello World! You have successfully connected to InterSystems IRIS.Press any key to continue. 6 Python IDE本节提供了将您最喜欢的以 Python 为中心的 IDE(如 Visual Studio Code、PyCharm、Spyder、IDLE/IdleX 或 Vim)连接到 InterSystems IRIS 的说明。当您使用以下步骤连接后(如有必要,请登录 GitHub),您可以使用技术概要:InterSystems IRIS Native API for Python 来探索 InterSystems IRIS Native API for Python。1. 在您的 web 浏览器中,下载或克隆 https://github.com/intersystems/Samples-python-helloworld。2. 在您的 IDE 中,打开您最近从 GitHub 下载或克隆的文件夹,然后打开 hello_world.py。3. 使用变量声明,为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)。4. 在您的 IDE 的终端,做如下操作:a. 使用以下命令之一安装 InterSystems Native API for Python:• 微软 Windows:pip install wheel\irisnative-1.0.0-cp34.cp35.cp36.cp37-none-win_amd64.whl • UNIX®/Linux:pip install wheel/irisnative-1.0.0-cp34-abi3-linux_x86_64.whl • Apple macOS:pip install wheel/irisnative-1.0.0-cp34-abi3-macosx_10_13_x86_64.macosx_10_14_x86_64.whl b. 使用命令 python hello_world.py 运行代码。 Javascript IDE 5. 输出窗格显示信息 Hello World! You have successfully connected to InterSystems IRIS. 注意: Python 代码示例和支持轮文件是为 Python 3 设计的,因为 Python 2 将在 2020 年退休;Python 2 版本可从 InterSystems Learning Services 获得。 7 Javascript IDE本节提供了将您最喜欢的 JavaScript 和 Node.js 的 IDE(如 Visual Studio Code、Vim 或 Webstorm)连接到 InterSystems IRIS 的说明。当您使用以下步骤连接后(如有必要,请登录 GitHub),您可以使用技术概要:InterSystems IRIS Native API for Node.js 来探索 InterSystems IRIS Native API for Node.js。1. 在您的 web 浏览器中,下载或克隆 https://github.com/intersystems/Samples-nodejs-helloworld。2. 在您的 IDE 中,打开您最近从 GitHub 下载或克隆的文件夹,然后打开 hello_world.js。3. 使用变量声明,为您的实例配置用户名、密码、IP 地址和端口(请参见 InterSystems IRIS Connection Information《InterSystems IRIS 连接信息》)。4. 在您的 IDE 的终端,做如下操作:a. 使用命令 npm install ––save intersystems-iris-native 安装 InterSystems Native API for Node.js。b. 使用命令 node hello_world.js 运行代码。 5. 输出窗格显示信息 Hello World! You have successfully connected to InterSystems IRIS.
公告
jieliang liu · 二月 26, 2021

2020 年最佳 Open Exchange 应用程序及开发者

大家好! 请查看 2020 年度 Open Exchange 摘要,了解最佳应用程序及其开发者! 欢迎: 2020 年下载量前 20 名的应用程序 iris-history-monitor开发者:Henrique Gonçalves Dias 856 VSCode-ObjectScript开发者:Dmitry Maslennikov 606 PythonGateway开发者:Eduard Lebedyuk 355 Serenji开发者:John Murray 302 ObjectScript Package Manager开发者:Evgeny Shvarov 143 ObjectScript-Math开发者:Peter Steiwer 124 AnalyzeThis开发者:Peter Steiwer 123 DeepSeeButtons开发者:Peter Steiwer 85 PivotSubscriptions开发者:Peter Steiwer 79 iris-rest-api-template开发者:Evgeny Shvarov 77 Caché Monitor开发者:Andreas Schneider 67 Ingestion Speed Test开发者:Amir Samary 60 WebTerminal开发者:Nikita Savchenko 50 DeepSeeWeb开发者:Anton Gnibeda 49 objectscript-docker-template开发者:Evgeny Shvarov 49 csvgen开发者:Evgeny Shvarov 47 ClassExplorer开发者:Nikita Savchenko 41 covid-19 analytics开发者:Evgeny Shvarov 41 Kano MDM开发者:Ludmyla Valerko 34 integratedml-demo-template开发者:Thomas Dyar 34 所有时间排名前 20 的开发者 Robert Cemper 38 Eduard Lebedyuk 35 Evgeny Shvarov 32 Nikita Savchenko 11 Benjamin De Boe 10 Guillaume Rongier 9 Dmitry Maslennikov 8 Sergey Mikhailenko 8 John Murray 7 Peter Steiwer 7 Henrique Gonçalves Dias 7 Amir Samary 7 Semen Makarov 6 Anton Umnikov 6 Rubens Silva 6 Lorenzo Scalese 6 YURI MARX PEREIRA GOMES 6 Alberto Fuentes 5 David Crawford 5 Maks Atygaev 5 所有时间下载量前 20 名 iris-history-monitor开发者:Henrique Gonçalves Dias 998 VSCode-ObjectScript开发者:Dmitry Maslennikov 931 PythonGateway开发者:Eduard Lebedyuk 608 Serenji开发者:John Murray 370 AnalyzeThis开发者:Peter Steiwer 195 WebTerminal开发者:Nikita Savchenko 183 ObjectScript Package Manager开发者:Evgeny Shvarov 179 Caché Monitor开发者:Andreas Schneider 151 DeepSeeButtons开发者:Peter Steiwer 127 ObjectScript-Math开发者:Peter Steiwer 127 Caché 对象脚本中的设计模式开发者:Tiago Ribeiro 116 ClassExplorer开发者:Nikita Savchenko 111 iris-rest-api-template开发者:Evgeny Shvarov 106 PivotSubscriptions开发者:Peter Steiwer 102 objectscript-docker-template开发者:Evgeny Shvarov 80 ObjectScript开发者:Evgeny Shvarov 68 RGateway开发者:Shiao-Bin Soong 64 Ingestion Speed Test开发者:Amir Samary 63 DeepSeeWeb开发者:Anton Gnibeda 61 Cache-FileServer开发者:Eduard Lebedyuk 59
公告
jieliang liu · 四月 9, 2021

InterSystems公司的IRIS和IRIS for Health 2020.4现已正式发布(GA)!

InterSystems IRIS,IRIS for Health和IRIS Studio的2020.4版本现已正式发布。 InterSystems IRIS Data Platform 2020.4使开发、部署和管理增强型应用和业务流程变得更加容易,从而弥合了数据和应用孤岛。它具有许多新功能,包括 增强了应用程序和接口开发人员的能力,包括: 支持Java SE 11 LTS,在使用Oracle OpenJDK和AdoptOpenJDK时均可支持 支持JDBC的连接池 分段式虚拟文档路由规则中新的 "foreach "组件 增强了数据库和系统管理员的能力,包括: ICM现在支持部署系统警报和监测(SAM)和InterSystems API Manager(IAM) 对常见管理任务的SQL语法的扩展 简化InterSystems报表的部署 InterSystems IRIS for Health 2020.4包含了InterSystems IRIS 2020.4的所有增强功能。此外,这个版本还包 增强对FHIR的支持,包括对FHIR配置文件的支持 支持RMD IHE 的Profile HL7迁移工具中的DataGate支持 关于这些功能的更多细节可以在产品文档中找到: InterSystems IRIS 2020.4 documentation and release notes InterSystems IRIS for Health 2020.4 documentation and release notes 由于这是一个持续交付(CD)版本,因此它仅以OCI(Open Container Initiative)又称Docker容器格式提供。 容器镜像可用于 Linux x86-64 和 Linux ARM64 的 OCI 兼容运行时引擎, 详见 Supported Platforms document. 企业版的容器映像和所有相应的组件都可以使用以下命令从 InterSystems Container Registry 用以下命令获得: docker pull containers.intersystems.com/intersystems/iris:2020.4.0.547.0 docker pull containers.intersystems.com/intersystems/irishealth:2020.4.0.547.0 有关可用镜像的完整列表, 请参照ICR文档: the ICR documentation. Contain社区版的容器镜像也可以使用以下命令从 Docker store 中拉取。 docker pull store/intersystems/iris-community:2020.4.0.547.0 docker pull store/intersystems/iris-community-arm64:2020.4.0.547.0 docker pull store/intersystems/irishealth-community:2020.4.0.547.0 docker pull store/intersystems/irishealth-community-arm64:2020.4.0.547.0 另外,所有容器映像的tarball版本都可以通过WRC的 CD download page页面获得。 我们在主要云市场上的相应列表将在未来几天内更新。 InterSystems IRIS Studio 2020.4是一个独立的IDE,用于Microsoft Windows,可以通过WRC的组件下载页面 components download page下载。它适用于InterSystems IRIS和IRIS for Health 2020.4及向下版本兼容。 InterSystems还支持VSCode-ObjectScript plugin ,用于使用Visual Studio Code为InterSystems IRIS开发应用程序,该插件可用于Microsoft Windows、Linux和MacOS。 其他独立的InterSystems IRIS 2020.4组件,如ODBC驱动程序和Web网关,也可从WRC的组件下载页面components download page.获得。