搜索​​​​

清除过滤器
文章
Claire Zheng · 四月 7, 2022

谈谈InterSystems IRIS数据平台的部署灵活性与TCO降低

众所周知,InterSystems IRIS的产品设计理念源于互操作性(Interoperable)、稳定性(Reliable)、直观(Intuitive)、可扩展性(Scalable),在云时代,InterSystems IRIS的云上操作与本地一样便捷,令用户体验有了明显提升,除此之外,为了更高效地对InterSystems IRIS进行配置,我们还提供了哪些新特性?为了便捷地进行数据迁移,InterSystems IRIS最新版本提供了哪些解决方案?点击查看视频,或浏览文字版。 马浩 @Hao.Ma (老马 ): 我想介绍一下杨乐乐(Ida),她是我们资深的WRC(全球响应中心)人员,几乎所有我们现有客户提出的技术问题都会汇集到WRC中,那么Ida,关于如何为客户提供更好的开发体验,有什么好的内容跟我们分享吗? 杨乐乐 @Ida.Yang (Ida): 大家好,我是杨乐乐,很高兴和大家分享这一主题。我先给大家介绍一下InterSystems IRIS的产品发布与部署。InterSystems IRIS 的产品发布主要有两条线,主版本和持续交付(CD,Continuous Delivery)版本,其中主版本一年发布一次,主版本的发布包括安装包和容器映像两种形式,比如2021.1.0;持续交付版本一个季度发布一次,仅仅会以容器映像的形式发布,比如2020.2.0、2020.3.0、2020.4.0。 在Docker容器中部署InterSystems IRIS®是灵活的、高度可复用的,并且非常适合公共云平台。容器将代码和数据干净地分开,并支持持续集成CI/持续交付CD和DevOps,可以更快地将产品的改进推向市场,我们的季度发布版本正是为了助力客户加速这一过程。 为了更高效地对InterSystems IRIS进行配置,我们还提供配置合并功能,这个功能可以让您在一次操作中对InterSystems IRIS实例的配置做任意多的修改。实现方式也十分直接明了,您只需在一个声明性的配置合并文件中声明配置信息,无论是在实例初始部署时还是以后的修改配置,都可将声明中的配置信息应用于实例。配置合并可以很容易地用于从同一个容器映像或工具包中自动部署具有不同配置的多个实例,以及同时重新配置多个运行中的实例,实现集群或其他多实例部署场景下的的自动重新配置。 除了针对实例的配置合并,InterSystems IRIS还提供配备非常直观的云管理器,InterSystems Cloud Manager(ICM),通过ICM我们可以直接配置公共或私有云的基础设施并在其上部署服务,它为InterSystems产品的容器化部署带来了自动化和基础设施即代码(IaC)的所有优势。通过将API编入可共享和版本化的声明性配置文件,ICM让你安全、可预测地持续创建、修改和改进生产基础设施及服务。 ICM现在支持的基础设施即服务(IaaS)公共云平台包括谷歌云、亚马逊AWS、Microsoft Azure和腾讯云,当然您也可以在您的私有VMware云中轻松配置和部署InterSystems IRIS。除此之外ICM也支持您在现有的基础设施上进行部署。 InterSystems IRIS提供的另外一个对容器化的支持是InterSystems Kubernetes Operator(IKO),众所周知,Kubernetes是一个开源的协调引擎,用于自动部署、扩展和管理容器化工作。IKO通过对Kubernetes的扩展,支持在任何Kubernetes平台上为InterSystems IRIS®部署集群、分布式缓存集群以及独立实例,包括部署时可以选择是否配置我们的高可用性镜像。同时,IKO还增加了特定的集群管理功能,比如它实现了向集群添加节点的自动化等等。 吕正之 @Louis.Lu (Louis): 云确实是一种趋势,很高兴听到InterSystems对于云支持特性的相关总结,对于云上的操作可以和在本地操作一样方便,突出了一个自动化和便捷性的特点,这对客户体验是一个明显的提升。 杨乐乐 @Ida.Yang(Ida): 确实是这样。 除了以上对云平台、容器化支持的内容,我还想跟大家分享两个新特性。 第一个是InterSystems IRIS现在也可部署于基于ARM架构的平台,包括完整的安装版和容器版。通过对ARM架构的支持,客户对于平台的选择可以更加灵活,能够将他们的应用程序部署到具有成本效益的硬件平台上,包括物理平台和云平台。 另外一个是与客户日常运维相关的一个更新,同时这个更新也是对于从Caché、Ensemble就存在的一个旧有问题的答复。相对于传统关系型数据库以表格行和列的方式储存,IRIS的前身Caché采取的是紧密型的存储方式,这样的好处是,同样的数据,Caché所使用的存储空间会减少30%-40%。但是另一个方面Caché为了保证数据的高速写入以及数据的一致性等问题,采用了多段写入的方式,这样一来就会产生很多记录数据库操作的日志,也就是Journal日志,特别是在业务高峰期,或者我们在大批量处理历史数据的时候,Journal日志所在的磁盘空间会长得非常快。同时另外一方面随着越来越多文档数据、流数据的保存,这一部分格式的数据在所有数据中的比例也越来越大。为了解决上面的问题,节约空间占用,InterSystems IRIS即将推出的下一个版本中,会加入对Journal日志以及流数据压缩算法的优化,使用优化后的压缩算法磁盘所占空间将会缩减30%,其中XML和其他文档类型的压缩率甚至能够高达80%。 吕正之 @Louis.Lu (Louis): 真不错,日志所占磁盘空间的快速增长确实是很多客户关心的问题,很高兴现在我们在新的版本中做出了这么大的改进。这让我想到了另一个问题,也是很多客户关心的,就是数据迁移,不管是从其他的数据库或者是CSV文件中如何快速方便的将数据迁移到InterSystems IRIS,有什么好的方式推荐吗? 杨乐乐 @Ida.Yang(Ida): 是的,数据迁移也是客户日常会碰到的挑战。现在好消息是,在最新版本中我们加入了Data Loader的功能,它可以方便快捷地从CSV文件或通过JDBC加载源数据到InterSystems IRIS SQL表中。它可以使用类似于SQL语句中的INSERT语句那样,以COLUMNS和VALUES子句的方式来完善该命令,以适用更多的应用场景,这很类似于前面IntegratedML中可以使用USING子句。 吕正之 @Louis.Lu (Louis): 嗯,真高兴我们可以在InterSystems IRIS的下一个版本中看到这么多好的功能,所有的这些功能都是为了更好提升客户的开发、使用感受。 大家都知道我们的IRIS是由互操作性(Interoperable)、稳定性(Reliable)、直观(Intuitive)、可扩展性(Scalable)四个单词首字母的缩写构成,这代表了IRIS的四个主要特点和核心设计理念,但同时在我们内部还有另一个缩写,也代表了我们的设计初衷,这就是It Really Is Simple,也就是“它真的很简单”的意思。我们尽可能将构建一个富数据应用所需的所有工具汇集到一个平台中,不需要开发者寻找适合数据存储、数据处理、业务流程编辑、数据分析等不同部分的不同技术框架,省去了不同的知识堆栈、异构系统集成、多开发调试环境切换的烦恼,产品根据市场技术发展、客户需求等不断做出调整与更新,但变化不离其宗—— 它真的很简单(It Really Is Simple)。 好了,这次我们的分享就到这里,再次感谢各位的观看。
文章
Lucy Ma · 六月 9, 2022

InterSystems 最佳实践系列之 - 在DeepSee中设计有效的层级

当使用DeepSee工具来设计层级的时候,一个子级必须有且仅有一个父级。当出现一个子级对应两个父级的情况时,数据结果就有可能会不可靠。另一种情况是当两个相似的级别存在,它们的主键必须要做相应的变更以确保唯一性。我们接下来将通过两个案例来解释这两种情况是如何发生的以及如何避免。 案例1 在多个州里都会有一个城市叫做Boston。在我的样本数据里,我已经记录的与Boston对应的州有MA和Boston.NY。我的维度定义如下: 城市和州在这里都是简单的字符串格式。当构建到我的Cube中时,我会需要两个州级别成员:“MA”和“NY”,以及两个城市级别成员:“Boston”和“Boston”。为什么我需要两个Boston的城市级别成员而不是一个呢?因为一个级别成员不能有两个父级。所以我们需要创建两个分别的子级成员来对应各自的父级。遗憾的是,我们现在处于“糟糕的层级”场景,因为我们只有一个键值来对应两个不同的级别成员。 为了解决这个问题,我们需要使这个键值唯一。为了替代直接使用“城市”这个属性来作为这个级别的来源属性,我们可以使用来源表达式来将这个级别成员转化成唯一的。 这样就解决了唯一性的问题,但是会产程其他我们不想要的副作用。通过添加这样的表达式,我们可以在透视表中看到下面的结果: 这样的结果有可能是或者不是我们能够接受的显示方式。到这里,我们的键值和级别成员名称都是一样的,当然我们可以多做一点来让结果展示只显示“Boston”,并且背后只对应一个唯一键值。请阅读文档来获取更多信息。 总结一下,不同的级别成员需要唯一的键值。当子级成员拥有一个特殊键值对应了不同的父级成员,同时另一个已有的子级成员已经使用了同样的键值,那么这个键值将会被新的成员重新引用。这样等同于创建了无效层级。 案例2 Date Hierarchies are common places to see invalid hierarchies. Naturally people tend to create the following hierarchy: 日期层级经常会出现无效层级的情况。通常人们会倾向于创建下面这样的层级: 年 月 周 日 ***我这里讨论的是在DeepSee中的“年,月/年,周/年,和日/月/年”的提取功能。 众所周知,一周可以存在于两个不同的月份,或者甚至不同的年份。这里所有其他的级别(年,月,和日)都可以适用在它们的父级并且不会被拆分成两部分。当需要创建一个周次的级别成员也使用同样的模式的话,你将会看到意外的结果,归因于DeepSee引擎会横切数据树(从2020年1月3日开始追溯到到2019年第52周,即2019年12月。2020年1月3日不属于2019年12月的子数据,因此引擎会将这些数据移除)。 常见的解决方法是创建一个新的层级,只有周次级别在里面。这将保持原始层级的完整性,但是也同样支持按照周次来查询数据 。 DeepSeeButtons on Open Exchange 中生成的报告中有一个部分将会检查类似的状态,会在层级无效的时候通知你。 ***在InterSystems IRIS 2020.3和更新的版本中,DeepSeeButtons将会被包含。更多的信息可以再这里找到。***
文章
姚 鑫 · 九月 27, 2022

第四十五章 配置第三方软件以与 InterSystems 产品结合使用

# 第四十五章 配置第三方软件以与 InterSystems 产品结合使用 产品通常在与非 工具一起运行的环境中运行,我们的产品与此类工具之间的交互可能会产生有害影响。 关于最佳、可靠部署配置的指导假定我们的产品可以在不受第三方工具干扰的情况下进行部署。例如, 发现用于安全、系统监控或病毒扫描的软件可能会影响我们产品的安装、性能和功能。对于直接与属于 产品的一部分或被 产品使用的文件进行交互的工具(例如病毒扫描程序)尤其如此。 了解客户面临的业务、合规性和其他要求会影响有关在给定环境中运行哪些软件以及如何配置此类软件的决策。一般来说, 建议我们产品的服务器端安装通过物理安全和隔离来保护。这种保护应该减少对其他工具的需求,或者至少减少它们运行的频率。 病毒扫描仪观察: 1. 为了交付经过病毒检查的软件, 产品在经过消毒的环境中交付给我们的客户,并通过提供校验和进行验证。 2. 性能影响。 [对策] 出于扫描目的,排除以下文件和目录: - `WIJ` 文件和包含 `WIJ` 文件的目录`*`。 - 本指南“配置 `IRIS`”一章中的所有数据库文件 (`.DAT`) 和包含数据库文件的目录*(请参阅配置数据库)。 - 存储或处理日志文件的任何目录`*`。 - `IRIS®` 数据平台运行所需的任何其他文件`/`目录`*`。例如备用日志目录*(请参阅数据完整性指南中的“日志”),或业务服务或生产使用的任何目录*。 3. 可执行文件的误报。 [对策] 出于扫描目的,排除所有 `irisdb.exe` 文件和包含 `irisdb.exe` 文件的目录。 警告:从恶意软件扫描中排除项目可能会将漏洞引入受保护的设备和应用程序。客户承担配置恶意软件保护的所有责任。 最后,当 发现第三方软件与我们的产品之间的交互对我们的产品行为产生负面影响时,我们会将这些问题报告给第三方供应商。
文章
Claire Zheng · 三月 21, 2022

InterSystems IRIS哪些新特性让用户开发体验得到了极大提升?

谈到开发体验,什么最重要?如何为客户提供更好的开发体验?InterSystems IRIS的最新版本有哪些新特性极大优化了用户的开发体验?这是本月“极客聊吧”的话题,我们计划通过上、下两期视频探讨这一话题。在第一期视频中(点击查看),InterSystems中国销售工程师吕正之、马浩和WRC产品支持专家杨乐乐针对以下两点分享了他们的观点:(1)开发语言的多样性与对FHIR的支持; (2)开发平台的前瞻性:对Smart Data Fabric架构的支持。 主题 开发语言的多样性与对FHIR的支持 @Louis.Lu 吕正之(Louis): 大家好,我是InterSystems售前工程师吕正之,这是我的同事杨乐乐和马浩,今天的“极客聊吧”我和我的同事会和大家介绍一下如何为客户提供更好的开发体验的。首先有请我们的资深销售工程师马浩,我们一般称他为老马。老马,你有什么和我们分享的吗? @Hao.Ma 马浩(老马): 大家好,我是马浩。说到更好的开发体验,首先要聊的是嵌入式Python。原来只能使用InterSystems ObjectScript, Objectscript最大的问题是“开发者的欠缺”——培养开发者需要时间。 Python是最受欢迎的语言。据统计有超过800万的开发者,比Java多。嵌入到系统安装包里, 安装后就可以在代码里使用,混用。开发应用时,使用Embedded Python不仅访问IRIS的数据,包括我们的Ensemble组件,叫Interoperability in Python,也是用Python做的Objectscript的优化。 另一个令人振奋的是 VSCode。还有我们原本的开发IDE只有在Windows平台下的Studio,但是它对于源代码管理、Debug调试等方面的支持都不是很方便,现在我们可以使用VSCode作为InterSystems IRIS的开发IDE,客户端编程、代码调试、代码质量、GitHub, Container管理、Extension等等,所有这一切,对以往的Caché的程序员来说是非常大的改变,也是非常令人高兴的变化。 @Louis.Lu 吕正之(Louis): 嗯,这样确实不错,原来会有一些用户担心会我们开发语言的工程师比较少,现在他们可以招聘擅长Python的工程师进行InterSystems IRIS的开发了。 @Hao.Ma 马浩(老马) 是的,这对于我们的合作伙伴真是个好消息,他们可以招聘一些Python的工程师。当然,对于使用ObjectScript的工程师来说,也意味需要有一个学习新工具的适应的过程。 另外一个提升客户开发体验的是对于HL7 FHIR标准的进一步支持。InterSystems IRIS 医疗版提供了开发FHIR应用的所有必须模块,包括几个东西:API的接口,FHIR服务器以及FHIR资源仓库、FHIR Message Broker消息代理。无论是开发FHIR应用、创建FHIR的数据存储,还是把旧有系统映射的数据映射成FHIR的格式,IRIS for Health(IRIS医疗版)都有非常方便的工具和组件。 @Louis.Lu 吕正之(Louis): 我知道FHIR是HL7最新的互操作性标准,它将医疗数据的基本单元定义为资源,比如患者资源、就诊资源、检查结果资源、药嘱资源等,每个资源都定义了合适的数据格式,约束、值集范围、资源之间的相互关系等,而且FHIR还有强大的扩展能力,满足各方面的实际需求。 同时它也是文档、消息交换的标准,并且它定义了每个资源的接口API、查询参数等。现在的一个问题是针对FHIR资源的查找只能通过API进行,这样对于我们熟悉使用SQL查询的工程师感觉很不方便,会影响到客户的开发体验。 @Hao.Ma 马浩(老马) 现有的FHIR定义确实有这样的问题,FHIR是一个JSON的格式,资源的关系很复杂。不方便做查询。好消息是,InterSystems 在2021年全球线上峰会上演示了FHIR SQL Builder预览版的一些功能,简单地说:它就是一个工具,分析FHIR资源仓库的数据,创建你自己的SQL schema,一部分灵活的控制,总结存储的资源和他们的元素信息。对于大型FHIR资源仓库,用户可以指定只分析总资源库的一个部分。他还提供了一个页面让用户选择资源、元素,并生成相对应的SQL schema,这样对于熟悉SQL的工程师来说,只要访问那个SQL schema就可以使用到你想要的FHIR数据了。 @Louis.Lu 吕正之(Louis): 听上去真不错,这个在哪里可以体验呢? @Ida.Yang 杨乐乐(Ida): 有希望体验FHIR SQL Builder的观众可以通过400-601-9890 技术热线联系,或者添加我们小助手的微信联系我们,我们很高兴听到各位的使用反馈,很有可能您的建议会被添加到我们未来的产品中。 扫码添加小助手 或搜索“ISC-Johnny”即可添加 主题 开发平台的前瞻性:对Smart Data Fabric架构的支持 马浩(老马): 关于如何为客户提供更好的开发体验,开发平台的前瞻性也是至关重要的,去年我们的全球峰会中提到的InterSystems IRIS 对于Smart Data Fabric(智能数据编织)架构的支持。那么Louis,你是如何理解Smart Data Fabric的呢? 吕正之(Louis): 嗯,很好,你注意到了这一点,对于Smart Data Fabric架构的支持确实贯穿了我们全球峰会的主题。Data Fabric中文有的翻译成数据经纬、数据编织,还有的更直接称为智能数据结构,它描述的是一种数据的管理架构。这种架构可以优化对分散数据的访问,这里说的“分散”包含两方面的含义:一是物理层面,数据存储在不同的数据库、不同的服务器、甚至是在不同的地理位置中。另一层含义指的是数据类型的多样性——它可能是传统的关系型数据,比如主外键关联的多张表,或者是非关系型的比如xml、JSON格式的文档数据,又或者是对象型数据、键值对数据、流数据等。 Data Fabric架构可以智能地、规划并协调它们,方便向数据消费者提供自助式的服务。有了这样的架构,可以通过让用户实时访问正确的数据来提升企业数据的价值,而不管它存储在哪里。Data Fabric整合了核心数据管理功能,依据Gartner对于Data Fabric的组成的描述,在数据源和数据消费者之间主要包含: 数据连接:帮助客户连接数据孤岛 数据填充:实时、智能地选取合适的数据 数据治理:对数据进行处理和提炼 数据访问:并让数据方便于使用,方便于分析 马浩(老马): 那么InterSystems IRIS 是如何支持的呢? 吕正之(Louis): InterSystems IRIS数据平台集合了Caché、Ensemble的众多功能和特点: 它可以使用同一个平台管理多类型的数据:关系型、文档型、键值对、对象型数据; 它兼容了事务性数据与分析型数据的存储与读取; 内置的多种协议比如Http、SOAP、文件、SQL或者标准HL7、IHE的适配器可作为系统互操作性重要的组成,方便用户用于数据连接、数据访问; 适配器的不同参数可以对应于实时、批量加载数据的不同场景。 Data Fabric还有一个重要的用户使用特性是self-service,也就是用户自己可以花很短的时间去寻找到需要的数据,花更多的时间去探索数据中的隐藏的含义,从而指引自己对数据变化进行更快的反应。 对于业务流程开发工程师,InterSystems IRIS 提供的全部管理、配置界面都是基于BS架构的,也就是说你可以通过网页方便地开发出一个复杂的业务流程,比如要根据实时的数据运行机器学习算法给出预测值,或者在问诊过程中根据当前病情、历史用药、历次化验结果调用临床决策知识库实时给出诊疗建议,又或者需要在很短时间内对满足特定条件的人群发出诊疗告警等等类似于这样的业务流程,需要涉及多个系统、多种数据结构,仅仅通过网页画流程图的方式就可以轻松实现。 对于前端工程师、接口工程师可以借助InterSystems IRIS IAM工具,掌握任何服务端接口的变化,也可以集中监控和管理接口,比如流量管控、访问认证、灰度发布等。 对于机器学习,内嵌的Integrated ML功能可以让非数据科学家,仅仅执行类似于SQL的语句,就完成了从数据建模到数据准备、特征工程、模型选择、训练模型再到验证模型,如果想使用训练好的模型,也仅仅是执行InterSystems扩展SQL 语句就可以获得结果,这对于想使用机器学习对海量数据进行初步筛选的医疗一线人员真是很方便。 对于数据分析师,不但可以使用自己熟悉的PowerBI、Tableau等工具直接访问IRIS中保存的数据,IRIS还提供了自适应分析工具AA(Adaptive Analytics),利用图形化工具对需要分析的数据进行预处理,创建一个虚拟的Cube,该虚拟Cube会在后台运行一个AI引擎,根据数据特点、访问习惯等做出最佳优化,供分析软件调用。 可以看到InterSystems IRIS 对于Data Fabric的架构进行了完整的支持。 当然还有更多、更详细关于InterSystems IRIS 对于Data Fabric的支持的信息请访问我们的官网、开发者社区等渠道获取。正如Gartner的评价,Data Fabric是数据管理的未来。 欢迎通过以下平台与我们联系,敬请关注近期即将推出的视频:如何为用户提供更好的开发体验(下)
文章
Hao Ma · 十一月 2, 2021

IRIS 2021 技术文档 First Look 13 - InterSystems IRIS Native API for Java

本文档解释了如何使用 InterSystems IRIS Native 功能从 Java 应用程序中访问 InterSystems IRIS®数据平台的 globals。在本文中,您将首先连接到 InterSystems IRIS。然后您将在 InterSystems IRIS 中设置和检索一个 global 节点的值,并在另一个 global 节点上进行迭代。您还将调用 InterSystems IRIS 类方法。所有这些活动都将在 Java 应用程序中执行。为了让您体验 IRIS Native,而又不陷入细节困境,本次探索特意设计得很简单。这些活动被设计成只使用默认设置和功能,这样您就可以熟悉功能的基本原理,而不必处理那些离题或过于复杂的细节。当您把 IRIS Native 引入您的生产系统时,您可能需要做一些不同的事情。请确保不要把这种对 IRIS Native 的探索与真实的情况相混淆! 本文档末尾提供的参考资料将使您对在生产中使用 IRIS Native 的情况有一个很好的了解。要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。 1 Globals 简介Globals 提供了一种易于使用的方式,来存储持久化多维数组中的数据。Global 是存储在 InterSystems IRIS 物理数据库中的命名多维数组。在应用程序中,globals 到物理数据库的映射基于当前命名空间,命名空间提供一个或多个物理数据库的逻辑统一视图。例如,要使用一个名为 ^Settings 的 global 将值 "Red"与键 "Color"关联起来,请使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础: 连接一个 IDE》)中的procedure described for your instance(为您的实例描述的程序),打开 InterSystems 终端(InterSystems Terminal),并输入以下代码:set ^Settings("Color")="Red" 您可以利用 globals 的多维特性来定义一个更复杂的结构: set ^Settings("Auto1","Properties","Color") = "Red" set ^Settings("Auto1","Properties","Model") = "SUV" set ^Settings("Auto2","Owner") = "Mo"set ^Settings("Auto2","Properties","Color") = "Green" 有关 globals 的更多信息,请参见 Using Globals(《使用 globals》)。 2 为什么 IRIS Native 很重要?IRIS Native 是建立在 InterSystems IRIS JDBC 功能之上的一项功能,它允许您执行核心类 ObjectScript 命令的有限子集,并使用 globals 访问 InterSystems IRIS 数据,类似于在 InterSystems 终端(InterSystems Terminal)中使用的方式。该功能利用 JDBC 连接(JDBC connection)在 Java 应用程序中暴露(expose)核心 ObjectScript 功能。重要的是,由于 IRIS Native 使用与 JDBC 相同的连接,因此 InterSystems IRIS 数据通过 JDBC 作为关系表暴露(expose)给 Java 应用程序,通过 IRIS Native 作为 globals 暴露(expose)给 Java 应用程序。 探索 IRIS Native InterSystems IRIS 提供了一组独特的功能,可以使用相同的物理连接和事务环境来使用多个范例(本机、关系和面向对象)操作数据。 3 探索 IRIS Native以下向您简短演示如何在 Java 应用程序中使用 IRIS Native。(想试试 InterSystems IRIS Java 开发和互操作性功能的在线视频演示吗?请看 Java QuickStart(Java快速入门)!) 3.1 用前须知要使用该程序,您需要在一个系统上工作,安装 JDK 1.8 版本和您选择的 Java IDE,并连接一个正在运行的 InterSystems IRIS 实例。您对 InterSystems IRIS 的选择包括多种已授权的和免费的评估实例;实例不需要由您正在工作的系统托管(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。使用同一文档中的 InterSystems IRIS Connection Information(InterSystems IRIS 连接信息)和 Java IDE 中的信息,将 IDE 连接到您的 InterSystems IRIS 实例。您还需要将 InterSystems IRIS JDBC 驱动程序 intersystems-jdbc-3.0.0.jar 添加到您的本地 CLASSPATH。您可以从https://github.com/intersystems/quickstarts-java/tree/master/lib下载这个文件。如果您已经在本地系统或您能访问的另一个系统上安装了 InterSystems IRIS,您可以在 install-dir\dev\java\lib\JDK18 中找到该文件,其中 install-dir 是 InterSystems IRIS 的安装目录。3.2 连接 InterSystems IRIS InterSystems IRIS 连接字符串的语法是:jdbc:IRIS://host_IP:superserverPort/namespace,username,password其中的变量表示在 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中connection settings described for your instance(为您的实例描述的连接设置)——这与您将 IDE 连接到实例时使用的信息相同。将命名空间设置为预定义的命名空间 USER,如下面的代码所示,或者设置为您在安装的实例中创建的另一个命名空间(只要您更新代码)。如果您连接到本地 Windows 系统上的实例(使用主机名 localhost 或 IP 地址 127.0.0.1),该连接会自动使用一种特殊的、高性能的本地连接,称为shared memory connection(共享内存连接),它为 IRIS Native 提供了更好的性能。有关更多信息,请参见 First Look:JDBC and InterSystems IRIS(技术概要: JDBC 和 InterSystems IRIS)。3.3 使用 IRIS Native现在,您已经准备好试验 IRIS Native 了。在您已连接的 IDE 中(请参见 “用前须知”),创建一个名为 IRISNative 的新 Java 项目,并粘贴以下代码。确保编辑变量superserverPort(超级服务端口)、username(用户名)、namespace(命名空间)和password(密码),以反映您实例的正确值。import java.sql.DriverManager;import com.intersystems.jdbc.IRISConnection; import com.intersystems.jdbc.IRIS;import com.intersystems.jdbc.IRISIterator; public class IRISNative {protected static int superserverPort = 00000; // YOUR PORT HERE protected static String namespace = "USER"; 探索 IRIS Native protected static String username = "_SYSTEM"; protected static String password = "SYS";public static void main(String[] args) { try {// open connection to InterSystems IRIS instance using connection string IRISConnection conn = (IRISConnection) DriverManager.getConnection("jdbc:IRIS://localhost:"+superserverPort+"/"+namespace,username,password);// create IRIS Native objectIRIS iris = IRIS.createIRIS(conn); System.out.println("[1. Setting and getting a global]");// setting and getting a global// ObjectScript equivalent: set ^testglobal("1") = 8888 iris.set(8888,"^testglobal","1");// ObjectScript equivalent: set globalValue = $get(^testglobal("1")) Integer globalValue = iris.getInteger("^testglobal","1");System.out.println("The value of ^testglobal(1) is " + globalValue); System.out.println(); System.out.println("[2. Iterating over a global]");// modify global to iterate over// ObjectScript equivalent: set ^testglobal("1") = 8888// ObjectScript equivalent: set ^testglobal("2") = 9999 iris.set(8888,"^testglobal","1");iris.set(9999,"^testglobal","2");// iterate over all nodes forwardsIRISIterator subscriptIter = iris.getIRISIterator("^testglobal"); System.out.println("walk forwards");while (subscriptIter.hasNext()) {String subscript = subscriptIter.next(); System.out.println("subscript="+subscript+", value="+subscriptIter.getValue());}System.out.println();System.out.println("[3. Calling a class method]");// calling a class method// ObjectScript equivalent: set returnValue = ##class(%Library.Utility).Date(5) String returnValue = iris.classMethodString("%Library.Utility","Date",5); System.out.println(returnValue);System.out.println();// close connection and IRIS object iris.close();conn.close();} catch (Exception ex) { System.out.println(ex.getMessage());}}} 示例代码分为三个部分:1. 第一部分展示了如何设置一个 global 值以及稍后如何检索它。这部分里面执行的命令等同于 ObjectScript 的 SET 和 GET 命令。2. 第二部分展示了如何迭代 global 的子节点(subnode),类似于 $ORDER ObjectScript 函数。3. 第三部分展示了如何使用 IRIS Native 从您的 Java 应用程序调用 ObjectScript 类方法(class method)。 如果示例执行成功,您应该会看到带有示例代码结果的输出: 了解有关 IRIS Native 的更多信息 [1.Setting and getting a global] The value of ^testglobal(1) is 8888[2.Iterating over a global] walk forwardssubscript=1, value=8888 subscript=2, value=9999[3.Calling a class method] Jan 30, 2018 3.4 确认管理门户(Management Portal)的变更接下来,使用以下程序在管理门户(Management Portal)中确认您的结果。1. 使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中URL described for your instance(为您的实例描述的 URL),在浏览器中打开您实例的管理门户(Management Portal)。2. 如果您不在代码指定的命名空间中,请切换到该命名空间。3. 导航到 Globals 页面(System Explorer(系统资源管理器) > Globals)。您应该会看到在示例代码中创建的 testglobal。点击 View(查看) 来查看其内容。 您应该会看到 global 的两个节点:^testglobal(1) = 8888 和^testglobal(2) = 9999。 4 了解有关 IRIS Native 的更多信息有关 IRIS Native、globals 和 InterSystems IRIS 的更多信息,请参见:First Look:JDBC and InterSystems IRIS(《技术概要:JDBC 和 InterSystems IRIS》)Using Globals(《使用 Globals》)Using the Native API for Java(《使用 Native API for Java》)
公告
Michael Lei · 七月 25, 2022

InterSystems 即将举办“推动女性健康-FemTech不止是利基市场“在线论坛

Hi 大家好! 我们很荣幸地宣布InterSystems 将在剑桥总部举办 推动女性健康-FemTech不止是利基市场 高层论坛,论坛将在线上线下同步举行! ⏱ 时间: 7月 29日, 5:30 AM – 7:30 AM ,北京时间(July 28,5:30 PM – 7:30 PM ,EDT/美国东部时间)📍 地点: InterSystems 总部,1 Memorial Drive, Cambridge, MA 本次活动是由 HealthTech Build 组织的,HTB的愿景是为医疗机构、生物科技数字创新者、健康数据科学家、数字疗法开发者和软件工程师,以颠覆性的富有成效的方式为共同目标而努力。对于这次活动,目标将是交流思想,并以新的方式解决未满足的妇女健康需求。 本次论坛的参与嘉宾包括: Janine Kopp, Investor & Head of Venture Studio, Takeda Digital Ventures Uros Kuzmanovic, CEO, Biosens8 Mary Beth Cicero, CEO, 3Daughters Thom Busby, Senior Vice President, Outcome Capital 不要错过这个极好的机会,在志同道合的同伴中发现挑战并讨论新的解决方案。 >> 注册线上会议 <<
公告
Michael Lei · 十二月 30, 2021

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

亲爱的女士们和先生们,在上个月,我改进了我的工具Caché监视器......但首先:名字 选择Caché Monitor这个名字是为了反映该工具与Caché数据库的紧密结合。我想,在可预见的未来,Intersystems Caché这个既定名称很可能会被InterSystems IRIS数据平台完全取代。因此,重塑品牌的步骤成为必要。为了在未来不那么紧密地与一个产品名称联系在一起,我们选择了一个更加中立的新名字: SQL Data Lens 不管叫什么名字,实现与Intersystems产品最紧密的整合仍然是我们的目标。持续的发展也反映在版本号的延续上。上一个版本是Caché Monitor 2.96,下一个版本是SQL Data Lens 3.0。 但这不仅仅是重新命名,而且还集成了许多新的功能,例如 一个很大的进步是,SQL Data Lens现在是基于Java Runtime Environment 11的,有了它,就可以改善对HiDPI的支持。在操作系统层面上配置了系统规模因素,支持每台显示器的DPI! 但也集成了一个新的现代的Flat 外观和Feel 集成,在亮Light和暗Dark两种模式下。 SQL DataLens带有一个最小化的私有JRE(基于JetBrains JDK 11)。 ...等等 请随时从以下网站下载并测试SQL Data Lens,无需任何注册: https://sqldatalens.com/ 我期待着你的经验,建议和想法,这些都非常欢迎。 谢谢您的关注! Andreas https://sqldatalens.com/从链接进去下载不了 我刚试了一下是可以的,而且不用翻墙,看看是否本地浏览器或者其他问题?谢谢! https://sqldatalens.com/download/ 点击download之后,会跳到https://sqldatalens.com/sqldl_files/latest/SQLDataLens_308_20220508.zip这个链接,提示“ Server Error 403 Forbidden ” 那可能得麻烦您到英文社区下面问下,这是我们德国合作伙伴做的:https://community.intersystems.com/post/new-tool-intersystems-iris, 谢谢!
文章
Michael Lei · 四月 25, 2022

如何在CI/CD Pipeline中管理InterSystems API Manager (Kong GATEWAY)配置?

Kong提供了一个开源的配置管理工具(用Go语言编写),称为decK(代表声明式Kong) 通过deck ping检查deck是否能识别你的Kong Gateway安装 deck ping Successfully connected to Kong! Kong version: 2.3.3.2-enterprise-edition 通过deck dump把 Kong Gateway配置倒出到 "kong.yaml" 文件 deck dump 修改 kong.yaml以后通过deck diff 通过把区别显示出来 deck diff updating service alerts { "connect_timeout": 60000, - "host": "172.24.156.176", + "host": "192.10.10.18", "id": "3bdd7db4-0b75-4148-93b3-2ff11e961f64", "name": "alerts", "path": "/alerts", "port": 50200, "protocol": "http", "read_timeout": 60000, "retries": 5, "write_timeout": 60000 } Summary: Created: 0 Updated: 1 Deleted: 0 通过 deck sync应用这些变化 deck sync updating service alerts { "connect_timeout": 60000, - "host": "172.24.156.176", + "host": "192.10.10.18", "id": "3bdd7db4-0b75-4148-93b3-2ff11e961f64", "name": "alerts", "path": "/alerts", "port": 50200, "protocol": "http", "read_timeout": 60000, "retries": 5, "write_timeout": 60000 } Summary: Created: 0 Updated: 1 Deleted: 0 deck sync -s workspace1.yaml --workspace workspace1 deck sync -s workspace2.yaml --workspace workspace2 更多信息 : https://docs.konghq.com/deck/1.11.x/guides/getting-started/ https://docs.konghq.com/deck/1.11.x/guides/best-practices/
公告
Claire Zheng · 一月 30, 2023

社区名人墙来了!2022 年InterSystems 社区顶级贡献者

亲爱的开发者们!是时候公布2022 年 InterSystems 开发者社区杰出贡献者了🎉 我们很高兴为所有社区站点(英文、西文、葡语、日文、中文和法语)中最活跃的贡献者提供奖励,包括: 顶级作者——热门作者; 顶级专家——InterSystems专家; 顶级舆论制造者——意见领袖; 还有一个最新提名......年度突破奖! 在我们分享最好的之前,我们想介绍一个令人兴奋的新徽章——年度突破奖。这是一个从今年开始并为我们社区的发展做出最大贡献的人。 让我们共同见证2022年的社区名人墙,用热烈的掌声向大家致意! 👏🏼 徽章名称 优胜者(来自社区) 优胜者(来自InterSystems) 提名:年度突破奖 授予在 2022 年开始做出贡献并在 2022 年拥有最多帖子、点赞、翻译和观看次数的成员。 2022年度突破奖 @Lucas.Enard2487 @Smythe.Smythee @Mark.OReilly – 提名:InterSystems 热门作者 授予其文章在 2022 年获得最多浏览量的作者。 第一名:2022 金牌热门作者 @Yuri Marx @Toshihiko Minamoto 第二名:2022 银牌热门作者 @Lucas.Enard2487 @Michael Lei 第三名:2022 青铜热门作者 @姚 鑫 @Evgeny Shvarov 4 - 10 名:2022 热门作者 @Muhammad Waseem @Evgeniy Potapov @Robert Cemper @José Roberto Pereira @Lorenzo Scalese @Iryna Mykhailova @Dmitry Maslennikov @Guillaume Rongier @Mihoko Iijima @Eduard Lebedyuk @Qiao Peng @Alberto Fuentes @Megumi Kakechi @Ricardo Paiva 提名:InterSystems 专家 授予在 2022 年获得最多接受答案的作者。 第一名:2022 金牌专家 @Robert Cemper @Eduard Lebedyuk 第二名:2022 银牌专家 @Julius Kavay @Michael Lei 第三名:2022 铜牌专家 @Vitaliy Serdtsev @Alexander Koblov 4 - 10 名:2022 社区专家 @Dmitry Maslennikov @Jeffrey Drumm @David Hockenbroch @Cristiano Silva @John Murray @Yaron Munz @Julian Matthews @Vic Sun @Marc Mundt @Timothy Leavitt @Guillaume Rongier @Alex Woodhead @Ben Spead @Evgeny Shvarov 提名:InterSystems 意见领袖 授予在 2022 年帖子和答案获得最高赞数的作者。 第一名:2022 金牌意见领袖 @Yuri Marx @Angelo Bruno Braga 第二名:2022 银牌意见领袖 @Robert Cemper @Eduard Lebedyuk 第三名:2022 铜牌意见领袖 @Dmitry Maslennikov @Guillaume Rongier 4 - 10 名:2022 社区意见领袖 @王喆 @Muhammad Waseem @Lorenzo Scalese @姚 鑫 @Lucas Enard @Kurro Lopez @Julius Kavay @Evgeny Shvarov @Ben Spead @Rochael Ribeiro @Timothy Leavitt @Bob Kuszewski @Danusa Calixto @Raj Singh 热烈祝贺以上优胜者!感谢你们在 2022 年为 InterSystems 开发者社区做出的巨大贡献! 欢迎参与我们的年度调查,帮助我们变得更好: 👉🏼 InterSystems 开发者社区年度调研(2022) 👈🏼 Congratulations to @姚 鑫 @王喆 @Michael Lei @Qiao Peng
文章
Louis Lu · 一月 26, 2022

在 InterSystems IRIS 中使用网页版本的命令行工具 - Web Terminal

许多使用InterSystems IRIS的用户在调试代码的时候习惯使用命令行的方式,比如运行一个函数查看输出或者查看代码运行过程中保存在global中的数据等等。 对于将 InterSystems IRIS 安装在 Windows 操作系统的用户,只需要点击右下角图标选择Terminal 就可以很方便的使用。 但是对于将其安装到 Linux 或者Docker 容器中的用户,要使用命令行却不那么方便,下面我将会介绍在我们 Openexchange 中的一个应用 -- Web Terminal。 也就是说可以在网页中直接执行Terminal中的命令。 或者查看SQL执行结果: 可以在其中输入 /help ,获取更多帮助信息 安装 1. 点击进入项目下载页面,选择下载最新的版本。 2. 在任意的命名空间下导入下载的xml文件。 注意在这里选择导入文件的同时也要勾选上 “编译导入的项” 3. 之后会出现下面提示导入成功的提示 如果出现类似于下面的错误提示: 请将下载的 WebTerminal-v4.9.3.xml 文件编辑做下面修改 1 . 第1611行:修改为 set requiredRole = "%DB_IRISSYS" 2. 第1730行:修改为 set dbPrefix = "IRIS" 重新导入就可以了。 使用 安装上面步骤安装完后,只需要在浏览器中输入网址:http://[host]:[port]/terminal/ (注意最后的 / 符号必须有)(比如:http://localhost:52777/terminal/) 输入访问的用户名密码后,就可以进入网页版本的terminal了 在Openexchange中详细介绍的地址在这里,更详细的文档可以点击这里 大佬,下载链接失效了,新的在这 https://intersystems-community.github.io/webterminal/#downloads 我是在docker中的iris 2024 导入的,在重启之前他可以用,但是在重启后这个就用不了了,显示401,这个是什么情况? 请参考文章:https://cn.community.intersystems.com/post/%E5%9C%A8iris-20242-%E4%B8%AD%E4%BD%BF%E7%94%A8-webterminal
公告
Claire Zheng · 五月 20, 2024

InterSystems 编程大赛获奖名单公布:Vector Search, GenAI 与 ML

Hi开发者们, 我们很开心地向大家公布 InterSystems编程大赛:Vector Search, GenAI 与 ML 的获奖者! 我们收到了 15份参赛作品 🔥,感谢这些出色的参赛者! 专家提名奖 🥇第一名,5,000 美元, @Maria.Nesterenko, @KATSIARYNA.Shaustruk, @Maria.Gladkova 提交的应用程序BG-AppealAI 🥈第二名,3,000 美元, @José.Pereira, @henry, @Henrique 提交的应用程序 iris-medicopilot 🥉 第三名,1,500 美元, @Ikram.Shah3431 提交的应用程序 IRIS AI Studio 🏅第四名,750 美元, @Zacchaeus.Chok, @crystalcheong 提交的应用程序iris-health-coach 🏅第五名,500美元,@Julio.Momente, @davimassaru.teixeiramuta, @Lucas.Fernandes7309 提交的应用程序 companies-search 🌟 100 美元, HackUPC24_Klìnic ,由 @Tanguy.Vansnick 提交 🌟 100 美元, geo-vector-search ,由 @Robert.Cemper1003 提交 🌟 100 美元, AriticleSimilarity ,由 @xuanyou.du 提交 🌟 100 美元, iris-VectorLab ,由 @Muhammad.Waseem 提交 🌟 100 美元, DNA-similarity-and-classify ,由 @davimassaru.teixeiramuta, @Nicole.Raimundo 提交 社区提名奖 🥇 第一名,1,000 美元,@José.Pereira, @henry, @Henrique 提交的应用 iris-medicopilot 🥈 第二名,750 美元, @Maria.Nesterenko, @KATSIARYNA.Shaustruk, @Maria.Gladkova 提交的应用 BG-AppealAI 🥉 第三名,500 美元, @shan.yue 提交的应用 iris-image-vector-search 🏅 第四名,300 美元,@xuanyou.du 提交的应用 AriticleSimilarity 🏅 第五名,200 美元, @Julio.Momente, @davimassaru.teixeiramuta, @Lucas.Fernandes7309 提交的应用 companies-search 我们向所有参赛者和获奖者表示最诚挚的祝贺! 下次再一起享受乐趣吧;) 热烈祝贺我们两位中文社区参赛朋友 @xuanyou du @shan yue !!!
文章
Michael Lei · 九月 26, 2024

使用 GitLab 持续交付 InterSystems 解决方案 – 第 2 部分:GitLab 工作流

在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:Git 101Git 流程(开发流程)GitLab 安装GitLab 工作流持续交付GitLab 安装和配置GitLab CI/CD在上一篇文章中,我们介绍了 Git 基础知识、深度理解 Git 概念对现代软件开发至关重要的原因,以及如何使用 Git 开发软件。 我们的侧重点仍是软件开发的实现部分,但本部分会介绍:GitLab 工作流 - 从想法到用户反馈的完整软件生命周期流程持续交付 – 软件工程方式,团队通过这种方式在短周期内制作软件,从而确保软件可以随时实现可靠发布。 它的目的是更快速、更频繁地构建、测试和发布软件。GitLab 工作流GitLab 工作流是软件开发流程整个生命周期中可能采取的操作的逻辑序列。GitLab 工作流会考虑我们在上一篇文章中探讨的 GitLab 流程。 具体如下:想法:每个新提议都始于一个想法。问题:探讨想法最有效的方法是为它创建问题。 您的团队和协作者可以在问题跟踪器中帮助您完善和改进问题。计划:在讨论达成一致意见后,就可以开始编码了。 但首先,我们需要将问题指定至里程碑和问题看板,以此确定工作流的优先级并进行组织。编码:现在,一切安排就绪后,我们就可以编写代码了。提交:对草稿满意后,我们便可将代码提交到具有版本控制的功能分支。 上一篇文章详细介绍了 GitLab 流程。测试:使用 GitLab CI 运行我们的脚本,以构建并测试应用程序。审查:在脚本能够正常运行且测试和构建成功后,我们便可以让代码接受审查并获得批准。暂存:现在应该将代码部署到暂存环境,以检查一切是否按预期进行,或者我们是否仍需要进行调整。生产:如果一切顺利,便可将代码部署到生产环境!反馈:现在可以回顾之前的流程,并检查有哪些阶段的工作需要改进。再次说明,流程本身不是新的(或者 GitLab 独有的),并且可以通过其他工具来实现。我们来讨论一下其中的几个阶段以及这些阶段涉及的内容。 还提供文档。问题和计划GitLab 工作流的开始阶段以问题为中心,问题是指一个功能、一个错误或其他在语义上独立的工作。问题有多个目的,例如:管理:问题具有截止日期、指定人员、用时和估计等, 可以帮助跟踪问题解决情况。行政管理:问题是里程碑的一部分,我们可以通过看板跟踪软件从一个版本过渡到另一个版本的进展。开发:问题具有与之相关的讨论和提交。在计划阶段,我们可以按问题的优先级、里程碑、看板将问题分组,并获得问题的概览。开发在前一部分进行了讨论,只需按照您希望使用的任何 git 流程执行操作即可。 我们开发了新功能并将其合并到 master 分支后,接下来应怎样操作?持续交付持续交付是一种软件工程方式,团队通过这种方式在短周期内制作软件,从而确保软件可以随时实现可靠发布。 它的目的是更快速、更频繁地构建、测试和发布软件。 这种方式允许对生产中的应用程序进行更多增量更新,从而帮助缩减交付更改的成本、缩短时间,以及降低风险。 简单且可重复的部署过程对于持续交付非常重要。GitLab 中的持续交付在 GitLab 中,持续交付配置按仓库以 YAML 配置文件形式定义。持续交付配置是一系列连续的阶段。每个阶段都有一个或多个并行执行的脚本。脚本定义了一个操作以及执行该操作需要满足的条件:要执行的操作(运行 OS 命令、运行容器)?何时运行脚本:触发脚本的条件(特定分支)?之前的阶段失败时是否运行?手动运行还是自动运行?脚本在什么环境中运行?执行脚本后保存哪些工件(这些工件会从环境上传到 GitLab,以便轻松访问)?环境是配置好的服务器或容器,可用于运行脚本。运行程序用于在特定环境中执行脚本。 运行程序连接到 GitLab,并根据需要执行脚本。运行程序可以部署在服务器上、容器上,甚至部署在本地机器上。持续交付是如何实现的?新提交推送到仓库中。GitLab 检查持续交付配置。持续交付配置包含适用于所有情况的全部脚本,因此要过滤出应针对这一特定提交运行的一组脚本(例如提交到 master 分支仅会触发与 master 分支相关的操作)。 这组脚本称为管道。管道是在目标环境中执行的,执行结果会保存并显示在 GitLab 中。例如,下面是提交到 master 分支后执行的一个管道:管道包含四个阶段,各阶段连续执行加载阶段会将代码加载到服务器中测试阶段会运行单元测试封装阶段包含两个并行运行的脚本:构建客户端导出服务器代码(主要用于提供信息)部署阶段会将构建的客户端移动到 Web 服务器目录中。我们可以看到,每个脚本都成功运行,如果其中一个脚本运行失败,则默认不会运行后面的脚本(但我们可以更改此行为):如果我们打开脚本,可以查看日志并确定脚本运行失败的原因: Running with gitlab-runner 10.4.0 (857480b6) on test runner (ab34a8c5) Using Shell executor... Running on gitlab-test... Fetching changes... Removing diff.xml Removing full.xml Removing index.html Removing tests.html HEAD is now at a5bf3e8 Merge branch '4-versiya-1-0' into 'master' From http://gitlab.eduard.win/test/testProject * [new branch] 5-versiya-1-1 -> origin/5-versiya-1-1 a5bf3e8..442a4db master -> origin/master d28295a..42a10aa preprod -> origin/preprod 3ac4b21..7edf7f4 prod -> origin/prod Checking out 442a4db1 as master... Skipping Git submodules setup $ csession ensemble "##class(isc.git.GitLab).loadDiff()" [2018-03-06 13:58:19.188] Importing dir /home/gitlab-runner/builds/ab34a8c5/0/test/testProject/ [2018-03-06 13:58:19.188] Loading diff between a5bf3e8596d842c5cc3da7819409ed81e62c31e3 and 442a4db170aa58f2129e5889a4bb79261aa0cad0 [2018-03-06 13:58:19.192] Variable modified var=$lb("MyApp/Info.cls") Load started on 03/06/2018 13:58:19 Loading file /home/gitlab-runner/builds/ab34a8c5/0/test/testProject/MyApp/Info.cls as udl Load finished successfully. [2018-03-06 13:58:19.241] Variable items var="MyApp.Info.cls" var("MyApp.Info.cls")="" Compilation started on 03/06/2018 13:58:19 with qualifiers 'cuk /checkuptodate=expandedonly' Compiling class MyApp.Info Compiling routine MyApp.Info.1 ERROR: MyApp.Info.cls(version+2) #1003: Expected space : '}' : Offset:14 [zversion+1^MyApp.Info.1] TEXT: quit, "1.0" } Detected 1 errors during compilation in 0.010s. [2018-03-06 13:58:19.252] ERROR #5475: Error compiling routine: MyApp.Info.1. Errors: ERROR: MyApp.Info.cls(version+2) #1003: Expected space : '}' : Offset:14 [zversion+1^MyApp.Info.1] > ERROR #5030: An error occurred while compiling class 'MyApp.Info' ERROR: Job failed: exit status 1 编译错误导致脚本失败。 结论 GitLab 支持软件开发的所有主要阶段。持续交付可以帮助您自动执行软件构建、测试和部署任务。 链接 第 1 部分:GitGitLab 工作流简介GitLab CI/CD 文档GitLab 流程本文的代码 后续内容 在下一篇文章中,我们将: 安装 GitLab。将它连接到多个安装了 InterSystems 产品的环境。编写持续交付配置。 我们来探讨一下持续交付的运作方式。 首先,我们需要多个环境以及与之对应的分支。 代码进入此分支,并交付到目标环境: 环境分支交付有权提交的角色有权合并的角色测试master自动开发者、所有者开发者、所有者preprod预生产自动无所有者prod生产半自动(按下按钮进行交付)无所有者 作为示例,我们将使用 GitLab 流程开发一个新功能,并使用 GitLab CD 进行交付。 在功能分支中开发功能。对功能分支进行审查并将其合并到 master 分支中。一段时间(合并了多个功能)后,将 master 分支合并到 preprod 分支中一段时间(用户测试等)后,将 preprod 分支合并到 prod 分支中 具体如下图所示: 开发和测试开发者将新功能的代码提交到单独的功能分支中功能稳定后,开发者将功能分支合并到 master 分支中来自 master 分支的代码被交付到测试环境,在其中进行加载和测试交付到预生产环境开发者创建从 master 分支到 preprod 分支的合并请求仓库所有者在一段时间后批准合并请求来自 preprod 分支的代码被交付到预生产环境交付到生产环境开发者创建从 preprod 分支到 prod 分支的合并请求仓库所有者在一段时间后批准合并请求仓库所有者按下“部署”按钮来自 prod 分支的代码被交付到生产环境 也可以用示意图形式表示此流程:
文章
Michael Lei · 九月 27, 2024

使用 GitLab 持续交付 InterSystems 解决方案 – 第 5 部分:为何使用容器

在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:Git 101Git 流程(开发流程)GitLab 安装GitLab 工作流持续交付GitLab 安装和配置GitLab CI/CD为何使用容器使用容器的 GitLab CI/CD在第一篇文章中,我们介绍了 Git 基础知识、深度理解 Git 概念对现代软件开发至关重要的原因,以及如何使用 Git 开发软件。在第二篇文章中,我们介绍了 GitLab 工作流 – 一个完整的软件生命周期流程,并介绍了持续交付。在第三篇文章中,我们介绍了 GitLab 安装和配置以及将环境连接到 GitLab在第四篇文章中,我们编写了 CD 配置。在这篇文章中,我们将介绍容器以及使用容器的方法(和原因)。这篇文章假设读者熟悉 docker 和容器的概念。 如果您想了解容器和镜像,请查阅 @Luca.Ravazzolo 撰写的文章。优势使用容器有诸多优势:可移植性效率隔离轻量不可变性下面我们来具体介绍这些优势。可移植性容器将应用程序与运行所需的一切(如配置文件和依赖项)打包在一起。 这样一来,您可以在您本地台式机、物理服务器、虚拟服务器、测试、暂存、生产环境以及公共云或私有云等不同环境中轻松、可靠地运行应用程序。可移植性的另一个优势是,在您构建 Docker 镜像并确认它可以正常运行后,它便可以在任何运行 docker 的位置(目前是 Windows、Linux 和 MacOS 服务器)运行。效率实际上,您只需要运行应用程序进程,而不需要运行所有系统软件等。 容器恰好可以满足这一需求 – 容器仅会运行您明确需要的进程,而不运行其他进程。 由于容器不需要单独的操作系统,占用的资源较少。 虚拟机的大小通常为几千兆字节,而容器的大小通常只有几百兆字节,因此在一台服务器上运行的容器数量要比虚拟机多得多。 由于容器对底层硬件的利用率更高,您需要的硬件更少,从而降低了裸机成本和数据中心成本。隔离容器会将应用程序与其他一切隔离开,同时多个容器可以在同一台服务器上运行,它们可以完全彼此独立。 容器之间的任何交互都应明确声明。 如果一个容器发生故障,它不会影响其他容器,并且可以快速重新启动。 得益于这种隔离机制,安全性也得到了保障。 例如,利用裸机上的 Web 服务器漏洞可能会让攻击者访问整个服务器,但如果使用的是容器,攻击者只能访问 Web 服务器容器。轻量由于容器不需要单独的操作系统,只需几秒钟即可启动、停止或重新启动,从而可以加快所有相关开发流程并缩短生产时间。 您可以更快地开始工作,并且无需花费任何时间进行配置。 不可变性不可变基础架构由不可变组件组成,每次部署时都会替换这些组件,而不是就地更新。 这些组件通过每次部署构建一次的通用镜像启动,可以进行测试和验证。不可变性减少了不一致情况,并且可以轻松地在应用程序的不同状态之间进行复制和移动。 详细了解不可变性。新可能利用上文提到的所有优势,我们可以通过全新的方式管理基础架构和工作流。编排裸机或虚拟机环境存在一个问题 – 它们具有个体性,这一问题会在使用过程中带来许多意外,而这些意外通常不尽如人意。 解决这一问题的方法是基础架构即代码 – 利用 DevOps 团队为源代码使用的版本控制方法,采用描述性模型管理基础架构。通过基础架构即代码,无论环境的起始状态如何,部署命令始终会将目标环境设为相同的配置。 要实现这一点,可自动配置现有目标,也可以丢弃现有目标并重新创建全新的环境。因此,利用基础架构即代码,团队会更改环境描述并对配置模型进行版本控制,而配置模型通常采用 JSON 等归档完好的代码格式。 发布管道会执行该模型,以配置目标环境。 如果团队需要进行更改,则可以编辑源代码,而不是目标环境。借助容器,这一切都可以实现,并且实施起来简单得多。 关闭容器并启动一个新容器只需几秒钟,而配置新虚拟机则需要几分钟。 我甚至都没有提到将服务器回滚到空白状态。扩缩基于之前的描述,您可能认为基础架构即代码本身是静态的。 并不是这样,因为编排工具也可以根据当前工作负载提供横向扩缩(进行更多相同的配置)。 您仅应运行目前需要的容器,并相应地扩缩应用程序。 这样还可以降低成本。结论容器可以简化开发流程。 消除了环境之间的不一致,可以更轻松地进行测试和调试。 可以通过编排构建可扩缩应用程序。可以轻松实现部署或回滚到不可变历史的任意点。组织希望在更高层级上处理任务,其中所有上述问题均已得到解决,并且我们发现调度程序和编排程序以自动方式为我们处理更多的任务。后续内容在下一篇文章中,我们将探讨使用容器进行配置,并创建利用 InterSystems IRIS Docker 容器的 CD 配置。
文章
Michael Lei · 九月 27, 2024

使用 GitLab 持续交付 InterSystems 解决方案 – 第 6 部分:容器基础架构

在这一系列文章中,我想向大家介绍并探讨使用 InterSystems 技术和 GitLab 进行软件开发可以采用的几种方式。 我将介绍以下主题:Git 101流程(开发流程)GitLab 安装GitLab 工作流持续交付GitLab 安装和配置GitLab CI/CD为何使用容器?容器基础架构使用容器的 GitLab CI/CD在第一篇文章中,我们介绍了 Git 基础知识,以及为什么对 Git 概念的高层次理解对于现代软件开发如此重要,以及如何使用 Git 开发软件。在第二篇文章中,我们介绍了 GitLab 工作流 – 一个完整的软件生命周期流程和持续交付。在第三篇文章中,我们介绍了 GitLab 的安装和配置以及如何将环境连接到 GitLab。在第四篇文章中,我们编写了 CD 配置。在 第五篇文章中,我们讨论了容器与如何(以及为什么)使用它们。在本文中,我们将探讨运行使用容器的持续交付管道所需的主要组件,以及它们如何协同工作。我们的配置如下所示:在这里,我们可以看到三个主要阶段的分离:构建传送运行构建在之前的部分中,构建通常是增量式 – 我们计算当前环境与当前代码库之间的差异,并修改我们的环境以与代码库相对应。 使用容器时,每次构建都是完整构建。 构建的结果是一个可以通过依赖关系在任何地方运行的镜像。传送在我们的镜像构建并通过测试后,它会被上传到注册表 – 用于托管 docker 镜像的专用服务器。 在那里,它可以替换具有相同标签的旧镜像。 例如,由于对 master 分支的新提交,我们构建了新镜像 (project/version:master),如果测试通过,我们可以用相同标签的新镜像替换注册表中的旧镜像,这样,所有拉取 project/version:master 的人都会获得新版本。运行最后,我们的镜像部署完成。 CI 解决方案(如 GitLab)可以控制此流程,也可以由专门的编排器控制,但目的都一样 – 执行一些镜像,定期检查健康状态,如果有新镜像版本可用就进行更新。查看 docker 网络研讨会以了解这些不同阶段的解释。或者,从提交的角度来看:
公告
Claire Zheng · 一月 30, 2024

【投票时间】InterSystems 编程大赛:FHIR和数字医疗互操作性

Hi开发者们, 投票时间到了!来为InterSystems 编程大赛:FHIR和数字医疗互操作性中的最佳应用程序投票: 🔥投票选出最佳应用程序🔥 如何投票?详细信息如下。 专家提名奖(Experts Nomination)- InterSystems 经验丰富的评审团将选出最佳应用程序。欢迎我们的专家: ⭐️ @Guillaume Rongier, Sales Engineer⭐️ @Sylvain Guilbaud, Sales Engineer⭐️ @Alexander Koblov, Senior Support Specialist⭐️ @Eduard Lebedyuk, Senior Cloud Engineer⭐️ @Steve Pisani, Senior Solution Architect⭐️ @Alexander.Woodhead, Senior Systems Developer⭐️ @Andreas Dieckow , Principal Product Manager⭐️ @Aya Heshmat, Product Manager⭐️ @Benjamin De Boe, Product Manager⭐️ @Bob Kuszewski, Product Manager⭐️ @Carmen Logue , Product Manager⭐️ @Luca Ravazzolo, Product Manager⭐️ @Raj Singh, Product Manager⭐️ @Patrick Jamieson, Product Manager⭐️ @Stefan Wittmann, Product Manager⭐️ @Thomas Dyar, Product Manager⭐️ @Daniel Franco, Senior Manager - Interoperability Product Management⭐️ @Timothy Leavitt, Development Manager⭐️ @Evgeny Shvarov, Senior Manager of Developer and Startup Programs⭐️ @Dean Andrews, Head of Developer Relations⭐️ @Jeff Fried, Director of Product Management 社区提名奖(Community Nomination) 对于每个用户,从以下两个类别中选择较高的分数: 满足条件 排名 第一名 第二名 第三名 在开发者社区上发布了文章并将应用程序上传到 Open Exchange (OEX) 9 6 3 在开发者社区上发布了至少 1 篇文章或已将 1 个应用上传到 OEX 6 4 2 对开发者社区做出任何有效贡献(发表评论/问题等) 3 2 1 等级 排名 第一名 第二名 第三名 Global Masters 的 VIP 级别 或 InterSystems 产品经理 15 10 5 Global Masters 的 Ambassador级别 12 8 4 Global Masters的Expert 级别或开发者社区版主 9 6 3 Global Masters的Specialist级别 6 4 2 Global Masters的Advocate级别,或 InterSystems员工 3 2 1 Blind vote! 每个应用获得的投票数将对所有人不可见。我们会每天在这个帖子(英文原贴)的评论区发布一次排行榜。 在竞赛页面上,项目按如下顺序排列:提交申请的时间越早,在列表中的排名就越靠前。 PS 不要忘记订阅(请订阅英文原贴),点击铃铛图标(如下所示),即可收到最新评论。 要参加投票,您需要: 登录 Open Exchange – 使用开发者社区账号即可。 在社区内进行有效贡献 ——回答问题、发帖、在Open Exchange发布新应用等等都可以,然后你的账号才可以参与投票。点击查看本帖 ,了解如何更好地成为有效的社区贡献者! 投票期间,如果你改了主意,可以随时将票改投给其他项目。 来支持您喜欢的应用吧! 注意:在投票期间,参赛者可以继续修复bug,提升应用,所以投票者不要错过最新发布的版本哦~