搜索​​​​

清除过滤器
文章
Claire Zheng · 一月 20, 2021

InterSystems IRIS数据平台:数据接收速度测试

跨行业用例大多要求具备每秒接收数千或数百万条记录的能力,同时能够支持实时同步查询,例如:股票交易处理、欺诈检测、物联网应用(包括异常检测和实时OEE监控)等。Gartner将这种能力称为“HTAP”(混合事务分析处理)。Forrester等其他公司将其称为Translytics。InterSystems IRIS是功能强大、可扩展、高性能、资源高效的事务分析型数据平台,同时具备内存数据库的高性能以及传统数据库的一致性、可用性、可靠性以及低成本的特性。 混合事务分析处理(HTAP)示例 此示例展示了InterSystems IRIS如何实现每秒接收数千条记录,同时允许对同一集群上的数据进行同步查询,该平台不仅具有很高的接收和查询性能,而且保持了较低的资源利用率。此示例可在单个InterSystems IRIS实例或云端InterSystems IRIS集群上运行。 大家也可以在SAP HANA、MySQL、SqlServer及Amazon Aurora上运行这个示例,以便对性能和资源利用率进行公平、合理的对比。 大家可以在AWS上运行该测试!以下是部分结果: 在AWS上运行InterSystems IRIS和SAP HANA: o在接收记录量方面,InterSystems IRIS比SAP HANA多39% o在查询速度方面,InterSystems IRIS比SAP HANA快3699% 在AWS上运行InterSystems IRIS和AWS Aurora(MySQL): o在接收记录量方面,InterSystems IRIS比AWS Aurora多831% o在查询速度方面,InterSystems IRIS比AWS Aurora快485% 大家可以在自己的PC上使用Docker(3个CPU和7GB RAM)运行该测试!以下是部分结果: 在个人PC上运行InterSystems IRIS和MySQL 8.0: o在接收记录量方面,InterSystems IRIS比MySQL 8.0多3043% o在查询速度方面,InterSystems IRIS比MySQL 8.0快643% 在Ubuntu系统中运行InterSystems IRIS和SQL Server 2019 o在接收记录量方面,InterSystems IRIS比SQL Server 2019多223%,速度也更快 o在查询速度方面,InterSystems IRIS比SQL Server 2019快134,632%(请注意,数字没有打错哦!) o为公平起见,我们未来将在AWS和Azure上对SQL Server进行测试。敬请期待! 在测试任何数据库的运行速度时,请先将速度测试运行一段时间进行预热,然后再记录结果。这样可以对数据库进行预扩展并执行其他操作。每次启动速度测试时,我们都需要清空表格重新开始。 1-在AWS上运行速度测试 请点击链接,查看如何在AWS上运行速度测试以便将InterSystems IRIS和其他数据库(如SAP HANA和AWS Aurora)进行对比。 2- 如何在PC上运行速度测试 在PC上运行速度测试的前提条件是: Docker和Docker Compose Git(可以克隆源代码) 目前,可以使用InterSystems IRIS、MySQL、SqlServer及SAP HANA在PC上运行本示例。 2.1 -在InterSystems IRIS Community上运行速度测试 要想在PC上运行本示例,请确保PC已经安装了Docker。您可以使用以下命令在Mac或Linux系统的PC上快速启动并运行: wget https://raw.githubusercontent.com/intersystems-community/irisdemo-demo-htap/master/docker-compose.yml docker-compose up 如果在Windows系统中运行速度测试,请将docker-compose.yml文件下载到一个文件夹中。打开命令提示符,并切换到该文件夹,然后运行docker-compose up c:\MyFolder\docker-compose up 您也可以将存储库克隆到本地计算机上,从而获得完整的源代码。这时需要安装git,并将其放在git文件夹中: git clone https://github.com/intersystems-community/irisdemo-demo-htap cd irisdemo-demo-htap docker-compose up 这两种技术都可行,并会触发示例中用于演示的镜像文件下载,之后将立刻启动所有的容器。 容器启动过程中,将出现与启动中容器相关的大量消息。这是正常的,不用担心! 启动完成后,它会一直挂在那里,不会把控制权交还给你。这也是正常的。将窗口开着就可以。如果在此窗口上按CTRL+C,docker compose将停止所有容器并停止示例演示。 在所有容器启动之后,在浏览器上打开http://localhost:10000可查看示例的界面。点击“Run Test”按钮即可运行HTAP Demo! 完成Demo演示后,返回到该终端并按CTRL+C。也可以输入以下命令,停止并删除仍在运行的容器: docker-compose stop docker-compose rm 这点很重要,特别是要在一个数据库(如InterSystems IRIS)和另一个数据库(如MySQL)之间反复运行速度测试时。 2.2 -PC上的MySQL 基于MySQL运行此示例,可以输入以下命令: wget https://raw.githubusercontent.com/intersystems-community/irisdemo-demo-htap/master/docker-compose-mysql.yml docker-compose -f ./docker-compose-mysql.yml up 现在,我们将下载一个不同的docker-compose yml文件:一个带有mysql后缀的文件。我们必须在docker-compose命令中使用-f选项来使用此文件。如前所述,将该终端窗口保持打开状态,并在浏览器上打开http://localhost:10000。 示例运行完成后,请返回终端并按CTRL+C。也可以输入以下命令,停止并删除仍在运行的容器: docker-compose -f ./docker-compose-mysql.yml stop docker-compose -f ./docker-compose-mysql.yml rm 这点很重要,特别是要在一个数据库(如InterSystems IRIS)和其他数据库之间反复运行速度测试时。 我们在测试中发现,InterSystems IRIS的数据接收速度比MySQL和Amazon Aurora快25倍。 2.3 -PC上的SQL Server 2019-GA-ubuntu-16.04 基于SQL Server运行此示例,可以输入以下命令: wget https://raw.githubusercontent.com/intersystems-community/irisdemo-demo-htap/master/docker-compose-sqlserver.yml docker-compose -f ./docker-compose-sqlserver.yml up 与前面一样,将该终端窗口保持打开状态,并在浏览器上打开http://localhost:10000。 我们在本地PC上运行速度测试后发现,InterSystems IRIS的数据接收速度比SQL Server快2.5倍,查询速率则快400倍!我们将与AWS RDS SQL Server相比较,进行速度测试并生成报告。 2.4 -PC上的SAP Hana 要在PC上基于SAP HANA运行速度测试,需要满足以下条件: 包含了Ubuntu 18 VM、docker和docker-compose的虚拟机——因为SAP HANA要求对Linux内核参数进行一些更改,否则将无法支持Mac或Windows上的Docker。另外,SAP HANA需要Linux内核4或更高版本。 该虚拟机至少配置9GB RAM,否则将无法启动!虚拟机崩溃后将显示无用的错误消息。 基于SAP HANA运行此Demo,可以输入以下命令: git clone https://github.com/intersystems-community/irisdemo-demo-htap cd ./irisdemo-demo-htap ./run.sh hana 等待下载镜像和启动容器。当docker-compose停止向屏幕写入时,一切已准备就绪。但是请耐心等待——SAP HANA大约需要6分钟才能启动!因此,屏幕会冻结一分钟左右,然后你会看到SAP HANA写入更多文本。这个重复写入过程大约持续6分钟。看到“启动完成!(Startup finished!)”后,就可以开始下一步了。如果在此过程中因为错误而发生崩溃,则可能需要配置更多的内存。 如您所知,与在InterSystems IRIS和MySQL中运行速度测试一样,使用SAP HANA测试不仅仅是运行docker-compose,还需要对Linux内核进行一些配置。大家可以通过run.sh文件来完成这些配置。 我们在虚拟机上运行速度测试后发现,InterSystems IRIS的数据接收速度比SAP HANA快1.3倍,查询数据的速度快20倍,并且使用了更少的内存。 3-资源 我们正在制作有关本示例的视频。在此期间,您可以点击链接查看一篇有意思的文章,该文章介绍了InterSystems IRIS的体系结构,并解释了为什么它能以更快的速度接收和查询数据。 4-该基准测试与YCSB或TPC-H等标准基准测试相比如何? Yahoo Cloud Serving Benchmark(YCSB)是一项开源项目,其目的是开发一个框架和一组通用的工作负载,来评估不同的“键-值存储”和“云”服务的性能。 尽管YCSB上有一些工作负载可以描述成HTAP,但YCSB不一定要依靠SQL来完成。但是该基准必须依靠SQL。 TPC-H侧重于决策支持系统(DSS),而这并不是我们正在研究的用例。 此基准测试针对的是接收速度和查询响应时间之间的关系。我们有一个表格,其中包含许多不同数据类型的列。我们想衡量一个数据库在允许响应式查询的同时,其接收记录的速度能有多快。 这是一个复杂的问题。金融服务和物联网等许多行业都要求每秒必须接收数千条记录。在如此高的接收速率下,内存消耗得非常快。传统数据库需要写入磁盘,而内存数据库也将被迫不断写入磁盘(更改log/journal,甚至在某些情况下部分数据会写入内存,就像传统数据库一样)。问题是:如果InterSystems IRIS不仅要将事务日志写入磁盘(像内存数据库一样),还要异步保持数据库的最新状态,那么InterSystems IRIS是如何做到比内存数据库更快的呢? 一切都与效率有关。接收工作负载会使数据库非常繁忙。CPU和内存都将努力运转。一些内存数据库将尝试压缩内存中的数据。其他内存数据库在内存已满时会将数据持久化到磁盘。所有这些在我们试图实时查询数据库时都有发生。 我们想要证明,在某些工作负载上(例如股票交易、高接收吞吐量[物联网]等),内存数据库的性能不及InterSystems IRIS。这就是我们设计本测试的原因。这意味着该测试比一般用途的测试要简单得多: (1)它只有一个表格,包含19个列和3种差别很大的数据类型 (2)表格上声明了主键(Primary Key)。 (3)我们执行的查询将通过主键(账户ID)获取记录,并使用固定的8个键随机查询:W1A1、W1A10、W1A100、W1A1000、W1A10000、W1A100000、W1A1000000和W1A10000000。这样做的原因如下: 我们知道,在生产系统的内存中保存所有数据是不可能的。内存数据库虽然具有复杂的体系结构,但当内存满了之后,就会将数据移出内存。为了简化测试并使其具有可比性,我们通过主键获取固定记录集,以避免对数据库中可能存在的其他类型的索引进行比较。 通过账号(主键)获取客户账户数据记录是我们许多客户的真实工作负载。数据库在高速接收数据的同时,也需要对查询做出响应。 由于账户ID是主键,因此数据库将使用它的首选(即最优)索引对其进行索引。这样在比较数据库时能够保持公平、简单。 当我们不断请求相同的账号时,数据库有可能将该数据缓存在内存中。这对于内存数据库来说是一项轻松的任务。 InterSystems IRIS是一个混合型数据库。与传统数据库一样,它也尝试将数据保存在内存中。但由于每秒需要接收成千上万的记录,因此内存清理得非常快。通过这个测试可以看到,与其他传统数据库和内存数据库相比,InterSystems IRIS在缓存方面更加智能。你会看到: (1)传统数据库在同时处理接收和查询时表现不佳 (2)内存数据库: 在测试的最初几分钟内表现良好,随着内存填满,数据压缩变得更加困难,不可避免地要写入磁盘 由于系统忙于接收、压缩数据,以及将数据移出内存等,因此查询性能表现不佳。 5-表是怎样的? 以下是我们发送到所支持的全部数据库的建表语句: CREATE TABLE SpeedTest.Account ( account_id VARCHAR(36) PRIMARY KEY, brokerageaccountnum VARCHAR(16), org VARCHAR(50), status VARCHAR(10), tradingflag VARCHAR(10), entityaccountnum VARCHAR(16), clientaccountnum VARCHAR(16), active_date DATETIME, topaccountnum VARCHAR(10), repteamno VARCHAR(8), repteamname VARCHAR(50), office_name VARCHAR(50), region VARCHAR(50), basecurr VARCHAR(50), createdby VARCHAR(50), createdts DATETIME, group_id VARCHAR(50), load_version_no BIGINT ) 插入程序Ingestion Worker会尽可能多地发送INSERT数据,以测量每秒插入的记录数据量以及每秒的兆字节数。 查询程序Query worker将通过account_id从此表中进行选择,并尝试选择尽可能多的记录来测量性能(即每秒选择的记录以及每秒选择的兆字节),以测试端到端性能,并提供工作量证明(Proof of Work)。 端到端性能与一些JDBC驱动程序最优化有关。如果仅执行查询操作,JDBC驱动程序可能不会从服务器获取记录,只有当实际请求列值后,JDBC驱动程序才会从服务器获取记录。 为了证明实际读取的正是我们选取的列,我们将返回的所有fild的字节加起来作为工作量证明。 6-如何实现接收和查询的最大吞吐量? 为了实现最大吞吐量,每个ingestion worker将启动多个线程,每个线程将: (1)为上述表格的每一列准备1000个随机值。这样做是为了让每一列具有不同的数据类型和大小。所以我们希望生成可相应变化的记录 (2)对于要插入的每个新记录,ingestion worker将在每列的1000个值中随机选择一个值,准备好之后,该记录将被添加到批处理中 (3)使用批量插入,默认批量大小为每批1000条记录 Ingestion worker的默认线程数量是15,但是可以在测试过程中单击“设置”进行更改。 另一方面,query worker也启动多个线程来查询尽可能多的记录。如上所述,我们也将提供工作量证明。我们将读取返回的列,并汇总读取的字节数,以确保数据是从数据库通过连接传输进入query worker的,从而避免某些JDBC驱动程序实现优化后,仅在实际使用数据时才通过连接传输数据。我们实际使用返回的数据,并提供每秒读取数据的兆字节总和以及读取的总兆字节数作为工作量证明。 7-占用多少磁盘空间? 在接收171,421,000条记录后,我填满了一个70Gb的数据文件系统。这意味着,每条记录平均占用439个字节(向上取整)。 我还填写了第一个日志目录的100%和第二个日志目录的59%。这两个文件系统都有100Gb,这意味着171,421,000条记录将占用大约159Gb的日志空间,换言之,每条记录平均占用996个字节。 8-HTAP Demo体系架构 HTAP Demo的体系架构如下图所示: 本示例使用docker compose启动五项服务: (1)htapui——这是用于运行示例的Angular UI。 (2)htapirisdb——由于本示例在InterSystems IRIS Community上运行,所以不需要InterSystems IRIS许可证即可运行。但请注意,InterSystems IRIS Community有两个重要限制条件: 最多5个连接 数据库最大为10Gb (3)htapmaster——这是HTAP 示例主程序。UI与主程序对话,主程序与worker对话,以及启动/停止速度测试,并收集指标。 (4)ingest-worker1——这是插入程序ingestion worker。实际上,大家可以拥有多个ingestion worker,只需给每个worker分配不同的服务名称即可。它们将尝试尽快地将记录插入数据库。 (5)query-worker1——这是查询程序query worker,大家也可以拥有多个query worker。它们将尝试尽快地从数据库中读取记录。 在PC上运行示例时,我们使用的是Docker和Docker Compose。Docker Compose需要一个docker-compose.yml来描述这些服务及其使用的Docker镜像。本示例实际上提供了许多docker-compose.yml文件,并且很快将添加更多此类文件: (1)docker-compose.yml——这是针对InterSystems IRIS Community(上述项目及图片中有所描述)运行速度测试的默认演示程序。 (2)docker-compose-mysql.yml——这是针对MySQL的速度测试。大家应该注意到,该测试结果表明,InterSystems IRIS比MySQL快25倍。在Amazon Aurora MySQL(MySQL的微调版本)上运行此测试可得到相同的结果。 (3)docker-compose-sqlserver.yml——这是针对使用Docker部署的SqlServer的速度测试。 (4)docker-compose-enterprise-iris.yml——如果要在标准版本的InterSystems IRIS上运行速度测试示例,这是一个docker-compose.yml的文件例子。 9. 可以在没有容器的情况下在InterSystems IRIS集群上运行本Demo吗? 可以!完成此示例最简便的方法是将此存储库克隆到即将运行master(主程序)和(在同一服务器上运行的)UI的每台服务器上以及每种worker类型(接收和查询worker)上。你可以根据自己的需要,拥有任意数量的接收worker和查询worker! 对于InterSystems IRIS,请查看文件夹./standalone_scripts/iris-jdbc.中的文件。每个服务器都有一个脚本: (1)在主程序上:start_master_and_ui.sh——此脚本将启动主程序和UI。 (2)在Ingestion Worker上:start_ingestion_worker.sh——此脚本将启动Ingestion Worker,后者随后将与主程序连接并进行注册。 (3)在Query Worker上:start_query_worker.sh——此脚本将启动query worker,然后query worker将与主程序连接并进行注册。 对于InterSystems IRIS,大家有两种选择: (1)可以使用start_iris.sh脚本在Docker容器上启动InterSystems IRIS服务器进行快速测试。 (2)可以手动或使用ICM设置InterSystems IRIS集群。然后做一些有趣的事情,比如: 使接收和查询worker都指向同一InterSystems IRIS 使用ECP配置InterSystems IRIS,让ingestion worker指向数据库服务器,同时让query worker指向ECP服务器 配置分片的InterSystems IRIS集群 等等 只要确保更改start_master.sh脚本中对应使用正确的InterSystems IRIS端点、用户名和密码来配置环境变量。 10-自定义 10.1 -如何配置本Demo让其与更多worker、线程等一起工作? Docker-compose.yml文件中的环境变量支持配置所有内容。docker-compose.yml文件只是个不错的起点:大家可以复制它们并对副本进行更改,从而得到更多的worker(如果在PC上运行,不会有太大区别),每个worker类型都可以得到更多线程数,还可以更改接收数据的批处理大小,以及各查询之间的等待时间(以毫秒为单位)等。 10.2 -可以更改表的名称或结构吗? 可以,但必须: (1)在PC上将复制此存储库 (2)更改源代码 (3)使用shellscript build.sh在PC上重建demo。 更改表的结构也很简单。 复制了该存储库后,需要更改/image-master/projects/master/src/main/resources文件夹下的文件。 如果更改表的结构,请确保使用与现有表相同的数据类型,这些数据类型是受支持的。另外还可以更改表的名称。 其次,需要配合更改其他* .sql脚本,如INSERT脚本、SELECT脚本等。 最后,只需运行build.sh来重建demo就可以了! 11-其他示例应用程序 我们还有一些其他涉及不同主题的InterSystems IRIS 示例应用程序,例如NLP、ML、与AWS服务的集成、Twitter服务、性能基准测试等。以下是其中的部分内容: (1)HTAP Demo——混合事务分析处理(HTAP)基准。可以测试InterSystems IRIS同时插入和查询数据的速度。你会发现它的速度比AWS Aurora快20倍! (2)欺诈预防——InterSystems IRIS通过机器学习和制定业务规则,防止金融服务交易中出现欺诈行为。 (3)Twitter情绪分析——演示InterSystems IRIS如何实时使用Tweet,并通过其NLP(自然语言处理)和业务规则功能来评估Tweet的情绪和元数据,从而决定何时与某人联系以提供支持。 (4)HL7协议和SMS(文本消息)应用程序——演示InterSystems IRIS医疗版如何解析HL7协议消息,从而给患者发送SMS(文本消息)提醒。它还演示了基于存储在标准化数据湖中预约数据的实时仪表板。 (5)Readmission Demo——患者再入院在医疗保健领域被称为"机器学习的Hello World"。针对这个问题,我们在本示例中演示了如何使用InterSystems IRIS安全地构建并运行用于实时预测的ML模型,以及如何将其集成到应用程序中。本InterSystems IRIS医疗版示例旨在展示如何构建针对再入院问题的完整解决方案。 12-支持的数据库 这是目前为止支持的数据库列表: Runing on your PC with docker-compose (NO mirroring/replication) InterSystems IRIS 2020.2 MySQL 8.0 MariaDB 10.5.4-focal MS SQL Server 2019-GA-ubuntu-16.04 SAP HANA Express 2.0 (on Linux VM only) Postgres 12.3 Running on AWS: InterSystems IRIS (with or without mirroring) AWS RDS Aurora (MySql) 5.6.10a (parallel query) with replication AWS RDS SQL Server 2017 Enterprise Edition (production deployment) with replication AWS RDS Postgres (production deployment) with replication AWS RDS MariaDB (production deployment) with replication SAP HANA Express Edition 2.0 without replication SAP Sybase ASE 16.0 SP03 PL08, public cloud edition, premium version, without replication AWS RDS Oracle (production deployment) with replication 注:本文为节选,欢迎点击原文链接,了解更多详情。
文章
Claire Zheng · 一月 20, 2021

InterSystems IRIS医疗版2020.1 HL7基准测试

简介 最近完成了针对IRIS医疗版2020.1版本的性能及可扩展性基准测试,重点关注HL7v2的互操作性。本文介绍了在各种工作负载下观察到的吞吐量,并提供了IRIS医疗版用作HL7v2消息传输互操作性引擎时的系统常规配置和调整准则。 基准测试模拟了与实际环境接近的工作负载(详细信息请参见“工作负载说明和方法”部分)。本次测试的工作负载包括HL7v2患者管理(ADT)和生命体征结果(ORU)数据,并包含数据内容转换和路由。 IRIS医疗版2020.1版本可以表明,采用第二代Intel®Xeon®可扩展处理器和Intel®Optane™SSD DC P4800X系列SSD存储的商用服务器,每天的持续消息吞吐量超过23亿条(入站和出站总量),与此前的Ensemble 2017.1 HL7v2吞吐量基准测试相比,扩展性提高了一倍多。 在这些测试过程中,将IRIS医疗版配置为先进/先出(FIFO)顺序,并且在磁盘中完整保存每个入站和出站消息以及消息队列信息。通过持久化消息队列和消息内容,IRIS 医疗版能够在系统崩溃时提供数据保护,并提供完整的历史消息搜索和重新发送功能。 下面将继续介绍配置准则,帮助您选择适当的配置和部署,以充分满足工作负载性能和可扩展性需求。 通过实验结果可以证实,IRIS 医疗版能够满足商用硬件上的极端消息吞吐量需求,并且在大多数情况下支持仅用单个小型服务器可为整个组织提供HL7互操作性服务。 结果概述 以下三种工作负载代表了HL7互操作性活动的不同方面: ·T1工作负载:使用HL7消息的简单传递,每条入站消息对应一个出站消息。不需要路由引擎就可以直接将消息从Ensemble业务服务传递到Ensemble业务操作。不使用任何路由规则,也不执行任何消息内容转换。每条入站消息都在数据库中创建了一个HL7消息对象。 ·T2工作负载:通过路由引擎将入站消息平均分成4个分段,并将其路由到单个出站接口(1对1转换)。对每条入站消息执行一次数据转换,并在数据库中创建两个HL7消息对象。 ·T4工作负载:使用路由引擎将单独修改的消息路由到四个出站接口中的每一个接口。平均而言,每次转换都会修改入站消息的4个分段(1条入站消息对应4条出站消息,进行4次转换)。对于每条入站消息,将执行4次数据转换,向外发送4条消息,并在数据库中创建5个HL7消息对象。 这三个工作负载是在一个物理48核系统上运行的,该系统有两个Intel®可扩展Gold 6252处理器和两个运行Red Hat Enterprise Linux 8的750GB Intel®Optane™SSD DC P4800X SSD驱动器。测试记录每秒(和每小时)入站的消息数、每秒(和每小时)出站的消息数,以及一天10小时内的总消息数(入站与出站)。此外,CPU利用率是用于衡量既定吞吐量水平下可用系统资源的指标。 可扩展性结果 表1:该测试硬件配置的四个工作负载吞吐量汇总 * 包含25%的T1,25%的T2和50%T4的“混合工作负载” 工作负载描述及方法论 测试的工作负载包括HL7v2患者管理(ADT)和生命体征结果(ORU)消息,平均大小为1.2KB,平均14个片段。通过转换大约修改了4个片段(针对T2和T4工作负载)。测试包括48至128个入站接口和48至128个出站接口,通过TCP/IP接收和发送消息。 在T1工作负载中,使用了四个单独的命名空间,每个命名空间有16个接口;T2工作负载使用了三个命名空间,每个命名空间有16个接口;T4工作负载使用了四个命名空间,每个命名空间有32个接口;最后的“混合工作负载”使用了三个命名空间,在所有的接口中:T1工作负载为16个,T2工作负载为16个,T4工作负载为32个。 逐渐增加每个接口上的通信量来衡量可扩展性,以寻找可接受性能标准范围内的最高吞吐量。为了获得可接受的性能标准,必须以持续不变的速率处理消息,无需排队,消息传递没有可测量的延迟,且平均CPU使用率必须保持在80%以下。 之前的测试表明,HL7消息类型对集成的性能或可扩展性没有显著影响;重要的影响因素包括入站消息的数量、入站和出站消息的大小、在路由引擎中创建的新消息的数量,以及修改的消息段的数量。 之前的测试还表明,在数据转换中处理HL7消息的各个字段通常对性能影响不大。这些测试中的转换通过相当简单的赋值来创建新消息。请注意,复杂的处理(例如在数据转换中使用大量的SQL查询)可能会导致结果发生变化。 之前的测试还验证了规则处理的影响通常不大。这些测试中使用的路由规则集平均为32条规则,所有规则都很简单。请注意,非常大或非常复杂的规则集可能会导致结果发生变化。 硬件 服务器配置 测试中使用的服务器采用了第二代Intel®可扩展Gold 6252“Cascade Lake”处理器,带有48核@ 2.1GHz的2插槽系统,每个插槽提供24个核心,并具有192GB DDR4-2933 DRAM和10Gb以太网网络接口。本测试使用的是Red Hat Enterprise Linux Server 8操作系统和InterSystems IRIS医疗版 2020.1。 磁盘配置 通过IRIS 医疗版传递的消息将完全持久化保存到磁盘上。本次测试中系统内部的两个Intel 750GBIntel®Optane™SSD DC P4800X SSD驱动器分开使用,一个用于数据库,一个用于日志。此外,除了确保与真实环境进行比较之外,还对日志启用了同步提交以确保数据持久化。对于本文前面提到的T4工作负载,每条入站HL7消息都会生成大约50KB的数据,这些数据可以进行细分(如表2所述)。事务日志的在线时间通常比消息数据或日志的时间短,在计算总磁盘空间时应该考虑到这一点。 表2:每条入站HL7 T4消息所需的磁盘空间 组成部分 数据要求 分段数据 4.5 KB HL7消息对象 2 KB 消息头 1.0 KB 路由规则日志 0.5 KB 事务日志 42 KB 总计 50 KB 回顾上文,T4工作负载使用路由引擎将每个修改后的消息路由到四个出站接口中的每一个接口。平均而言,每次转换都会修改入站消息的4个分段(1条入站消息对应4条出站消息,进行4次转换)。每条入站消息将进行4次数据转换,将4条消息发送到出站,并在数据库中创建5个HL7消息对象。 在配置生产系统时,计算净需求时应考虑到每日入站量、HL7消息的删除计划以及日志文件的保留策略。此外,应该在系统上配置适当的日志文件空间,以防止保存日志的磁盘卷被占满。出于性能和可靠性方面的考虑,日志文件和数据库文件应分别保存至两个物理磁盘。 结论 InterSystems IRIS医疗版HL7v2消息吞吐量测试结果表明,简单的2插槽商用服务器配置即具有巨大的吞吐量能力,可满足任何组织中的极限消息工作负载的需求。此外,InterSystems致力于通过不断的版本迭代和升级,利用最新的服务器特性或者云技术,达到更高的性能和扩展性。 下图概述并比较了Ensemble 2015.1和Ensemble 2017.1基于英特尔®E5-2600 v3(Haswell)处理器的基准测试,以及Ensemble 2017.1基于第一代Intel®可扩展白金系列(Skylake)处理器的基准测试,和IRIS医疗版2020.1版本基于第二代Intel®可扩展黄金系列(Cascade Lake)处理器的基准测试最新结果。 图1:单个服务器上每天10小时的消息吞吐量(百万) InterSystems IRIS 医疗版不断提高版本之间互操作性吞吐量的标准,并提供灵活的连接功能。如上图所示,IRIS 医疗版消息吞吐量已有显著增加,在T2工作负载情况下比2017版翻了一番,与2015版测试相比,在相同的10小时窗口内吞吐量增加了两倍多,24小时总消息速率保持在23亿以上。 证明IRIS 医疗版性能提升的另一个关键指标是更复杂的T2和T4工作负载(包含转换和路由规则,而不是T1工作负载的纯直通操作)中的吞吐量的提高。 InterSystems可随时与您探讨组织中遇到的与互操作性需求相关的解决方案。 注:本文为译文,欢迎点击查看原文,原文由Mark Bolinsky撰写 这篇能不能发个微信公众号?:) 欢迎查看:https://mp.weixin.qq.com/s?__biz=MzA4MTg3OTU4Mg==&mid=2656760711&idx=1&sn=b098179e1947105917517a7ceeede3f4&chksm=842064f6b357ede044475009db72bf3777a5e18427904f893390e466e16703c289830d0beda6&token=2031523301&lang=zh_CN#rd
文章
Claire Zheng · 一月 21, 2021

InterSystems IRIS History Monitor仪表盘界面展示

大家好! 我想跟大家分享一个个人项目,该项目始于工作中的一个简单需求:“能否知道我们使用了多少个Caché许可证?” 在阅读社区的其他文章时,我发现了一篇David Loveluck写的非常棒的文章:APM——使用Caché History Monitor。 我根据David的这篇文章,开始使用Caché History Monitor并显示所有这些信息。 在面临“选择哪种很酷的技术”这个问题时,我决定使用简单而强大的CSP,这样我的客户可以认识到Caché不仅仅是MUMPS/终端。 在创建了页面以显示许可、数据库增长和CSP会话的历史记录后,我决定为System Dashboard和进程页面创建一个新设计。 我的Caché实例运行得良好。 但是,如果使用IRIS呢?根据Evgeny Shvarov的文章:在InterSystems IRIS开发存储库中使用Docker,我实现了docker技术,并把代码放到了GitHub上,现在大家只需几个步骤就可以进行尝试。 如何运行? 如要使用这里的repo进行编码,请执行以下操作: 1. 通过Clone/git命令将repo 更新到任意本地目录中: $ git clone https://github.com/diashenrique/iris-history-monitor.git 2. 打开这个目录下的终端,并运行: $ docker-compose build 3. 在项目中运行IRIS容器: $ docker-compose up -d 如何测试 打开浏览器,并转到链接:http://localhost:52773/csp/irismonitor/dashboard.csp 使用用户名_SYSTEM可以运行仪表盘dashboard和其他功能。 系统仪表盘 系统仪表盘(System Dashboard)可展示: ·许可 ·系统时间 ·应用程序错误 ·缓存过程 ·CSP会话 ·Lock Table ·日志空间 ·日志状态 ·ECP AppServer ·ECP DataServer ·编写守护进程 ·缓存效率 ·严重警告 折线图小工具每5秒绘制一个点: 系统菜单 系统进程 进程过滤器 通过使用不同的过滤器可以实现你所需的结果。也可以使用“Multiple Sort(多重排序)”,按Shift +单击列标题,甚至可以将数据网格导出到Excel! History Monitor(历史记录监控器) CSP会话和许可的History Monitor可显示三个部分的信息: ·每5分钟 ·每天 ·每小时 “Database Growth”部分只显示当日信息。历史记录页面共享以下功能: Date Range Picker(日期选择插件) 默认值为“过去7天” Chart / Data Table(图表/ 数据表) 在每个部分的右上角有两个按钮(Chart / Data Table [图表/ 数据表]) Data Table(数据表)显示创建图表所用的信息,同样可以以Excel格式下载。 Excel中显示CSP中定义的相同格式、内容和组。 缩放 所有图表都有Zoom(缩放)选项,以可视化方式显示更多详细信息。 平均值和最大值 对于“每小时”和“每天”部分,图表显示的是平均值和最大值。 平均值 最大值 希望这篇文章对您有用! 注:本文为译文,点击此处阅读原文,原文由Henrique Gonçalves Dias撰写。
公告
Claire Zheng · 一月 26, 2021

投票时间!InterSystems多模型数据库竞赛

亲爱的社区开发者们! 本周进入 InterSystems多模型数据库竞赛的投票环节!是时候为你所认可的最佳方案投票了! 🔥 投票通道: 点击投票 🔥 如何投票? 使用我们全新的投票引擎和算法提名专家(Experts)和社区提名,您可以选择3个项目,分别投出心目中的第一、第二和第三位。 以下是社区排行榜说明: 社区排行榜: 名次 得分 1st 3 2nd 2 3rd 1 专家(Experts)排行榜会有更复杂的数学计算,不同级别的专家有更多的“点数”权力: 专家(Experts)排行榜: 级别 名次 1st 2nd 3rd VIP级:总经理,版主,产品经理 9 6 3 Global Masters中的专家(Expert)级 6 4 2 Global Masters中的专业(Specialist)级 3 2 1 专家投票也将为按“3-2-1”为社区排行榜贡献出分数。 投票说明 投票在 Open Exchange 竞赛页面 ,用户需要登录 Open Exchange 进行投票(使用开发者社区的账号即可登录)。 投票后您可以取消投票,将宝贵的票票投给其他更心仪的项目, 参赛者可以在投票周修复bug并进一步改进程序,欢迎订阅程序发布,不要错过 ! ➡️ 请查收最新的 InterSystems在线竞赛投票规则. 注:本文为译文,欢迎点击阅读原文,原文由Anastasia Dyubaylo撰写。
公告
Claire Zheng · 三月 17, 2021

InterSystems编程大赛: 开发者工具

亲爱的社区开发者们,大家好! 我们很高兴地宣布,新一轮InterSystems开发者竞赛开启了! 🏆 InterSystems 编程大赛:开发者工具 🏆 请提交具有如下特性的应用程序——能够加速开发、贡献更多高质量代码、帮助用户测试、部署、支持或监控基于InterSystems IRIS的解决方案。 时间: 2021年3月29日- 4月25日 Total prize: $8,500 奖项设置 1. 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出: 🥇 第一名 - $4,000 🥈 第二名 - $2,000 🥉 第三名 - $1,000 2. 社区提名奖(Community Nomination)- 获得总投票数最多的应用: 🥇 第一名 - $750 🥈 第二名 - $500 🥉 第三名 - $250 如果同时多位参赛者获得同样的票数,均被视为优胜者,将平分奖金 谁可以参加? 任何开发者社区的成员均可参加,InterSystems内部员工除外。还没有账号?现在来建一个! 👥 开发者可以组团 创建一个协作应用程序,组团限定人数为2-5人。 请注意,要在您的README文件中标注您的团队成员——社区用户profile. 参赛时间安排 🛠 3月29日 - 4月18日: 应用开发、提交阶段(在此期间,您可以持续编辑自己的项目) ✅ 4月19日 - 25日: 投票阶段 🎉 4月26日: 宣布优胜者! 主题 💡 InterSystems IRIS开发者工具 💡 此次竞赛中,我们希望您提交的应用程序能够改善IRIS开发者的使用体验,贡献更多qualitative code,并帮助用户测试、部署、支持或监控基于InterSystems IRIS的解决方案。 以下是参赛须知 有效应用程序:100%全新的Apps或已有的应用程序(但有显著提升)。所有参赛者/团队提交的应用程序只有经过我们团队的审核之后才会被批准参赛。 应用程序的类型应匹配: UI框架, IDE, 数据库管理, 监控, 部署工具等等 应用程序需要在 IRIS Community Edition 或 IRIS for Health Community Edition 或 IRIS Advanced Analytics Community Edition 上运行。 应用程序应该开源并在GitHub上发布。 应用程序的README文件需要包含安装步骤,并包含视频demo或/和应用程序如何运行的描述。 应用程序的源代码应该以UDL(而非XML)格式提交, 举例说明。 上述要求可能会按需修订。 资源助力 示例程序: iris-rad-studio - RAD for UI cmPurgeBackup - backup tool errors-global-analytics - errors visualization objectscript-openapi-definition - open API generator Test Coverage Tool - test coverage helper and many more. 我们建议您从以下模板开始: objectscript-docker模板 rest-api-contest模板 native-api-contest模板 iris-fhir模板 iris-fullstack模板 iris-interoperability模板 iris-analytics模板 如何将您的APP提交给大赛: 如何在InterSystems Open Exchange上发布应用程序 如何把参赛APP提交给大赛 参赛评比 我们已制定全新投票规则,欢迎关注! 期待您的精彩提交!加入我们的编程马拉松,赢取大奖! ❗️ 点击此处,查看 官方竞赛条款解读.❗️ 最新竞赛启动啦!欢迎大家积极参赛!✿✿ヽ(°▽°)ノ✿(*^▽^*) Pls invite your customers to join. Thx! @Li.Yan @Lu.Wang @Jun.Qian @Peng.Qiao @Louis.Lu @Hao.Ma @Lin.Zhu @Jieliang.Liu 今天就可以开始提交作品啦!
公告
Claire Zheng · 四月 7, 2021

InterSystems开发者社区新增“工作”版块

亲爱的开发者们! 现在你可以在InterSystems开发者社区找工作啦!在开发者社区发帖,你可以为自己找一份心仪的工作,也可以为你的公司寻找合适的人才! 那么,具体怎么操作呢? 在顶部菜单栏找到"职位" 版块: 在这里,你可以发现: 工作机会: 你可以找到需要InterSystems技术能力的工作机会; 求贤: 在这里,你可以发帖寻找具备InterSystems数据平台技术能力的优秀人选,在“所需技能”等相关描述中应包含对InterSystems技术的需求。 所以,如果你: 想为拥有InterSystems技术的人提供一个工作机会,或 拥有InterSystems技术能力,且正在寻找新的工作机会 就可以在社区发帖,当然,请在你发的帖子中加入相关tags: 工作机会 求职 以下是一份超简单的发帖攻略: 找到 职位 并点击 "新工作机会" 按钮,, 就可以创建相关帖子。 欢迎你尝试这个新功能,在这里找到合适的员工,在这里找到心仪的工作😉 如果有任何疑问,跟帖讨论与我们联系吧! Precautionary measures: InterSystems 不保证招聘信息及其他在本网站发布信息的准确性 InterSystems 对因本网站所公布的信息而造成的任何损失概不负责,请直接与招聘人员或申请人确认内容及条件 更多内容,请查看 InterSystems开发者社区行为准则.
公告
Claire Zheng · 四月 13, 2021

InterSystems IRIS平台入驻AWS Quick Start

Hi 社区开发者们,告诉大家一个好消息!InterSystems IRIS®数据平台已入驻AWS Quick Start,今后可在AWS上快速部署高可用的生产环境。 基于AWS和InterSystems在安全性和高可用性方面的最佳实践,InterSystems IRIS Quick Start模板能够提供可靠、可重复的自动化参考部署,简化IRIS关键任务环境的构建过程。 这些加速器将数百个手动步骤简化为几步,因此用户可以在几分钟内快速、经济有效地在自己的AWS账户中安装InterSystems IRIS,从而更快地获得洞察和价值。 InterSystems数据平台副总裁Scott Gnau表示:“InterSystems IRIS入驻AWS Quick Start后,可为用户提供优化的、预配置的数据平台,帮助其近乎实时地部署安全、高可用的生产环境。InterSystems IRIS和AWS Quick Start的强强联合可以加快实现价值的速度,用户可专注于利用其中的深刻洞见。在目前日益激烈的竞争环境中,这两点非常重要。” 作为这个最新产品的一部分,我们还将为通过Quick Start部署InterSystems IRIS平台的用户提供一份指南,以介绍架构并提供部署指导。 作为一个全面的、云优先的数据平台,InterSystems IRIS无需集成多种技术,因此可减少代码、系统资源和维护流程,并提高投资回报率。
文章
Michael Lei · 四月 14, 2021

通过 InterSystems IRIS 实现分布式人工智能

**什么是分布式人工智能 (DAI)?** 试图找到一个“无懈可击”的定义是徒劳的:这个术语似乎有些“超前”。 但是,我们仍然可以从语义上分析该术语本身,推导出分布式人工智能也是人工智能(请参见我们为提出一个“实用”定义所做的[努力](https://www.linkedin.com/pulse/ai-robotization-intersystems-iris-data-platform-sergey-lukyanchikov/)),只是它分布在多台没有聚合在一起(既不在数据方面,也不通过应用程序聚合,原则上不提供对特定计算机的访问)的计算机上。 即,在理想情况下,分布式人工智能的安排方式是:参与该“分布”的任何计算机都不能直接访问其他计算机的数据和应用程序,唯一的替代方案是通过“透明的”消息传递来传输数据样本和可执行脚本。 与该理想情况的任何偏差都会导致出现“部分分布式人工智能”- 一个示例是通过中央应用程序服务器分发数据, 或者其反向操作。 不管怎样,我们都会得到一组“联合”模型(即,在各自数据源上训练的模型,或者按自己的算法训练的模型,或者同时以这两种方式训练的模型)。 **“面向大众”的分布式人工智能方案** 我们不会讨论边缘计算、机密数据操作员、分散的移动搜索,或者类似的引人入胜但又不是最有意识和最广泛应用(目前不是)的方案。 我们将更“贴近于生活”,例如,如果考虑以下方案(其详细演示应该可以在此处观看):一家公司运行一个生产级 AI/ML 解决方案,其运行质量正在由一名外部数据科学家(即,不是该公司员工的专家)系统地进行检查。 由于种种原因,该公司无法授予数据科学家访问该解决方案的权限,但可以按照时间表或在特定事件(例如,解决方案终止一个或多个模型的训练会话)后向其发送所需表中的记录样本。 我们据此假定,该数据科学家拥有某个版本的 AI/ML 机制,且这些机制已经集成在公司正在运行的生产级解决方案中,而且数据科学家本人很可能正在开发、改进和调整这些机制,以适应该具体公司的具体用例。 将这些机制部署到正在运行的解决方案中、监控机制的运行以及其他生命周期方面的工作由一名数据工程师(公司员工)负责。 我们在[这篇文章](https://www.linkedin.com/pulse/intersystems-iris-all-purpose-universal-platform-aiml-lukyanchikov/)中提供了一个在 InterSystems IRIS 平台上部署生产级 AI/ML 解决方案的示例,该解决方案可自主处理来自设备的数据流。 上一段提供的链接下的演示中也运行了相同的解决方案。 您可以使用我们的仓库 Convergent Analytics 中的内容(免费且无时间限制,请访问 Links to Required Downloads 和 Root Resources 部分)在 InterSystems IRIS 上构建您自己的解决方案原型。 通过这样的方案,我们可获得“分布程度”如何的人工智能? 在我们看来,此方案相当接近理想情况,因为数据科学家与公司的数据和算法均保持“切割”(只是传输了有限的样本,但在某个时间点前很重要;而且数据科学家自己的“样本”永远不会与作为实时生产级解决方案的一部分部署和运行的“活跃”机制 100% 同步),他完全不能访问公司的 IT 基础架构。 因此,数据科学家的作用变为在他的本地计算资源上部分重放该公司生产级 AI/ML 解决方案的运行片段,获得可接受置信级别的运行质量评估,并向公司返回反馈(在我们的具体方案中,以“审核”结果表示,可能还加上该公司解决方案涉及的 AI/ML 机制的改进版本)。 _图 1 分布式人工智能方案表示_ 我们知道,在人类执行人工智能项目交换的过程中,不一定需要表示和传输反馈,这源于有关现代方法的出版物以及已有的分布式人工智能实现经验。 但是,InterSystems IRIS 平台的优势在于,它允许同样高效地开发和启动“混合”(人类和机器串联)且完全自动化的人工智能用例,因此,我们将继续根据上述“混合”示例进行分析,同时为读者留下自行阐述其完全自动化的可能性。 **如何在 InterSystems IRIS 平台上运行具体的分布式人工智能方案** 本文上一节提到的带有方案演示的视频介绍对作为实时 AI/ML 平台的 InterSystems IRIS 进行了总体概述,并解释了其对 DevOps 宏机制的支持。 在演示中,没有明确覆盖负责定期将训练数据集传输给外部数据科学家的“公司侧”业务流程,因此,我们将从该业务流程及其步骤的简介开始。 发送方业务流程的一个主要“引擎”是 while 循环(使用 InterSystems IRIS 可视业务流程编辑器实现,该编辑器基于平台解释的 BPL 表示法),负责将训练数据集系统地发送给外部数据科学家。 该“引擎”内部执行以下操作(参见下图,跳过数据一致性操作): _图 2“发送方”业务流程的主要部分_ (a) 负载分析器 – 将训练数据集表中的当前记录集加载到业务流程中,并基于它在 Python 会话中形成一个数据框架。 调用操作会触发对 InterSystems IRIS DBMS 的 SQL 查询,并触发对 Python 接口的调用以将 SQL 结果传输给它,以便形成数据框架; (b) Azure 分析器 – 另一个调用操作,触发对 Python 接口的调用,以向其传输一组 Azure ML SDK for Python 指令,从而在 Azure 中构建所需的基础架构,并在该基础架构上部署前一个操作中形成的数据框架数据; 作为执行上述业务流程操作的结果,我们在 Azure 中获得一个存储对象(一个 .csv 文件),其中包含公司的生产级解决方案用于模型训练的最近数据集的导出: _图 3 训练数据集“到达”Azure ML_ 这样,发送方业务流程的主要部分已经结束,但是我们还需要再执行一个操作,同时请记住,我们在 Azure ML 中创建的任何计算资源都是可计费的(参见下图,跳过数据一致性操作): _图 4“发送方”业务流程的最后部分_ (c) 资源清理 – 触发对 Python 接口的调用,以向其传输一组 Azure ML SDK for Python 指令,从 Azure 中删除上一个操作中构建的计算基础架构。 数据科学家所需的数据已经传输完毕(数据集现在在 Azure 中),因此我们可以继续启动将访问数据集的“外部”业务流程,运行至少一次替代模型训练(从算法上讲,替代模型不同于作为生产级解决方案一部分运行的模型),并向数据科学家返回得到的模型质量指标及可视化,从而表示有关公司生产级解决方案运行效率的“审核结果”。 我们现在看一下接收方业务流程:与发送方业务流程(在包含公司自主 AI/ML 解决方案的其他业务流程中运行)不同,它不需要 while 循环,而是包含与在 Azure ML 和 IntegratedML(InterSystems IRIS 中用于自动 ML 框架的加速器)中训练替代模型有关的一系列操作,并将训练结果提取到 InterSystems IRIS 中(该平台也被认为在数据科学家处本地安装): _图 5“接收方”业务流程_ (a) 导入 Python 模块 – 触发对 Python 接口的调用,以向其传输一组指令,导入进一步操作所需的 Python 模块; (b) 设置 AUDITOR 参数 – 触发对 Python 接口的调用,以向其传输一组指令,为进一步操作所需的变量指定默认值; (c) Azure ML 审核 –(我们将跳过任何对 Python 接口触发的进一步引用)将“审核任务”提交到 Azure ML; (d) 解释 Azure ML – 将发送方业务流程传输到 Azure ML 的数据与 Azure ML 的“审核”结果一起获取到本地 Python 会话中(此外,在 Python 会话中创建“审核”结果的可视化); (e) 流式传输到 IRIS – 将发送方业务流程传输到 Azure ML 的数据与 Azure ML 的“审核”结果一起从本地 Python 会话中提取到 IRIS 中的业务流程变量; (f) 填充 IRIS – 将发送方业务流程传输到 Azure ML 的数据与 Azure ML 的“审核”结果一起从 IRIS 中的业务流程变量写入 IRIS 中的表; (g) IntegratedML 审核 – 使用 IntegratedML 加速器“审核”从 Azure ML 接收的数据以及上一个操作中写入 IRIS 的 Azure ML“审核”结果(在此特定情况下,该加速器处理 H2O auto-ML 框架); (h) 对 Python 进行查询 – 将数据和 IntegratedML“审核”结果传输到 Python 会话中; (i) 解释 IntegratedML – 在 Python 会话中,创建 IntegratedML“审核”结果的可视化; (j) 资源清理 – 从 Azure 中删除先前的操作中创建的计算基础架构。 _图 6 Azure ML“审核”结果的可视化_ _图 7 IntegratedML“审核”结果的可视化_ **分布式人工智能一般如何在 InterSystems IRIS 平台上实现** InterSystems IRIS 平台实现分布式人工智能有三种基本方法: ·       根据用户定义的规则和算法,直接交换人工智能项目,并对其进行本地和中央处理 ·       人工智能项目处理委托给专门的框架(例如:TensorFlow、PyTorch),交换的编排和各个准备步骤由用户在 InterSystems IRIS 的本地和中央实例上配置 ·       人工智能项目的交换和处理都通过云提供商(Azure、AWS、GCP)来完成,本地和中央实例只向云提供商发送输入数据并接收最终结果 _图 8 在 InterSystems IRIS 平台上实现分布式人工智能的基本方法_ 这些基本方法可以修改/组合使用:尤其是,在本文的上一节(“审核”)所描述的具体方案中,使用了第三种方法“以云为中心”,将“审核员”部分划分到云端,而在数据科学家一侧执行本地部分(作为“中央实例”)。 目前,在我们生活的现实中,“分布式人工智能”学科的理论和应用要素正在不断积累,但还没有形成“规范形式”,这使得创新实现具有巨大潜力。 我们的专家团队密切关注分布式人工智能作为一门学科的发展,并为其在 InterSystems IRIS 平台上的实现设计加速器。 我们乐于分享我们的内容,并帮助每一个认为这里讨论的领域有用的人开始分布式人工智能机制的原型设计。 您可以使用以下电子邮件地址联系我们的 AI/ML 专家团队 – MLToolkit@intersystems.com。
文章
Louis Lu · 四月 15, 2021

基于InterSystems IRIS 的数据运维DataOps

InterSystems IRIS 下使用 DataOps ![](/sites/default/files/inline/images/images/image(1392).png) Gartner 对 DataOps 的定义是:“DataOps 是一种协作式的数据管理方法,侧重于改善整个组织中数据管理者和数据消费者之间数据流的沟通、整合与自动化。 DataOps 的目标是创建可预测的数据、数据模型和相关项目的交付和变更管理,从而更快地交付价值。 DataOps 采取特殊技术手段和相应治理水平自动化数据交付的设计、部署和管理,以元数据提高动态环境中数据的易用性和价值。” 2014 年 6 月 19 日,InformationWeek 特约编辑 Lenny Liebmann 发表于 IBM Big Data & Analytics Hub 的题为“3 reasons why DataOps is essential for big data success”的文章中首次提出 DataOps 这一概念。 DataOps 一词后被 Andy Palmer 推广到 Tamr。 DataOps 是“数据运营”的专属名称。 2017 年对 DataOps 来说是意义重大的一年,生态系统取得巨大发展,分析师覆盖范围进一步扩张,关键字搜索量以及调查、出版物和开源项目数均有所提升。 Gartner 在 2018 年的 Hype Cycle for Data Management 中添加了 DataOps 。 (资料来源:) DataOps 宣言确立了以下 DataOps 原则:()   1. **持续满足客户需求**:我们的首要任务是在几分钟到几周内及尽早并持续交付有价值的内容给客户,并以此满足客户的需求。 2. **有价值工作的分析**:我们认为评价工作效率的主要度量指标是,提交了多少深度分析的内容、产出多少高准确度的数据以及在顶层框架和系统中贡献了多少。 3. **拥抱变化**:我们并不抗拒客户需求的变化,事实上,我们欣然接受这些变化,并以此产生竞争优势。 我们相信,与客户直接交谈是最高效、最实用、最敏捷的沟通方式。 4. 这是一项团队运动:分析团队将始终具有各种角色、技能、偏好工具和头衔。 多元化的背景和意见可以提高创新力和生产力。 5. **日常互动**:客户、分析团队和运营必须每天都在整个项目中协同工作。 6. **自发组织**:我们相信,最好的分析见解、算法、架构、需求和设计都来自于自发组织的团队。 7. **减少英雄主义**:对于分析的深度和广度,需求正在加速扩大,我们认为分析团队应尽力减少英雄主义,创建可持续且可扩展的数据分析团队和流程。 8. **反思**:分析团队应定期根据客户、自身和运营统计提供的反馈意见开展自我反思,优化运营绩效。 9. **分析即代码**:分析团队使用各种工具对数据进行访问、集成、建模和可视化。 从根本上讲,每种工具都会生成代码和配置,这些都会对数据进行操作,从而为进一步理解数据提供帮助。 10. **编排**:从头到尾编排数据、工具、代码、环境以配合分析团队的工作,这是分析成功的关键因素。 11. 使其可复现:结果需要可复现,我们对所有内容进行版本控制:包括数据、底层硬件、软件配置以及特定于工具链中各工具的代码和配置。 12. **一次性的工作环境**:我们认为,必须为分析团队成员提供易于创建、隔离、安全并能反映其生产环境的一次性工作环境,从而最大程度地降低分析团队的实验成本。 13. **简洁性**:我们认为,持续关注卓越的技术和良好的设计不仅可以提高敏捷性,也可以提高简洁性,特别是突出显示未完成的工作量。 14. **分析即生产**:分析管道类似于精益生产线。 我们认为,DataOps 的一个基本概念是注重过程思维,提升分析及生产的效率。 15. **质量至上**:分析管道在基础上应该有能力自动检测代码、配置和数据中的异常 (jidoka) 与安全问题,并应向操作员提供持续反馈以避免错误 (poka yoke)。 16. **监视质量和性能**:我们的目标是对性能、安全和质量措施进行持续监视,及时发现意外变化并生成运营统计信息。 17. **重用**:我们认为,提升分析及生产效率的一个基本方面是避免个人或团队重复以前的工作。 18. **缩短周期时间**:从将客户需求转化为分析思路,到在开发中创建、并作为可重复生产的流程发布,再到最后的重构和重用产品,我们应尽全力将这一周期耗费的时间和精力降到最低。 当您分析这些原则时,也许会发现 InterSystems IRIS 能够在某些方面起到作用: * 持续满足客户需求:您可以通过冲刺或迭代创建新的短集成产品、编排、IRIS 多维数据集、报告、BI 可视化和 ML 模型。 * 有价值工作的分析:IRIS 帮助您提供高质量的数据(在持久化类中使用production、适配器和类方法),并使您能够在 IRIS BI 数据透视表(分析设计器)和 IRIS NLP(文本分析)中进行数据探索。 * 自组织:IRIS 简化了自组织,借助统一的数据平台,您只需一个工具即可收集、处理、分析和发布见解。 * 反思:您可以通过此用户门户与用户互动并收集反馈,以改进交付的产品。 * 分析即代码:在 IRIS 数据模型中,多维数据集、仪表板都是代码,具有版本控制和治理功能。 * 编排:IRIS 数据平台可在单个工具中编排数据的引入、扩充、分析工作、数据可视化和 ML。 * 使其可复现:IRIS 支持使用 Docker、Kubernetes (IKO) 和 DevOps 复现结果。 * 一次性环境:IRIS 支持为集成、数据模型、BI 多维数据集和可视化创建 Docker 一次性环境。 * 简洁性:IRIS 数据多维数据集的创建非常简单,无需创建 ETL 脚本,分析器、多维数据集、仪表板的创建均实现可视化和网络化,并且可由用户而不仅是开发者团队完成。 同时,IntegratedML 允许在没有源代码开发的情况下针对常见场景创建 ML。 * 监视质量和性能:IRIS 使用 SAM 监视性能并具有 Web 管理门户。 * 重用:在 IRIS 中,DataOps 项目是类,这些类默认可扩展、可重用。 * 缩短周期时间:用户可以通过自助服务创建仪表板、分析、报告,以及发布和共享工作。 ODSC () 指出以下 DataOps 策略: InterSystems IRIS 对以上几点均有所帮助: * 自助服务配置:用户可以创建和发布多维数据集与仪表板。 * 共享、标记、注解:用户门户可用于共享仪表板,IRIS Analytical Web Portal 允许用户创建、记录、整理到文件夹并标记您的工作。 * 扩充:BPL 可用于扩充数据。 * 准备:BPL、DTL、适配器和 ObjectScript 逻辑可以帮助准备数据。 * 数据市场:数据资产可以发布到 REST API 并通过 IRIS API Manager 获利。 * 数据目录:IRIS 中的数据被组织成类,这些类被存储在类目录系统 (%Dictonary) 中 * 配置文件与分类:可在用户门户和管理门户中为分析项目创建组、文件夹。 * 质量:IRIS 具有实用工具类,可生成示例数据和进行单元测试。 * 沿袭:在 IRIS 中,所有数据资产都相互连接,您可以从数据模型构建多维数据集,再从多维数据集构建仪表板,所有数据资产均可由数据管理者(IRIS 权限系统)控制。 * 掌控:通过管理门户,您可以掌控分析项目的各个方面。 * 数据库数据、文件数据、SaaS API、流:IRIS 为多模型,支持持久性以及数据和文本分析 (NLP)。 以 IRIS API Manager 支持 SaaS API,以 Integration Adapters 和 PEX(带有 Kafka)与 Streams 结合使用。 * 应用程序、BI 工具、分析沙盒:通过 IRIS,您可以使用您喜欢的语言(Java、Python、.NET、Node.js、ObjectScript)创建 DataOps 应用。 虽然 IRIS 是 BI 工具,但是在这个工具中,您可以将连接器与 Power BI 或 MDX 桥结合使用,将 IRIS 作为分析沙盒。 参见我反映 IRIS 和 DataOps 的汇总: ![](/sites/default/files/inline/images/images/image(1392).png)  
文章
Qiao Peng · 二月 22, 2023

InterSystems IRIS的面向对象数据库特性

面向对象编程的优势 在应用程序开发时,我们使用的大多数开发语言都是面向对象编程 object-oriented programming (OOP)语言,例如大家熟悉的Java、.NET。而TIOBE的2023年2月的最新开发语言流行排行榜上,前5大语言都是面向对象编程语言,连排名第六的Visual Basic都有了越来越多的OO特性: 为什么使用面向对象编程这么流行?因为它有诸多优势: 封装:将数据和操作数据的代码封装在一个单元中,在确定范围的数据上进行编程。方便代码的开发、管理与分享。 抽象:将业务数据概括为不同的对象类型,从而进行业务分组开发、简化程序。 继承:一个类可以从另一个类继承它属性和行为,从而实现更大范围的代码复用。 多态:多个对象可以创建自一个类,且可以有不同的行为。一段灵活的代码能实现多种形态的业务,它进一步降低了代码开发量和调用难度。 而这4个优势正是面向对象编程的核心特征。 关系型数据库的对象/关系错配 虽然面向对象编程是绝对的主流,但数据通常被保存到关系型数据库中。关系型数据库的行和列二维关系与复杂的对象并不匹配: 面向对象的核心特性:封装、抽象、继承、多态,关系数据库都无法直接支持。 对象可以表达复杂的多维度、多类型的数据集,关系性数据库只能表达二维(行和列)、简单类型的数据集。例如对于集合类型-列表或数组,面向对象可以直接将其作为对象的属性,而关系型数据库只能用额外的关联子表或序列化为字符串/字符流等进行表达。 面向对象间通过继承、引用等方式建立对象间关系,关系性数据库通过外键建立表之间的关系。例如人和患者这两个业务概念,在面向对象编程中可以是两个有继承关系的对象类 – 子类患者的属性和方法多数是由人继承来的;而在关系数据库中,只能表达为没有关系的两张表,无法体现这种关系。 在表达和操作数据的方式上, 面向对象基于封装原则,其中数据和操作该数据的代码被组合到一个单元中。而关系数据库基于规范化原则,其中数据被分成单独的表以最小化数据冗余并提高查询性能。例如患者和其病历这两个业务概念,在面向对象编程中病历是患者对象类中的一个集合属性,通过患者可以直接操作病历集和每一份病历;而在关系数据库中,只能表达为通过外键关联的两张表:患者表和病历表。还要保证一个业务对象操作时对应多张表的事务一致性问题。 简单比喻一下这种错配,这就像一辆车,我们使用面向对象方式操作时,是以整车的形式操纵它;但存这辆车时,我们要把它先拆成零件 – 发动机、轮胎、车架… - 分类保存,取车时,再把零件组装起来才能上路。 为了应对这种对象关系错配,通常有三种方法: 自己开发数据映射逻辑,将一个对象拆成对应的多张表,自己维护保存对象数据时的SQL(可能是复杂的存储过程)和从SQL获取数据后组合为对象的代码。 使用对象关系映射 (ORM)框架,例如Hibernate,来自动实现对象模型和关系模型间的映射。它增加了系统的复杂度、降低了性能和可靠性。 直接使用面向对象数据库管理系统。 InterSystems IRIS的面向对象特性 InterSystems Caché和InterSystems IRIS作为多模型数据库管理系统,其面向对象数据库特性在全球面向对象数据库排名中分列第1、第2位。它提供了丰富的面向对象特性和对包括SQL的支持。 完整的OO特性 InterSystems IRIS提供了完整的面向对象特性:封装、多重继承、多态。 封装 InterSystems IRIS可以将数据、逻辑和复杂的模型关系封装在类中。在类中,可以定义: 属性: 支持任意复杂的属性类型,包括简单数据类型、对象型类型、关系型类型、集合类型、透明类型、计算类型等。并支持对属性的复杂约束,例如取值范围约束、模式约束、唯一性约束等 参数:静态属性 方法:操作对象的方法,可以是静态方法或实例方法。方法可以是私有方法,从而不会被继承。InterSystems IRIS提供方法生成器的概念:方法是创建方法实现的程序。使用方法生成器,可以创建类、为不同的情况自动生成特定的应用代码。 索引:用于加速数据检索等索引,支持多种索引类型,包括普通索引、位图索引、位片索引;支持复合索引 查询:封装好的对数据的查询方法,可以基于对象或SQL构建对数据的查询,并可封装为SQL视图或SQL存储过程 持久化方案:可以动态调整的底层多维存储方案。调整持久化方案,不影响以对象和SQL方式对数据的操作与查询代码 /// 人 Class User.Person Extends (%Persistent, %XML.Adaptor, %Populate) { /// 属性: 姓名 /// 类型: 字符串 Property Name As %String; /// 属性: 性别 /// 类型: 字符串 /// 约束取值范围为男和女 Property Gender As %String(VALUELIST = ",男,女"); /// 属性: 家庭住址 /// 类型: User.Address Property HomeAddress As User.Address; /// 索引: 基于Gender的位图索引 Index bmIndGender On Gender [ Type = bitmap ]; } 支持纯虚类开发,同时InterSystems IRIS提供庞大的、功能完善的类库,方便用户直接使用或继承。 多重继承 多重继承让一个子类可以同时从多个的父类那里继承属性和行为(方法)。InterSystems IRIS通过多重继承能力,可以快速构建代码。子类可以覆盖父类的属性和方法。 /// 患者,继承与人 Class User.Patient Extends User.Person { /// 患者病案号 Property MRN As %String; } 多态 InterSystems IRIS多态特性让程序可以用父类打开子类的实例,运行这个实例上的方法时,执行的是子类覆盖过的方法。通过多态特性,避免父类的代码臃肿、降低维护难度。 例如1号实例是人,6号实例是患者。都用类User.Person打开对应对象,并用XMLExport输出对象的XML序列化结果,可以看到6号患者的记录输出了它独有的病案号信息: USER>do ##class(User.Person).%OpenId(1).XMLExport() <Person><Name>Ximines,Joe U.</Name><Gender>男</Gender><HomeAddress><City>Washington</City><Street>3006 Washington Blvd</Street></HomeAddress></Person> USER>do ##class(User.Person).%OpenId(6).XMLExport() <Patient><Name>Geoffrion,Clint R.</Name><Gender>女</Gender><HomeAddress><City>Fargo</City><Street>908 Franklin Place</Street></HomeAddress><MRN>H7768</MRN></Patient> 透明的持久化 通过继承父类%Persistent,任何的类都可以自动获得透明的持久化 (存取到数据库) 的能力: 能够使用方法来新建、打开、修改、保存和删除对象。 当打开一个对象实例并引用对象类型的属性时,系统也会自动打开该对象。这个过程被称为swizzling(也被称为懒惰加载)。然后就可以对该对象进行操作。在下面的例子中,当User.Person对象被打开时,相应的User.Address对象被刷新了。 Set person=##class(User.Person).%OpenId(3) Set person.Name="张小明" Set person.HomeAddress.City="北京" Do person.%Save() 同样,当保存一个对象时,系统也会自动保存其所有的对象类型属性 - 这被称为深度保存。InterSystems IRIS可以通过选项设置执行浅保存。 ACID InterSystems IRIS的面向对象编程提供事务管理和锁机制,完全支持ACID事务。 在打开一个持久化对象时,可以指定并发锁定的程度,因为持久化对象有可能被多个用户或多个进程使用。锁定程度选项包括:无锁、原子读、共享锁、共享/保留锁、排他/保留锁。 在操作多个持久化对象时,可以将这些操作纳入一个事务进行管理,从而确保事务完整提交或全部回滚。 SQL访问 对于事务性操作来说,面向对象开发非常合适;但对于批量数据操作和数据的查询检索来说,SQL是目前大家最熟悉和便捷的操作语言。多数面向对象数据库使用专用的API来操作数据,而不支持SQL,这影响了开发的便捷性、提高了开发门槛。 InterSystems IRIS在支持面向对象建模和开发的同时,也支持关系型的数据操作,这是它多模型特性的一部分。 父类%Persistent提供了InterSystems IRIS中对象 - SQL投射关系的框架。它提供如下核心能力: 自动建立并维护对象-SQL的投射关系。这种投射是双向的:使用对象建模,会自动投射出SQL表模型;如果使用SQL DDL建模,同样会生成对应的对象模型。这种投射会选择合适的投射逻辑,例如将对象型属性投射为SQL子表、将关系型属性投射为SQL外键。 开发者可以干预对象-SQL的投射关系,从而得到更适合自己的模型。例如对于对象模型中的列表集合类型,默认会投射为表的一个字段,而开发者可以通过设置将它投射为一张子表。 对象-SQL投射并不会拷贝一份不同模型的数据,而是通过投射,将一份数据投射为不同的模型,供开发者在最适合的场景下使用最高效的模型。 投射出的SQL和对象模型同时支持ACID的读写操作。也就是说使用对象方式建模,依然可以使用SQL插入、更新、删除数据。 在类方法中,可以直接使用SQL;同样可以直接将类的Query发布为SQL视图、将类的方法发布为SQL存储过程。在持久化类中,可以定义SQL触发器。 对SQL的对象模式扩展:为了在面向对象应用程序中更容易地使用SQL,InterSystems IRIS提供SQL的一系列对象扩展。其中最有趣的是使用隐式连接运算符("->")提供对象引用的能力,通常被称为 "箭头语法",它可以很大程度上简化SQL的编写。例如,假设你有一个Vendor类,它引用了另外两个类Contact和Region作为属性。在SQL投射上,会看到3张表:Vendor表、Contact表和Region表。要获得Vendor的完整信息,标准SQL需要类似于这样的实现: SELECT Vendor.ID,Vendor.Name,Contact.Name FROM Vendor LEFT OUTER JOIN Contact ON Contact.ID = Vendor.ContactInfo LEFT OUTER JOIN Region ON Region.ID = Vendor.Region AND Region.Name = '南极洲' 而使用隐式连接运算符,可以在SQL中把引用类型的字段当作对象,使用相关类的属性: SELECT ID,Name,ContactInfo->Name FROM Vendor WHERE Vendor->Region->Name = '南极洲' 另外,InterSystems SQL层面也能体现出很多面向对象的特性。例如,上面的User.Person和User.Patient这两个类投射出Person表和Patient表,如果创建了5条Person的记录,又创建了5条Patient记录,在Patient表中将看到5条记录,而在Person表中将看到10条记录,因为这5个Patient也是Person。这种实现极大方便数据的查询和利用,而关系型数据库很难实现。 从Patient表中获取到5条Patient记录: 从Person表中,获取到10条记录,包括ID为6-10的Patient记录,因为它们也是Person记录: 数据分片 InterSystems IRIS提供数据分片技术(Sharding),将超大数据集分片到不同实例上,形成可弹性横向扩展的集群。 可以在类定义中将持久化类声明为需要数据分片保存的类。同时,可以在数据分片集群上的任何节点上执行对象方法,获得全数据分片集群上其它节点保存的对象数据,并更改它们。 列存储 InterSystems IRIS同时支持基于行存储和列存储的储存模型。列存储对于超大数据上的分析类查询能显著降低I/O、利用现代CPU/GPU的SIMD(Single Instruction Multiple Data)芯片级优化极大提升性能。 对象模型可以直接声明成列存储模型: Class Sample.TransactionHistory Extends %Persistent [ DdlAllowed, Final ] { Parameter STORAGEDEFAULT = "columnar"; Parameter USEEXTENTSET = 1; Property AccountNumber As %Integer; Property TransactionDate As %Date; Property Description As %String(MAXLEN = 10); Property Amount As %Numeric(SCALE = 2); Property Type As %String(VALUELIST = "-Deposit-Withdrawal-Transfer"); Index BitmapExtent [ Extent, Type = bitmap ]; } 或仅对对象模型中的特定字段使用列存储的混合模型: Class Sample.BankTransaction Extends %Persistent [ DdlAllowed ] { Parameter STORAGEDEFAULT = "row"; Parameter USEEXTENTSET = 1; Property AccountNumber As %Integer; Property TransactionDate As %Date; Property Description As %String(MAXLEN = 100); Property Amount As %Numeric(SCALE = 2, STORAGEDEFAULT = "columnar"); Property Type As %String(VALUELIST = "-Deposit-Withdrawal-Transfer"); Index BitmapExtent [ Extent, Type = bitmap ]; } 无论使用行存储、列存储、混合存储, OOP代码和SQL代码都无需任何修改。 多开发语言支持 InterSystems IRIS作为一个多模型数据库,可以向外提供关系型的访问方式;外部开发语言像连接关系型数据库一样,使用XDBC、ADO.NET连接InterSystems IRIS,并使用SQL操作数据。或者使用Entity Framework将.NET对象映射到IRIS的SQL表。 对于面向对象开发而言,InterSystems提供更多的开发语言选择。 内部语言 在使用OOP开发InterSystems IRIS上的类时,使用ObjectScript建立对象模型和方法,也可以使用嵌入式Python开发类方法、或调用外部的Python库。 例如,我们可以直接用嵌入式Python,编写python方法,调用外部的Python库: /// 使用Python的xmltodict库,将XML转换为JSON ClassMethod XML2JSON(pXML As %String) [ Language = python ] { import xmltodict, json obj = xmltodict.parse(pXML) return(json.dumps(obj,ensure_ascii=False)) } 外部语言 Java、.NET和 Python都是流行的OOP语言。InterSystems IRIS可以直接将Java和.NET对象保存到数据库而无需做对象/关系映射,同时InterSystems IRIS的外部服务器(InterSystems External Servers)特性使InterSystems IRIS和这些OOP语言可以双向使用对方定义的对象。它包括以下特性: 即时访问 该特性使Java、.NET 和 Python 对象成为 InterSystems IRIS可以直接操作的对象。当你发出命令时,外部服务器会自动启动,提供对外部语言平台的即时访问,而不需要任何预先设置。 共享的会话 共享会话让 ObjectScript 和外部应用程序在相同的环境和事务中工作,共享相同的双向连接。 远程对象控制 通过代理对象,允许共享会话的任何一方实时控制另一方的目标对象。InterSystems IRIS可以创建和控制 Java、.NET 和 Python 对象,这些语言也可以创建和控制 InterSystems IRIS的对象。 完全可重入的双向连接 传统的单向客户端/服务器关系不再是一个障碍。通过双向重入,任何一方的新对象或方法调用都可以随时进入现有的共享会话。这使得共享会话中任何一方的应用程序都可以同时充当服务器和客户端,发起客户端的查询并为另一方的请求提供服务。 可重入的Native SDK方法 Native SDK方法也是完全可重入的,可以包含在共享会话中,使外部应用程序可以直接访问大量的InterSystems IRIS资源。 例如,在InterSystems IRIS中创建Java类的 java.util.Date的代理类实例,并执行其方法显示当前日期: write $system.external.getJavaGateway().new("java.util.Date").toString() 除了对象型、关系型,InterSystems IRIS还支持多维(或键值对)和文档建模和数据操作方式。它的多模型特性可以帮助开发者用最合适的模型处理数据、获得最佳的开发效率和运行效率。
文章
Michael Lei · 十一月 2, 2022

InterSystems IRIS医疗版的“专精特新”

门为医疗行业打造,深度整合国内外医疗行业标准,专有技术服务医疗行业44年,可能是全球最早从事医疗信息化的公司; 耕细做打磨数十年的稳定、可靠、易用、可扩展的数据平台; 色鲜明,不唯技术、终生负责、以解决客户问题为核心的特色企业文化; 一代混合一体化架构,一个平台同时支持混合事务处理、传统架构、容器化、云原生等多种应用场景;
文章
Louis Lu · 一月 19, 2023

InterSystems IRIS 2022.3 版本下的列存储

您可能还记得在 InterSystems 2022年全球峰会以及 2022.2 版本发布的网络研讨会上,我们发布了一项令人兴奋的新功能——列存储,它可以纳入您 InterSystems IRIS 的解决方案中。 列存储引入了一种存储SQL表数据的替代方法,它为分析查询提供了数量级的加速。 最新的2022.3开发预览版在原有的基础上包括一系列我们认为值得在这里宣布的更新。 快速回顾 如果您不熟悉InterSystems IRIS 的列存储,请观看这段简短的介绍视频以及相关该主题的2022全球峰会内容。 简而言之,我们使用新的$vector数据类型将表数据编码为每列 64k 个值的块。 $vector是一种仅限内部使用的数据类型(目前),它利用自适应编码方案来实现稀疏和密集数据的高效存储。 编码还针对一系列专用$vector操作进行了优化,例如一次计算64k 值的整个块的聚合、分组和过滤,并在可能的情况下利用芯片的SIMD指令。 在SQL查询时,我们构建对这些块直接进行操作的查询计划,正如您所想象的,与传统的逐行处理相比,这大大减少了执行查询所需的IO量和ObjectScript指令数。 当然,与面向行且对于单值的操作相比,这个的IO消耗更大,$vector的操作也更重一些,但收益是巨大的。 我们使用一个专业术语矢量化查询计划来表示处理$vector数据的执行策略,通过一系列快速的对于整个块的操作来提高整体的效率。 就一个字“快” 最重要的是,事情变得更快了。 我们扩展了优化器对列索引的理解,现在您将看到更多的查询使用列索引,即使某些请求的字段没有存储在列索引或数据映射中。 此外,您将看到它在许多情况下联合收割机了列索引和位图索引,如果您是从向现有模式添加列索引开始的,那么这将非常有用。 新工具包还包括一系列跨堆栈的更改,以提高性能,从优化到一些查询处理增强功能上的低级$vector操作,以及一组更广泛的可并行化的矢量化查询计划。 加载数据的某些方法,如通过INSERT.. SELECT语句,现在还将使用我们已经用于构建索引的缓冲模型,并且现在能够以真正高的性能构建整个表。 向量化的 JOIN 操作 我们在此版本中添加的最令人兴奋的功能是支持以矢量化方式连接列数据。 在Python 2022.2中,当您希望在一个查询中联合收割机两个表中的数据时,我们仍然会求助于健壮的逐行JOIN策略,该策略同样适用于按列和按行组织的数据。 现在,当JOIN的两端都以列格式存储时,我们使用一个新的内核API在内存中对它们进行JOIN,同时保留它们的$vector格式。 这是实现完全矢量化查询计划的又一重要步骤,即使对于最复杂的查询也是如此。 下面是一个利用新函数的查询示例,该查询对纽约Taxi数据集执行 SELECT COUNT(*), MAX(r1.total_amount - r2.total_amount) FROM NYTaxi.Rides r1, NYTaxi.Rides r2 WHERE r1.DOLocationID = r2.PULocationID AND r1.tpep_dropoff_datetime = r2.tpep_pickup_datetime AND r2.DOLocationID = r1.PULocationID AND r1.passenger_count > 2 AND r2.passenger_count > 2 此查询查找有两名以上乘客的旅行对,第二次旅行在第一次旅行结束的地方开始,在完全相同的时间,并且第二次旅行将乘客带回第一次旅行开始的地方。 这不是一个非常有用的分析,但是我在这个模式中只有一个真正的表,复合JOIN键使这个分析变得不那么琐碎。 在此语句的查询计划中,您将看到类似Apply vector operation %VHASH(用于构建复合JOIN键)和Read vector-join temp-file A的片段,它们表明我们的新矢量化连接器正在工作! 这听起来像是一个冗长的查询计划中的一个微不足道的小问题,但它涉及到内部的大量智能工程,而且有相当多的知名柱状数据库供应商根本不允许这样做,并对您的模式布局施加了严格的约束,所以请加入我们,一起来享受这个! :—) 当查询计划继续读取该临时文件时,您可能会注意到在连接后的工作中仍有一些逐行处理,这就把我们带到了...... 接下来我们会... 列存储在2022.3版本中仍被标记为"实验性",但我们正在接近生产就绪状态,并为多表查询提供完整的端到端矢量化操作。 这包括上面提到的Post-Join 工作、查询优化器中更广泛的支持、更快地加载列式表以及对连接器的进一步增强(如共享内存支持)。 简而言之:现在是使用 InterSystems IRIS 2022.3社区版在纽约出租车数据集上进行第一次尝试的好时机,并且在我们发布2023.1时,您只需按下"运行"按钮就可以! 如果您对如何将列式存储用于您自己的数据和查询感兴趣,请直接联系 InterSystems 客户团队,也许我们会在InterSystems 2023年全球峰会上见面;-).
公告
Michael Lei · 一月 10, 2023

InterSystems Package Manager 包管理器 0.5.2 发布

我们刚刚发布了包管理器的一个小更新,如我们11 月宣布,我们已经将 ZPM 重命名为 IPM。现在这个是一个错误修复版本,正确解释 ROBOCOPY 返回代码并修复阻止安装某些包的回归。 在这里获取: https://github.com/intersystems/ipm/releases/tag/v0.5.2
公告
Hao Ma · 一月 12, 2023

ZPM 现在是 InterSystems 包管理器 (IPM)

我很高兴地宣布 ObjectScript 包管理器 ZPM 的生命周期中的一个里程碑。包管理器使开发人员能够以一种方便的方式巧妙地打包 ObjectScript 代码和部署配置设置以及版本信息。在过去的几年里,它已经发展成为许多开发工作流程中不可或缺的一部分。 事实证明,InterSystems 决定使用它来打包我们自己的组件非常重要,这促使我们决定将 GitHub 存储库从社区移至我们的公司存储库,并将其重命名为InterSystems Package Manager (IPM) 。 IPM 仍将是开源的。社区成员将能够审查代码并提交拉取请求。但这种变化使我们能够以非员工能够直接对代码库进行更改的方式确保软件的安全性。更高级别的安全性和信任对于可以将代码与您的数据一起安装的软件来说至关重要。 所以请和我一起庆祝 ZPM 的生命,欢迎 IPM 的诞生,并感谢贡献者——尤其是 Nikolay Soloviev 和@Dmitry.Maslennikov,他们再次展示了对开发人员需求的惊人洞察力,以及技能和奉献精神构建出色的软件! --- https://github.com/intersystems/ipm
公告
Michael Lei · 三月 8, 2023

技术征文大赛:InterSystems IRIS 教程

你好社区, 在上次激烈的编程比赛之后,我们很高兴宣布下一场 InterSystems 技术文章写作比赛! ✍️技术文章竞赛:InterSystems IRIS 教程✍️ 写一篇可以被视为 InterSystems IRIS 教程的文章 任何级别的程序员:3月1日至3月31日初级/中级/高级。 🎁 人人有奖:参加比赛的每位作者都可获得一份特别奖品包! 🏆 主要奖品:共有6个奖品可供选择。 奖品 1. InterSystems技术论文大赛人人有奖!任何在比赛期间写文章的会员都将获得特别奖品: 🎁 品牌有机帆布手提袋 🎁 Moleskine 内衬笔记本 2. 专家奖——文章将由 InterSystems 专家评判: 🥇 第一名:Mars Pro 蓝牙音箱 / AirPods Max 🥈 第二名:带无线充电盒的 Apple AirPods Pro / JBL Pulse 4 灯光秀音箱 🥉 第三名:适用于 iPad 的妙控键盘保护套 / Bose Soundlink 微型蓝牙音箱 或者作为替代方案,任何获胜者都可以从比他自己的奖品级别低的奖品中选择一个奖品。 3.开发者社区奖——点赞数最多的文章。获胜者将可以选择以下奖品之一: 🎁 iPad 妙控键盘保护套 🎁 Bose Soundlink 微型蓝牙扬声器 笔记: 作者每个类别只能获得一次(作者总共将获得 2 个奖项:一个专家奖,一个社区奖) 如果出现平局,则专家对平局文章的投票数将被视为打破平局的标准。 谁可以参加? 任何开发人员社区成员,InterSystems 员工除外。 创建一个帐户! 比赛期间 📝 3月1日-3月31日:文章发表及投票时间。 在此期间发表一篇文章。 DC 成员可以通过 Likes 为已发表的文章投票——在社区奖中投票。 注意:您越早发表文章,您收集专家和社区投票的时间就越多。 有什么要求? ❗️凡是在比赛期间所写的文章,满足以下要求,将自动进入比赛: 文章必须是有关 InterSystems IRIS 主题的教程*。它可以适用于初学者、中级或高级开发人员。 文章必须是英文的。 文章必须是 100% 新的(它可以是现有文章的延续)。 该文章不能是已在其他社区发表的文章的翻译。 文章必须包含Tutorial 标签。 文章大小:最少 400 字(链接和代码不计入字数限制)。 同一作者最多允许 3 个条目。 允许发表关于同一主题但具有来自不同作者的不同示例的文章。 * 教程提供开发人员可以遵循以完成特定任务或一组任务的分步说明。 🎯 额外奖励 这次我们决定增加额外的奖金来帮助您赢得奖品!请欢迎: 奖金 标称 细节 话题奖 5个 如果您的文章与建议主题列表(如下所列)中的主题相关,您将获得 5 票专家票的奖励(相对于专家选择的第一名 = 3 票) 。 视频奖 3个 文章内容的呈现形式:除了发布文章外,还制作一个解释性视频。 讨论奖 1个 包含最有用讨论的文章,由 InterSystems 专家决定。只有 1 篇文章将获得此奖金。 翻译奖金 1个 在任何区域社区上发布您文章的翻译。 了解更多。 注意:每篇文章只能投一票。 新会员奖励 3个 如果您没有参加过之前的比赛,您的文章将获得 3 票专家票。 拟议主题 以下是建议的主题列表,这些主题将为您的文章提供额外的奖励: ✔️ 从 C# 使用 IRIS✔️ 从 Java 使用 IRIS✔️ 从 Python 使用 IRIS✔️ 使用嵌入式 Python✔️ 使用 Python API✔️ 使用嵌入式 SQL✔️ 使用 ODBC/JDBC✔️ 使用 %Query/%SQLQuery✔️ 使用索引✔️ 使用触发器✔️ 使用 JSON✔️ 使用 XML✔️ 使用休息✔️ 使用容器✔️ 使用 kubernetes 注意:允许来自不同作者的同一主题的文章。 ➡️ 加入InterSystems Discord讨论规则、话题和奖金。 所以, 是时候展示你的写作技巧了!祝你好运✨ 重要提示:奖品的交付因国家/地区而异,其中一些可能无法交付。可以从@Liubka.Zelenskaia 索取有限制的国家/地区列表 欢迎关注中文社区成员 @ 王喆 的作品:Develop IRIS using SSH (​​​​​​https://community.intersystems.com/node/537756)