搜索​​​​

清除过滤器
公告
Claire Zheng · 七月 2, 2023

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

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

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

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

IRIS 2021 技术文档 First Look 5-- 技术概要:InterSystems SQL

技术概要(First Look)有助于您了解在InterSystems IRIS ®数据平台中如何使用SQL:标准的SQL功能、特有功能以及如何快速上手使用。 要体验技术概要(First Look)的所有内容 ,您可以在InterSystems IRIS的免费评估实例上执行相关操作 ,请参阅InterSystems First Looks(《InterSystems 技术概要》)。 1. InterSystems SQL: 特性和性能 InterSystems IRIS 提供高性能、功能完善的 SQL。在 InterSystems IRIS 中使用SQL,包括在单个CPU内核上运行查询,到使用数十个内核的CPU上并行执行查询,已至在InterSystems IRIS服务器集群上运行分布式查询。 在InterSystems IRIS中,可以使用 SQL 的范围包括: 联接(Joins) 灵活、高性能索引 聚合函数和分组 以SQL或InterSystems ObjectScript (以下简称“ObjectScript” )编写的存储过程 JDBC和ODBC连接 自动并行查询 透明分布式查询 InterSystems SQL提供了强大的工具来实现最佳的SQL查询性能。其中一个工具是使用压缩位图索引:使用紧凑、高度有效的结构和向量化的CPU指令, InterSystems SQL可以只用单个内核即可执行每秒数十亿行的聚合操作以及检查逻辑判断条件。本指南的后续内容将提供位图索引的示例。 想要快速尝试InterSystems IRIS的SQL功能吗?查看SQL QuickStart! 2. 演示:SQL Shell 可以通过各种应用程序接口、交互式客户端和标准协议在InterSystems IRIS中执行SQL ,包括: 用于交互式SQL语句执行的InterSystems IRIS SQL Shell ODBC和JDBC客户端、交互式应用(例如, SQuirreL SQL或WinSQL )或通过将InterSystems IRIS驱动程序嵌入使用的应用程序 InterSystems IRIS管理门户中的System Explorer,为执行SQL提供了交互式的Web界面 在ObjectScript类中执行嵌入式SQL或动态SQL 如果在阅读本指南后,想了解这些主题的更多有关信息,请参阅下面的“了解有关InterSystems SQL的更多信息”。 此示例向您展示如何使用SQL Shell交互式执行SQL语句,或执行文件中的SQL语句。 2.1 用前须知 要使用该程序,需要一个正在运行的InterSystems IRIS实例。可以选择多种类型的已授权的免费评估实例;该实例不必存储在正在运行的系统(尽管它们可以互相进行网络访问)。如何部署每个类型的实例(如果您还没有要使用的实例)的有关信息,请参阅 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的Deploying InterSystems IRIS(部署 InterSystems IRIS)。 还需要从GitHub存储库https://github.com/intersystems/FirstLook- SQLBasics获取本指南的实用程序文件。应该克隆存储库来下载以下文件: stock_table_demo_one.sql ,其中包含用于创建和加载小型( 20行)存量数据的表格的SQL语句 stock_table_demo_two.csv ,其中包含一百万行存量表数据 Loader.xml ,包含实用程序方法的类文件,用于将数据从stock_table_demo_two.csv加载到InterSystems IRIS表中 注意: stock_table_demo_two.csv 非常大 ,要下载它之前需要安装Git Large File Storage。 必须通过该实例访问FirstLook-SQLBasics源。下载文件的程序取决于所使用的实例类型,如下所示: 如果使用的是ICM部署的实例: 1.使用具有-machine 和-interactive 选项的 icm ssh 命令在储存该实例的节点上打开默认shell ,例如: icm ssh -machine MYIRIS-AM-TEST-0004 -interactive 2. 在Linux命令行上,使用以下命令之一将存储库克隆到该实例的数据存储卷(data storage volume)。 例如,对于部署在Azure上的配置,数据卷的默认装入点为 /dev/sdd ,因此应使用如下命令: $ git clone https://github.com/intersystems/FirstLook-SQLBasics /dev/sdd/FirstLook-SQLBasics 或者使用命令: $ wget -qO- https://github.com/intersystems/FirstLook-SQLBasics/archive/master.tar.gz | tar xvz -C /dev/sdd 这些文件现在可以通过容器文件系统的/irissys/data/FirstLook-SQLBasics 目录被InterSystems IRIS获取。 如果您使用的是通过其他方式部署的容器化实例(授权的版本或社区版本): 1. 在主机上打开Linux命令行。(如果您在云节点上使用社区版本 ,请使用SSH连接到节点,如部署和浏览InterSystems IRIS中所述。) 2. 在Linux命令行上,使用git clone或wget命令,如上所述,将存储库克隆到加载为容器中的数据卷的存储位置。 对于社区版实例,可以克隆到该实例的%SYS 目录(社区版实例指定的配置数据存储的位置)。在Linux文件系统上,此目录为/opt/ISC/dur。该文件可以在容器文件系统的/ISC/dur/FirstLook-SQLBasics目录下被InterSystems IRIS获取。 对于授权的容器化实例,选择加载为容器中的数据卷的存储位置(包括durable%SYS 目录,如果使用的话)。例如,如果您的docker run命令包括选项 -v /home/user1:/external,然后将存储库克隆到/home/user1 ,这些文件在容器文件系统上的/external/FirstLook-SQLBasics目录中可被Inter- Systems IRIS获取。 如果您使用的是InterSystems Learning Labs实例: 1. 在集成的IDE中打开命令行终端。 2. 将目录更改为/home/project/shared ,并使用 git clone命令克隆存储库: $ git clone https://github.com/intersystems/FirstLook-SQLBasics 该文件夹添加到“Shared”下左侧的Explorer面板,且该目录可在InterSystems IRIS 选择路径的 /home/project/shared下被获取。 如果您使用的是已安装的实例: 如果实例的主机是安装有GitHub Desktop和GitHub Large File Storage 的Windows系统: a. 在主机的web浏览器中转到 https://github.com/intersystems/FirstLook-SQLBasics。 b. 选择Clone or download ,然后选择 Open in Desktop。 这些文件可在GitHub目录中被InterSystems IRIS 获取,例如 C:\ Users\ User1\ Documents\ GitHub\ FirstLook-SQLBasics。 如果主机是Linux系统,只需使用Linux命令行上的git clone命令或wget命令将存储库克隆到您选择的位置即可。 2.2 使用SQL脚本文件创建和填充表 为达到演示目的,我们使用一个SQL脚本文件,stock_table_demo_one.sql,来创建并加载包含几行示例数据的表。 创建和加载表格: 打开InterSystems 终端terminal。将看到如下交互式提示: USER> 此提示表示您目前在 USER 命名空间(namespace)中,默认情况下该空间为空,可供客户自由使用。从该提示开始,可以执行ObjectScript。 通过输入如下命令立刻打开SQL Shell DO $SYSTEM.SQL.Shell() 这将输出以下内容: SQL Command Line Shell The command prefix is currently set to: <<nothing>>. Enter q to quit, ? for help. [SQL]USER>> 将当前SQL数据库方言设置为IRIS: SET DIALECT=IRIS 要运行stock_table_demo_one.sql中的语句,请输入命令 RUN <Path>stock_table_demo_one.sql 其中Path是放置文件的位置(请参阅前面的用前须知)。系统会提示您为日志文件指定名称,日志文件包含文件中的语句及其输出结果、如何处理错误以及语句分隔符。接受所有默认值。 语句创建一个表格并插入20行。文件的前几行是: CREATE TABLE FirstLook.StockTableDemoOne (ClientID INTEGER, BrokerID INTEGER, Symbol VARCHAR(10), TransactionType VARCHAR(4), TransactionDate TIMESTAMP,Quantity INTEGER, Price DECIMAL(15,2), CommmissionRate DECIMAL(15,2)) GO INSERT INTO FirstLook.StockTableDemoOne (ClientID, BrokerID, Symbol, TransactionType, TransactionDate, Quantity, Price, CommmissionRate) VALUES (29834783, 3103, 'RTYU', 'SELL', '2016-01-03', 342, 5.05, 3.25) GO 当脚本运行时,在处理每个SQL语句后将看到输出结果: 1. INSERT INTO FirstLook.StockTableDemoOne (ClientID, BrokerID, Symbol, 2. TransactionType, TransactionDate, Quantity, 3. Price, CommissionRate) 4. VALUES (92609349, 3103, 'HWVT', 'BUY', '2017-10-25', 1500, 451.09, 3.25) 1 Row Affectedu 处理完所有语句后, SQL Shell会列出编译的语句数量以及报告的错误和警告,并报告已用时间: Statements .................compiled: 21 .....with errors reported: 0 ...with warnings reported: 0 Elapsed time: .125181 seconds 2.3 在SQL Shell中直接运行查询 有了已填充的表后,可以对它运行查询。可以使用单行或多行模式来执行此操作,但后者可能更方便。 若要进入多行模式,请根据提示按Enter键。将看到处于多行模式的确认信息。 输入以下SQL语法,逐行输入。关键字GO 指示shell执行查询并退出多行模式: SELECT BrokerID, TO_CHAR((Quantity * Price),'9,999,999.99') as SubTotal, TransactionDate FROM FirstLook.StockTableDemoOne WHERE TransactionType='SELL' ORDER BY SubTotal DESC GO 您输入的语句将与SQL Shell呼应,后附查询结果。 BrokerID SubTotal TransactionDate 5001 302780.00 2017-11-06 09:51:24.735 5002 92350.00 2018-01-15 22:21:17.638 3103 57645.00 2017-09-24 19:36:43.079 3103 45015.00 2016-10-31 19:21:08.913 5001 23180.50 2017-07-31 23:05:49.83 5001 13113.60 2015-11-13 22:13:49.457 5001 12636.00 2015-10-13 05:50:23.209 3103 1727.10 2016-01-03 13:59:01.098 1009 1693.50 2016-01-15 18:18:15.346 在查询结果后,您将看到准备和执行语句所需时间的信息: 9 Rows(s) Affected statement prepare time(s)/globals/cmds/disk: 0.0625s/47683/263292/0ms execute time(s)/globals/cmds/disk: 0.0006s/64/2903/0ms cached query class: %sqlcq.USER.cls47 准备步骤包括从一条SQL语句的语法到生成可执行代码。此代码被缓存,以供重复使用,因此一条语句通常仅完全准备一次。后续准备只需要使用语句文本的hash来定位已经缓存的代码。 执行步骤包括执行针对查询生成的代码并返回其结果。在每个步骤的列表中都包含以下指标: 每个步骤所花费的时间。 Globals计数,即为准备或执行SQL语句而引用InterSystems IRIS存储的数量。如需进一步了解全局有关信息,请参阅Orientation Guide for Server-Side Programming(《服务器端编程入门指南》)中的“Introduction to Globals (Globals简介)”一章。 为准备或执行SQL语句而执行的ObjectScript命令的数目。 显示结果的结尾是缓存的查询类(cached query class),这是首次准备语句时生成的缓存代码的ObjectScript类。 3. 也可以使用聚合函数和 GROUP BY。请注意,可以对聚合函数的别名排序: SELECT BrokerID, TO_CHAR(SUM(Quantity * Price), '9,999,999.99') as SubTotal FROM FirstLook.StockTableDemoOne GROUP BY BrokerID ORDER BY SubTotal DESC GO BrokerID SubTotal 3103 868,993.60 1009 808,453.50 5001 593,242.82 5002 187,560.00 4 Rows(s) Affected statement prepare time(s)/globals/cmds/disk: 0.1665s/45832/237712/77ms execute time(s)/globals/cmds/disk: 0.0025s/122/2434/2ms cached query class: %sqlcq.USER.cls9 3. 演示:使用位图索引提高查询性能 如果您正在使用大型数据集,寻找改善查询性能的方法,位图索引是您可以使用的几种方法之一。 如果一个表有一个或多个字段,字段的可能值集合较小,则创建位图索引特别适合。 有关位图索引运行的详细信息,请参阅InterSystems SQL Optimization Guide(《InterSystems SQL优化指南》)的 Bitmap Indices(位图索引)章节。 在本演示中,您将看到在股票交易数据的百万行数据表格中创建目标位图索引引发的变化。您将使用几个简单的 ObjectScript 命令;很容易地从SQL Shell内无缝访问 ObjectScript 类库。 要运行演示: 按照“使用SQL脚本文件创建和填充表格”(Creating and Populating a Table With a SQL Script File)所述,在终端中启动SQL Shell。 创建表: CREATE TABLE FirstLook.StockTableDemoTwo (ClientID INTEGER, BrokerID INTEGER, Symbol VARCHAR(10), TransactionType VARCHAR(4), TransactionDate TIMESTAMP, Quantity INTEGER, Price DECIMAL(15,2), CommissionRate DECIMAL(15,2)) 0 Rows Affected statement prepare time(s)/globals/cmds/disk: 0.0063s/1811/22260/0ms execute time(s)/globals/cmds/disk: 0.2138s/76495/655985/76ms cached query class: %sqlcq.USER.cls1 导入Loader类( Loader.xml文件)。OBJ前缀表示 SQL Shell 按照 ObjectScript 处理以下命令; “c”标志指示InterSystems IRIS编译代码, “k”标志确保源代码存储在活动命名空间(active namespace)中。 OBJ DO $ system.OBJ.Load ("< Path > Loader.xml", "ck") 其中Path是放置文件的位置(请参阅用前须知)。将输出如下结果: Load started on 04/19/2018 15:17:53 Loading file C:\Users\user\repos\FirstLook-SQLBasics\Loader.xml as xml Imported class: FirstLook.Loader Compiling class FirstLook.Loader Compiling routine FirstLook.Loader.1 Load finished successfully. 要将stock_table_demo_two.csv中的数据加载到表中,请在终端中运行以下命令: OBJ WRITE ##class(FirstLook.Loader).LoadStockTableCSV("<Path>stock_table_demo_two.csv") 其中Path是放置文件的位置。此命令的输出结果1000000仅表示已加载100万行。 运行以下查询: SELECT DISTINCT BrokerID FROM FirstLook.StockTableDemoTwo 输出结果显示,可能的经纪人ID的数量非常小,因此该字段是位图索引的好选择。 BrokerID 115 107 101 114 119 104 109 108 20 Rows(s) Affected statement prepare time(s)/globals/cmds/disk: 0.0645s/43430/197693/9ms execute time(s)/globals/cmds/disk: 1.2569s/2000039/9001314/0ms cached query class: %sqlcq.USER.cls10 6. 要在添加位图索引之前查看涉及BrokerID字段的COUNT查询的性能,请运行以下查询: SELECT BrokerID, COUNT(*) As Transactions FROM FirstLook.StockTableDemoTwo GROUP BY BrokerId ORDER BY Transactions DESC BrokerId Transactions 103 50386 118 50304 107 50247 112 50207 101 50174 109 50088 115 50088 104 50048 111 50031 105 50008 113 49996 119 49942 114 49919 116 49894 110 49888 108 49882 102 49843 120 49768 106 49742 117 49545 20 Rows(s) Affected 观察查询返回结果后显示的查询性能统计信息:所用总时间(包括准备和执行时间)约为0.65秒。 statement prepare time(s)/globals/cmds/disk: 0.0695s/45048/225490/13ms execute time(s)/globals/cmds/disk: 0.5878s/1000250/11002218/0ms cached query class: %sqlcq.USER.cls7 7. 在BrokerID上添加位图索引: CREATE BITMAP INDEX BrokerIDIdx ON TABLE FirstLook.StockTableDemoTwo (BrokerID) 0 Rows Affected statement prepare time(s)/globals/cmds/disk: 0.0056s/1723/15958/0ms execute time(s)/globals/cmds/disk: 0.9805s/2071557/18505697/1ms cached query class: %sqlcq.USER.cls11 8. 运行与上述相同的SELECT查询。请注意性能提升:在下面的示例中,查询总共花费了大约0.35秒,减少了近50%。 SELECT BrokerID, COUNT(*) As Transactions FROM FirstLook.StockTableDemoTwo GROUP BY BrokerId ORDER BY Transactions DESC ... statement prepare time(s)/globals/cmds/disk: 0.0573s/45585/231374/0m execute time(s)/globals/cmds/disk: 0.2926s/622/15004397/0ms cached query class: %sqlcq.USER.cls1 4. 了解有关InterSystems SQL的更多信息 要了解有关SQL和InterSystems IRIS的更多信息,请参阅: 4.1 介绍材料 Using InterSystems SQL(使用InterSystems SQL) InterSystems SQL Reference(InterSystems SQL参考书目) InterSystems SQL Overview(InterSystems SQL概述) 4.2 SQL开发 SQL –Things You Should Know (SQL-您应该知道的事情) Developing with InterSystems Objects and SQL(使用InterSystems Objects和SQL开发) 4.3 查询优化 First Look: Optimizing SQL Performance with InterSystems IRIS(技术概要:使用InterSystems IRIS优化SQL性能) InterSystems SQL Optimization Guide(InterSystems SQL优化指南) Academy – Optimizing SQL Performance(学院派–优化SQL性能) Optimizing SQL Queries(优化SQL查询) 4.4 分片和可扩展性 First Look: Scaling for Data Volume with Sharding(技术概要:带分片的数据卷扩展) Scalability Guide(可扩展性指南) 4.5 SQL Search SQL Search First Look: SQL Search with InterSystems IRIS(技术概要:使用InterSystems IRIS进行) Using InterSystems SQL Search(使用InterSystems SQL Search) Creating iFind Indices for Searching Text Fields(创建用于搜索文本字段的iFind索引) 4.6 JDBC First Look: JDBC and InterSystems IRIS(技术概要:JDBC和InterSystems IRIS) Using Java JDBC with InterSystems IRIS (documentation)(使用InterSystems IRIS进行Java JDBC <文档>) Java Overview(Java概述) Using JDBC with InterSystems IRIS (online learning)(在InterSystems IRIS中使用JDBC <在线学习>)
文章
Louis Lu · 四月 15, 2021

第 2 天:使用 InterSystems Objects 和 SQL 进行开发

原文在这里 原作者YURI MARX GOMES 我正在参加 Joel Solon 讲授的“使用 InterSystems Objects 和 SQL 进行开发”课程。 课程非常好,我将在这里分享一些从培训中总结的提示。 第 2 天的提示: 1. 您可以创建持久类(在数据库中具有对应表的类,用于保持类属性)。 2. 持久类示例: Class dc.Person extends (%Persistent) { Property Name As %String; Property BirthDate As %Date; } 3. 扩展 %Persistent 时,您将获得 %New() 以在内存中创建新实例,获得 %Save() 以保存到数据库,获得 %Id() 以获取该实例在数据库中的唯一 ID,以及获得 %OpenId() 以使用数据库值加载实例。 4. 持久类允许您调用 %Deleteid() 以从数据库中删除一个实例,调用 %DeleteExtent() 以删除所有保存的对象(没有 where 时删除!),调用 %ValidateObject() 以验证保存前传递的数据(验证是否必需、大小等)。 5. 持久类具有 %IsModified() 和 %Reload(),前者用于检查内存中的数据变化(参见评论中 joel 的提示),后者用于获取这些变化。 6. 要在尝试 %Save() 或 %Delete() 时获得可能的错误,请执行:set status = person.%Save(), write status。 如果保存成功,将返回 1。 7. 我们可以使用 do $system.Status.DisplayError(status) 查看错误详细信息。 8. 要调用持久类方法,请执行:##class(dc.Person).%Save()。 9. 要调用持久实例方法,执行:..Method()。 引用属性也一样,请执行:write ..Name。 10. 要从程序或终端内存中移除对象或变量,请使用 kill person 或 set person = ""。 如果仅使用 kill,将从内存中移除所有引用(不是从数据库中移除,在数据库中使用 killextent)。 11. 如果要通过实用工具方法填充测试数据,请使用 %Populate 扩展持久类,然后调用 Populate(行数)方法。 12. 您可以通过继承%SerialObject(不具有 ID 的持久类,因为它必须与另一个持久类相连)创建嵌入式类。 示例: Class dc.Contact Extends %SerialObject { Property Phone As %String; Property Email As %String; } 13. 此序列将成为您的持久类的一个属性: Class dc.Person extends (%Persistent) { Property Name As %String; Property BirthDate As %Date; Property Contact As dc.Contact; } 14. 在 IRIS 数据库中,将仅创建一个具有 Contact 属性的Person表。 15. 您可以创建索引来获得唯一性或调整查询。 示例:Index NameIndex On Name [Unique]。 16. 创建索引时,如果表不为空,则需要在管理门户中重建索引。 17. 要创建构造函数方法,请重写 %OnNew()。 这是在调用 %New() 时调用的回调方法。 还有其他回调方法。 18. IRIS 对 JSON 有很好的支持。 您可以通过调用 set name = {}.%FromJSON("{""Name"":""Yuri""}") 将 JSON 加载到对象。 19. 您可以从对象执行编写 JSON:name.%ToJSON()。 20. IRIS 和 Caché 中存在 JSON 数组(感谢 @RobertC..Cemper 提醒),但是只在 IRIS 中我们才有 JSON 的格式化程序和zwrite 写入 JSON。 明天我会发布第 3 天的总结。 PS:这是一份总结,课程中实际教授了更多内容。
文章
Louis Lu · 四月 15, 2021

第 4 天:使用 InterSystems Objects 和 SQL 进行开发

我正在参加 Joel Solon 讲授的“使用 InterSystems Objects 和 SQL 进行开发”课程。 课程非常好,我将在这里分享一些从培训中总结的提示。 第 4 天的提示: 1. 所有数据都存储在global中,global名称以 ^ 开头。 global示例:^animal。 global可以有多个数据位置(“子数据”)。 示例:^animal("大象","吃草")。 2. 可从任意系统范围(命名空间)访问 ^%* global。 3. global使 IRIS 能够支持多模型数据(对象、关系、文档、多维等)。 4. 要查看global,请转到 Management Portal > Explorer > Globals > Select Global > View,或者在终端中输入 do ^%G 或 zwrite ^global。 5. 在持久类和 SQL 表之间有自动对应关系: 包对应于是 SQL Schema; 类是Table; 属性是列; 方法是存储过程(使用 sqlProc 时); 类之间的关系是 SQL 外键约束(必须为双向)。 对象是行。 6. 一个表可以对应多个类,但序列类serial是持久类表的一部分(没有特定的表)。 7. 一个类可以对应多个表。 8. 我们有一些类类型: Non-registered:不是类对象(仅限方法的容器); Registered:瞬态对象; Persistent:类似于SQL表中持久化保存; Serial:嵌入主持久化表中的持久表(Serial为嵌入式); Datatype:非类对象用于执行新的验证和转换为基础数据类型。 9. 类的组成可包括: 属性; 方法; Class queries:SQL Select 语句; Parameters:配置类行为的用户常量或系统常量; 外键:参照完整性; 索引:提高性能并创建独特值; 触发器:触发与持久性事件关联的方法; XData:与该类关联的 XML 或 JSON 定义; 存储:数据存储的描述。 10. 按照惯例,类的首字母大写。 示例:CountryOrigin。 参数均为大写。 示例:COLORNUMBER。 11. 类特性限定/配置一个类。 示例 [SqlTableName = Animal] 可设置SQL表名。 [Final] 不允许继承。 [Private] 不允许为非子类调用方法或使用属性。 12. IRIS 在内部生成 Get 和 Set 属性,这些属性不可见,但可以通过声明改变行为。 13. 可以重写超类的方法,为此,请重复类名、参数。 可以增加参数的数量,不可减少。 14. 使用 ##super() 调用基类方法。 15. 要创建抽象类,请使用 [Abstract] 并防止实例化。 16. 可以继承多个类。 例如,Class Person extends (%Persistent, %Animal)。 (Persistent 必须是 extends 中的第一个类,参见评论中 joel 的提示) 17. REST 是表述性状态转移。 它基于 HTTP 协议。 使用 HTTP 谓词:GET(选择)、POST(插入)、PUT(更新)和 DELETE(删除)。 18. 要将您的类作为 REST 资源公开,请从 %CSP.REST 扩展。 19. 在 XData 块中使用 URLMap 配置 REST 服务的路由。 使用门户,创建一个 Web 应用程序,启用 REST 并指定 Dispatch 类。 20. %JSONAdaptor 提供了对象与 JSON 之间的转换。 使用 obj.%JSONImport(jsonObj) 将 DynamicObject 分配到对象。 使用 obj.%JSONExportToString(.jsonString) 将 JSON 字符串写入对象。 21. %JSON.Formatter 格式化 JSON 字符串以便人类阅读。
公告
Claire Zheng · 七月 10, 2023

InterSystems 2023年度编程大奖赛获奖名单出炉!

Hi 开发者们, 是时候宣布InterSystems 2023 年度编程大奖赛的获奖者了! 感谢提交20 份应用申请出色参与者们 🔥 专家提名奖 🥇第一名,7,000 美元,获奖者@Henrique Dias, @Henry Pereira, @José Roberto Pereira ,获奖应用 iris-fhir-generative-ai 🥈第二名,5,000 美元,获奖者@Ikram Shah, @Sowmiya Nagarajan,获奖应用 IRIS FHIR Transcribe Summarize Export 🥉第三名,3,000 美元,获奖者 @Muhammad Waseem 获奖应用irisChatGPT 🏅第四名,2,000 美元,获奖者@Dmitry Maslennikov,获奖应用ZProfile 🏅第五名 ,1,000 美元,获奖者@Ikram Shah, @Sowmiya Nagarajan ,获奖应用 FHIR - AI and OpenAPI Chain 🌟 200 美元,获奖者:@Robert Cemper, 获奖应用oex-mapping 🌟 200 美元,获奖者:@Rob Ellis, 获奖应用RDUH Interface Analyst HL7v2 Browser Extension 🌟 200 美元,获奖者:@davi massaru teixeira muta, 获奖应用fhir-chatGPT 🌟 200 美元,获奖者:@davi massaru teixeira muta, 获奖应用interoperability_GPT 🌟 200 美元,获奖者:@Oleksandr Zaitsev ,获奖应用password-app-iris-db 🌟 200 美元,获奖者:@Daniel Aguilar 获奖应用irisapitester ⭐️ 100 美元,获奖者:@Shanshan Yu,获奖应用IntegratedMLandDashboardSample ⭐️ 100 美元,获奖者:@Zhang Fatong 获奖应用 IntegratedML-IRIS-PlatformEntryPrediction ⭐️ 100 美元,获奖者:@Sean Connelly 获奖应用DevBox ⭐️ 100 美元,获奖者:@John Murray 获奖应用 oex-vscode-snippets-template ⭐️ 100 美元,获奖者:@Sergey Mikhailenko,获奖应用appmsw-warm-home ⭐️ 100 美元,获奖者:@yurimarx Marx, 获奖应用 FHIR Editor ⭐️ 100 美元,获奖者:@Oliver Wilms,获奖应用iris-user-manager ⭐️ 100 美元,获奖者:@Oleh Dontsov 获奖应用 Recycler ⭐️ 100 美元,获奖者:@Oleh Dontsov 获奖应用 IRIS Data Migration Manager 社区提名奖 🥇第一名,3,000 美元,获奖者@Henrique Dias, @Henry Pereira, @José Roberto Pereira ,获奖应用 iris-fhir-generative-ai 🥈第二名,2,000 美元,获奖者@Shanshan Yu,获奖应用IntegratedMLandDashboardSample 🥉第三名,1,000 美元,获奖者@Zhang Fatong,获奖应用 IntegratedML-IRIS-PlatformEntryPrediction 我们向所有参赛者和获奖者表示最诚挚的祝贺! 下次一起来参赛吧!;) 热烈祝贺 @Shanshan Yu@Zhang Fatong二位中国选手!期待以后看到更多的优秀作品!
文章
姚 鑫 · 二月 25, 2021

第四十七章 Caché 变量大全 ^$JOB 变量

# 第四十七章 Caché 变量大全 ^$JOB 变量 提供系统间IRIS进程(`JOB`)信息。 # 大纲 ```java ^$JOB(job_number) ^$J(job_number) ``` # 参数 - `job_number` 输入ObjectScript命令时创建的系统特定OBJ编号。每个活动的InterSystems IRIS进程都有一个唯一的作业号。登录到系统会启动一个作业。在UNIX®系统上,作业号是调用InterSystems IRIS时启动的子进程的`PID`。`JOB_NUMBER`必须指定为整数;不支持十六进制值。 # 描述 可以将`^$JO`B结构化系统变量用作`$DATA`、`$ORDER`和`$QUERY`函数的参数,以获取有关本地InterSystems IRIS系统上是否存在InterSystems IRIS作业的信息。 # 示例 以下示例显示如何将`^$JOB`用作`$DATA`、`$ORDER`和`$QUERY`函数的参数。 ## 作为$DATA的参数 `$DATA(^$JOB(job_number))` `^$JOB`作为`$DATA`的参数返回一个整数值,该值指示指定的作业是否作为节点存在于`^$JOB`中。下表显示了`$DATA`可以返回的整数值。 Value | Meaning ---|--- 0 | `JOB`不存在 1 | `JOB`存在 以下示例测试系统间IRIS进程是否存在。 ```java DHC-APP>SET x=$JOB DHC-APP>WRITE !,$DATA(^$JOB(x)) 1 ``` 变量`x`设置为当前进程的作业号(例如:4294219937)。写入操作返回布尔值1,表示此进程存在。 ## 作为$ORDER的参数 `$ORDER(^$JOB(job_number),direction)` `^$JOB`作为`$ORDER`的参数,按排序顺序将下一个或上一个`^$JOB`编号返回到指定的作业编号。如果不存在作为`^$JOB`节点的此类`JOB`编号,`$ORDER`将返回空字符串。 Direction参数指定是否返回下一个或上一个`job`编号。如果不提供方向参数,InterSystems IRIS会将排序顺序中的下一个`job`编号返回给指定的`job`编号。 以下子例程搜索InterSystems IRIS作业表,并将`job`号存储在名为`job`的本地数组中。 ```java /// d ##class(PHA.TEST.SpecialVariables).JOB() ClassMethod JOB() { JOB SET pid="" FOR i=1:1 { SET pid=$ORDER(^$JOB(pid)) QUIT:pid="" SET JOB(i)=pid } zw JOB WRITE "总共job有: ",i QUIT } ``` ```java DHC-APP>d ##class(PHA.TEST.SpecialVariables).JOB() JOB(1)=612 JOB(2)=1424 JOB(3)=1972 JOB(4)=5624 JOB(5)=7244 JOB(6)=7864 JOB(7)=7872 JOB(8)=7892 JOB(9)=7920 JOB(10)=8332 JOB(11)=9048 JOB(12)=9084 JOB(13)=9340 JOB(14)=10084 JOB(15)=10112 JOB(16)=10156 JOB(17)=10200 JOB(18)=10212 JOB(19)=10828 JOB(20)=22432 总共job有: 21 ``` ## 作为$QUERY的参数 `$QUERY(^$JOB(job_number))` `^$JOB`作为`$QUERY`的参数,按排序顺序将下一个`^$JOB`编号返回到指定的`JOB`编号。如果`^$JOB`中没有这样的`JOB`编号作为节点,则`$QUERY`将返回空字符串。 以下示例返回InterSystems IRISJOB表中的前两个`JOB`。请注意间接运算符`(@)`的用法: ```java DHC-APP>SET x=$QUERY(^$JOB("")) DHC-APP> WRITE !,x ^$JOB("612") DHC-APP>WRITE !,$QUERY(@x) ^$JOB("1424") ```
文章
Michael Lei · 五月 12, 2021

InterSystems 数据平台和性能 - 第 4 篇 - 关注内存

本帖将展示为 InterSystems 数据平台上运行的数据库应用调整共享内存需求(包括 global 和例程缓冲区、gmheap 以及 locksize)的方法,以及在配置服务器和虚拟化 Caché 应用程序时应考虑的一些性能提示。 和以往一样,当我谈到 Caché 时,我指的是所有数据平台(Ensemble、HealthShare、iKnow 和 Caché)。 [本系列其他帖子的列表](https://cn.community.intersystems.com/post/intersystems-数据平台的容量规划和性能系列文章) 当我最初开始使用 Caché 时,大多数客户的操作系统是 32 位的,Caché 应用程序的内存有限且昂贵。 通常部署的英特尔服务器只有几个核心,唯一的扩展方式是选择大型服务器,或者使用 ECP 横向扩展。 现在,即使是基本的生产级服务器也具有多个处理器、几十个核心,并且最小内存为 128 或 256 GB,可能达到 TB。 对于大多数数据库安装,ECP 已被遗忘,我们现在可以在单台服务器上大幅提高应用事务处理速率。 Caché 的一个关键特性是我们在共享内存(通常称为数据库缓存或 global 缓冲区)中使用数据的方式。 简单地说,如果适当调整 global 缓冲区的大小并为其分配“更多”内存,通常会提高系统性能 - 访问内存中的数据要比访问磁盘上的数据快得多。 当年,当 32 位系统占主导地位时,对问题_我应该为 global 缓冲区分配多少内存?_的回答很简单 - _尽可能多!_反正也没有很多内存可用,所以人们努力计算操作系统需求、操作系统和 Caché 进程的数量和大小以及每个进程使用的实际内存,以找到剩余的内存来分配尽可能大的 global 缓冲区。 ## 趋势已经转变 如果您在当代服务器上运行应用程序,可以为 Caché 实例分配大量内存,并且由于内存现在既“便宜”又充足,因此通常放任其使用。 然而,趋势再次转变,除了最大型的系统,现在部署的几乎所有系统都是虚拟化的。 所以,虽然在需要时可以为“怪兽”虚拟机分配大量内存,但重点仍然回到适当调整系统规模上。 为了最大程度地利用服务器整合,需要进行容量计划以充分利用可用主机内存。 # 什么在使用内存? 通常,Caché 数据库服务器上有四个主要的内存消耗者: * 操作系统,包括文件系统缓存。 * 其他非 Caché 应用程序(如果已安装)。 * Caché 进程。 * Caché 共享内存(包括 global 和例程缓冲区以及 GMHEAP)。 从高级别看,所需的物理内存量只是将列表上每一项的需求都加起来。 上面的所有项目都使用实际内存,但它们也可以使用虚拟内存,容量计划的一个关键部分是将系统规模调整为有足够的物理内存,使分页不会发生或尽量少发生,或者至少尽量减少或消除必须从磁盘恢复内存的硬页面故障。 在本帖中,我将重点介绍 Caché 共享内存的大小调整以及优化内存性能的一些通用规则。 操作系统和内核的要求因操作系统而异,但大多数情况下为几个 GB。 文件系统缓存视情况而定,将是列表上其他项目获得内存分配之后的其余任何可用内存。 Caché 主要是进程 - 如果在应用程序运行时查看操作系统统计信息,则会看到缓存进程(例如 cache 或 cache.exe)。 因此,观测应用程序内存要求的一个简单方法是查看操作系统指标。 例如,通过 Linux 上的 `vmstat` 或 `ps` 或者 `Windows 进程资源管理器`,以及使用中的实际内存总量,推断出增长需求和峰值需求。 请注意,某些指标会报告包含共享内存的虚拟内存,因此收集实际内存需求时务必小心。 ## 调整 global 缓冲区大小 - 一种简化的方法 对于高事务数据库,容量计划的目标之一是将 global 缓冲区的大小调整为使内存中容纳尽可能多的应用数据库工作集。 这将最大程度地减少读取 IOPS,并且通常会使应用程序的性能更好。 我们还需要取得平衡,使其他内存用户(如操作系统和 Caché 进程)不会被移出分页,并且有足够的内存用于文件系统缓存。 我在[本系列的第 2 部分](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-–-part-2)中展示了一个示例,来说明如果对磁盘过度读取会发生什么情况。在该示例中,高读取数是由不良的报告或查询引起的,但是如果 global 缓冲区太小而迫使应用程序不断从磁盘读取数据块,则会产生同样的效果。 另外,值得注意的是,存储的格局一直在变化 - 随着固态硬盘技术的进步,存储速度越来越快,但靠近运行中的进程的内存数据仍然是最好的。 当然,每个应用程序都是不同的,所以必须指出__“您的情况可能有所不同”__,但有一些通用规则可以帮助您开始为应用程序的共享内存制定容量计划。 之后,您可以根据您的具体要求进行调整。 ### 从哪里开始? 很遗憾,并没有万能答案。但是,正如我在之前的帖子谈到的,一个好的做法是确定系统 CPU 容量规模,使得在达到所需峰值事务处理速率的情况下,峰值处理期间的 CPU 使用率为大约 80%。 为短期增长或意外的活动激增留出 20% 余量。 例如,当我调整 TrakCare 系统的规模时,我通过基准测试和查看客户站点指标来了解已知事务处理速率的 CPU 要求,并且可以针对基于英特尔处理器的服务器使用普遍性的经验法则: `经验法则:`每个 CPU 核心对应 _n_ GB 大小的物理内存。 - 对于 TrakCare 数据库服务器,_n_ 为 8 GB。 对于小型 Web 服务器则为 4 GB。 `经验法则:`为 Caché global 缓冲区分配 _n_% 的内存。 - 对于中小型 TrakCare 系统,_n_% 为 60%,其余 40% 的内存留给操作系统、文件系统缓存和 Caché 进程。 如果您需要许多文件系统缓存或有许多进程,可以更改该值,例如改为 50%。 或者,在大型系统上使用超大内存配置时,将其调整为更高的百分比。 - 此经验法则假定服务器上只有一个 Caché 实例。 所以如果应用程序需要 10 个 CPU 核心,则虚拟机将有 80 GB 内存,其中 48 GB 为 global 缓冲区,32 GB 用于其他所有用途。 内存大小调整规则适用于物理或虚拟化系统,因此对于 TrakCare 虚拟机,1 vCPU : 8 GB 内存的比例同样适用。 ### 调整 global 缓冲区 要查看规模调整的效果如何,需要观察几个项目。 您可以使用操作系统工具观察 Caché 之外的可用内存。 根据最佳计算结果进行设置,然后观察一段时间内的内存使用情况,如果一直有可用内存,则可以重新配置系统以增加 global 缓冲区或适当调整虚拟机规模。 global 缓冲区大小调整适当的另一个关键指标是读取 IOPS 尽可能低 - 这意味着 Caché 缓存效率会很高。 您可以使用 mgstat 观察不同的 global 缓冲区大小对 PhyRds 和 RdRatio 的影响,[本系列的第 2 部分](https://community.intersystems.com/post/intersystems-data-platforms-and-performance-–-part-2)提供了查看这些指标的示例。除非您的整个数据库都在内存中,否则总会有一些对磁盘的读取,目的只是保持尽可能低的读取数。 请记住您的硬件食物群并做好平衡 - 为 global 缓冲区分配更多内存会降低读取 IOPS,但可能会提高 CPU 使用率,因为您的系统现在可以在更短时间内完成更多工作。不过降低 IOPS 终归是好事,您的用户会因为更快的响应时间而更满意。 _有关如何将您的要求应用于__物理内存__,请参见下面的部分。 _ 对于虚拟服务器计划,_不要_超额预定生产虚拟机内存,_尤其是 Caché 共享内存_,更多信息也请参见下文。 您的应用程序甜蜜点是每 CPU 核心 8GB 物理内存吗? 我说不准,但要看是否有相似的方法适合您的应用程序。 不管每核心 4GB 还是 10GB, 如果您找到了另一种调整 global 缓冲区大小的方法,请在下面留下评论。 ### 监视 Global 缓冲区使用情况 Caché 实用工具 `^GLOBUFF` 可显示 global 缓冲区在任意时间点的使用情况统计。 例如,按百分比显示前 25 名: do display^GLOBUFF(25) 例如,输出可能如下所示: Total buffers: 2560000 Buffers in use: 2559981 PPG buffers: 1121 (0.044%) Item Global Database Percentage (Count) 1 MyGlobal BUILD-MYDB1 29.283 (749651) 2 MyGlobal2 BUILD-MYDB2 23.925 (612478) 3 CacheTemp.xxData CACHETEMP 19.974 (511335) 4 RTx BUILD-MYDB2 10.364 (265309) 5 TMP.CachedObjectD CACHETEMP 2.268 (58073) 6 TMP CACHETEMP 2.152 (55102) 7 RFRED BUILD-RB 2.087 (53428) 8 PANOTFRED BUILD-MYDB2 1.993 (51024) 9 PAPi BUILD-MYDB2 1.770 (45310) 10 HIT BUILD-MYDB2 1.396 (35727) 11 AHOMER BUILD-MYDB1 1.287 (32946) 12 IN BUILD-DATA 0.803 (20550) 13 HIS BUILD-DATA 0.732 (18729) 14 FIRST BUILD-MYDB1 0.561 (14362) 15 GAMEi BUILD-DATA 0.264 (6748) 16 OF BUILD-DATA 0.161 (4111) 17 HISLast BUILD-FROGS 0.102 (2616) 18 %Season CACHE 0.101 (2588) 19 WooHoo BUILD-DATA 0.101 (2573) 20 BLAHi BUILD-GECKOS 0.091 (2329) 21 CTPCP BUILD-DATA 0.059 (1505) 22 BLAHi BUILD-DATA 0.049 (1259) 23 Unknown CACHETEMP 0.048 (1222) 24 COD BUILD-DATA 0.047 (1192) 25 TMP.CachedObjectI CACHETEMP 0.032 (808) 这在几个方面很有用,例如,查看有多少工作集保留在内存中。 如果你觉得此实用工具很有用,请在下面发表评论,让其他社区用户了解它为什么对您有帮助。 ## 调整例程缓冲区大小 应用程序运行的例程(包括编译的类)存储在例程缓冲区中。 调整例程缓冲区共享内存大小的目标是让所有例程代码都在例程缓冲区中加载并驻留。 与 global 缓冲区一样,从磁盘读取例程的成本很高且效率低下。 例程缓冲区的最大大小为 1023 MB。 一般来说,您希望获得的例程缓冲区比需要的多,因为将例程缓存总是可以大幅提高性能。 例程缓冲区由不同大小的缓冲区组成。 默认情况下,Caché 确定每种大小的缓冲区数量,在安装时,2016.1 的默认缓冲区为 4、16 和 64 KB。 可以更改不同大小的内存分配,但是要开始容量计划,建议保持 Caché 默认值,除非您有特殊原因需要进行更改。 有关更多信息,请参见 [Caché 文档](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=RCPF_routines)中的《Caché 参数文件参考》的“config”附录中的 routines,以及《Caché 系统管理指南》的“配置 Caché”一章中的“内存和启动设置”。 应用程序运行时,例程从磁盘加载,并存储在可容纳该例程的最小缓冲区中。 例如,如果某个例程为 3 KB,理想情况下将存储在一个 4 KB 缓冲区中,如果没有可用的 4 KB 缓冲区,则使用更大的缓冲区。 大于 32 KB 的例程将根据需要使用多达 64 KB 的例程缓冲区。 ### 检查常规缓冲区的使用 #### mgstat 指标 RouLas 了解例程缓冲区是否足够大的一个方法是 mgstat 指标 RouLas(例程加载次数和保存次数)。 一个 RouLas 是指从磁盘获取或保存到磁盘一次。 例程的加载/保存次数多可能表示存在性能问题,在这种情况下,可以增加例程缓冲区数量来提高性能。 #### cstat 如果您已将例程缓冲区增加到最大值 1023 MB,但仍然发现 RouLas 很高,那么可以使用 `cstat` 命令进行更详细的检查,以了解缓冲区中有哪些例程以及它们使用了多少内存。 ccontrol stat cache -R1 这将生成一个例程指标列表,其中包括例程缓冲区列表和缓存中的所有例程。 例如,默认安装 Caché 后,该列表的一部分如下所示: Number of rtn buf: 4 KB-> 9600, 16 KB-> 7200, 64 KB-> 2400, gmaxrouvec (cache rtns/proc): 4 KB-> 276, 16 KB-> 276, 64 KB-> 276, gmaxinitalrouvec: 4 KB-> 276, 16 KB-> 276, 64 KB-> 276, Dumping Routine Buffer Pool Currently Inuse hash buf size sys sfn inuse old type rcrc rtime rver rctentry rouname 22: 8937 4096 0 1 1 0 D 6adcb49e 56e34d34 53 dcc5d477 %CSP.UI.Portal.ECP.0 36: 9374 4096 0 1 1 0 M 5c384cae 56e34d88 13 908224b5 %SYSTEM.WorkMgr.1 37: 9375 4096 0 1 1 0 D a4d44485 56e34d88 22 91404e82 %SYSTEM.WorkMgr.0 44: 9455 4096 0 0 1 0 D 9976745d 56e34ca0 57 9699a880 SYS.Monitor.Health.x 2691:16802 16384 0 0 7 0 P da8d596f 56e34c80 27 383da785 START etc etc 上面第 2 行中的“rtns/proc”表示,默认情况下,每种大小的缓冲区可以缓存 276 个例程。 使用此信息来调整例程缓冲区大小的另一种方法是,运行应用程序并使用 cstat -R1 列出正在运行的例程。 然后可以计算使用中的例程大小,例如将此列表放在 Excel 中,按大小排序,并精确地查看有哪些例程正在使用中。 如果每种大小的缓冲区没有被全部使用,则说明有足够的例程缓冲区,或者如果每种大小的缓冲区都已全部使用,则需要增加例程缓冲区,或者可以更直接地配置每个存储桶的大小。 ## 锁表大小 locksiz 配置参数是为管理并发控制锁而分配的内存大小(以字节为单位),该锁用于防止不同的进程同时更改一个特定的数据元素。 在内部,内存中的锁表包含当前锁,以及持有这些锁的进程的信息。 由于用于分配锁的内存取自 GMHEAP,所以用于锁的内存不能超过 GMHEAP 中的内存。 如果增加 locksiz 的大小,请按照下面 GMHEAP 部分中的公式增加 GMHEAP 的大小以进行匹配。 有关应用程序使用锁表的信息可以使用系统管理门户 (SMP) 进行监视,或者更直接地使用 API 来监视: set x=##class(SYS.Lock).GetLockSpaceInfo()。 该 API 返回三个值:“可获空间、可用空间、已用空间”。 检查可用空间和已用空间可粗略计算合适的值(某些锁空间为锁结构预留)。 更多信息,请参见 [Caché 文档](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=RCPF_locksiz)。 注:如果编辑 locksiz 设置,更改会立即生效。 ## GMHEAP GMHEAP(通用内存堆)配置参数定义为:Caché 的通用内存堆的大小(以 KB 为单位)。 锁表、NLS 表和 PID 表也是根据它来进行分配的。 注:更改 GMHEAP 需要重启 Caché。 为了帮助您确定应用规模,可以使用 API ​​来检查 GMHEAP 的使用信息: %SYSTEM.Config.SharedMemoryHeap 该 API 还提供获取可用的通用内存堆的功能,并推荐了用于配置的 GMHEAP 参数。 例如,`DisplayUsage` 方法显示每个系统组件使用的所有内存以及可用堆内存的数量。 更多信息,请参见 [Caché 文档](http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=RCPF_gmheap#RCPF_B172591)。 write $system.Config.SharedMemoryHeap.DisplayUsage() 要了解任何时间点的 GMHEAP 使用情况和建议,可以使用 `RecommendedSize` 方法。 但是,您将需要多次运行该方法才能为系统建立基线和建议。 write $system.Config.SharedMemoryHeap.RecommendedSize() `经验法则:`再次说明,您的应用情况会有所不同,但仍可以使用以下选项之一来开始调整大小: (最小 128MB)或(64 MB * 核心数)或(2 倍 locksiz)或采用其中较大者。 记住,必须调整 GMHEAP 的大小以包括锁表。  # 大页内存 Mark Bolinsky 写了一篇非常好的帖子,解释了为什么[在 Linux 中开启大页内存可大幅提高性能](https://community.intersystems.com/post/linux-transparent-hugepages-and-impact-caché)。 ## 危险! Windows 大页内存和共享内存 Caché 在所有平台上的所有版本都使用共享内存,它可以大幅提高性能,包括在 Windows 中也总是使用,但您需要注意一些特定于 Windows 的问题。 Caché 在启动时会分配一大块共享内存,用于数据库缓存(global 缓冲区)、例程缓存(例程缓冲区)、共享内存堆、日志缓冲区和其他控制结构。 在 Caché 启动时,可以使用小页或大页来分配共享内存。 在 Windows 2008 R2 及更高版本中,Caché 默认使用大页,但如果系统已长时间运行,由于内存已碎片化,可能无法在 Caché 启动时分配连续内存,Caché 可能会改用小页。 意外地以小页启动 Caché 可导致 Caché 启动时的共享内存小于配置中定义的值,或者 __Caché 可能需要很长时间才能启动或启动失败__。 我在具有故障转移集群的站点上看到过这种情况,这些站点中的备份服务器已经很长时间没有用作数据库服务器了。 ` 提示:`一种缓解策略是定期重启离线的 Windows 集群服务器。 另一个策略是使用 Linux。 # 物理内存 物理内存取决于处理器的最佳配置。 不良的内存配置可能会严重影响性能。 ## 英特尔内存配置最佳实践 以下信息只适用于__英特尔__处理器。 请与供应商确认哪些规则适用于其他处理器。 决定 DIMM 最优性能的因素包括: - DIMM 类型 - DIMM rank - 时钟速度 - 相对于处理器的位置(最近/最远) - 内存通道数 - 所需的冗余功能。 例如,在 Nehalem 和 Westmere 服务器(至强 5500 和 5600)上,每个处理器有三个内存通道,因此应以三个为一组的方式安装内存。 对于当前处理器(例如 E5-2600),每个处理器有四个内存通道,因此应以四个为一组的方式安装内存。 当存在不平衡的内存配置时(没有以三个/四个为一组的方式安装内存,或者内存 DIMM 的大小不同),不平衡的内存可能导致 23% 的内存性能损失。 请记住,Caché 的特点之一是在内存中进行数据处理,因此获得最佳的内存性能很重要。 另外值得注意的是,为了获得最大带宽,应该为服务器配置最快的内存速度。 对于至强处理器,只有每通道多达 2 条 DIMM 时才支持最大内存性能,因此对于常见的具有 2 个 CPU 的服务器来说,最大内存配置取决于包括 CPU 频率和 DIMM 大小(8GB、16GB 等)在内的因素。 `经验法则:` - 使用平衡的平台配置:为每个通道和每个插槽填充相同数量的 DIMM - 在整个平台中使用相同的 DIMM 类型:相同的大小、速度和 rank 数。 - 对于物理服务器,根据这些英特尔处理器最佳实践,将主机服务器的物理内存总数四舍五入到自然断点 - 64GB、128GB 等。 # VMware 虚拟化注意事项 我会在将来另写一篇帖子来继续介绍虚拟化 Caché 的更多准则。 不过,内存分配应考虑以下关键规则: `规则:`在生产系统上设置 VMware 内存预留。 如上文所述,Caché 在启动时会分配一大块共享内存,用于 global 和例程缓冲区、GMHEAP、日志缓冲区和其他控制结构。 您想要避免任何共享内存交换,所以将_生产数据库虚拟机_内存预留设置为至少是 Caché 共享内存的大小加上 Caché 进程和操作系统及内核服务的内存。 如果有疑问,请预留全部生产数据库虚拟机内存。 一般来说,如果在相同系统上混合使用生产服务器和非生产服务器,则不要在非生产系统上设置内存预留。 让非生产服务器争夺剩下的内存 ;)。 VMware 通常将具有 8 个以上 CPU 的虚拟机称为“怪兽虚拟机”。 高事务 Caché 数据库服务器通常是怪兽虚拟机。 在怪兽虚拟机上设置内存预留还有其他考虑因素,例如,如果要迁移某个怪物虚拟机进行维护,或者由于高可用性触发重启,那么目标主机服务器必须有足够的可用内存。 我会在将来的帖子中讨论这方面的计划策略,以及其他内存考虑因素,如计划充分利用 NUMA。 # 总结 这是对内存进行容量计划(一个混乱的领域)的开始,当然不像调整 CPU 规模那样明确。 如果您有任何疑问或意见,请留下评论。 发布本帖后,我将去参加 Global Summit 2016。 如果您今年也参加,欢迎观看我的两场关于性能主题的演讲,我也很乐意在开发者区域与您当面交流。
文章
Michael Lei · 五月 12, 2021

InterSystems 数据平台和性能 – 第 3 篇:聚焦 CPU

本周,我将关注 CPU - 主要硬件食物群之一 :) 一位客户请我就以下情况提供建议:他们的生产服务器已接近使用寿命终止,是时候更新硬件了。 他们还考虑通过虚拟化来整合服务器,并希望适当调整裸机或虚拟机的容量规模。 今天我们将关注 CPU,在后面的帖子中,我将介绍适当调整其他主要食物群(内存和 IO)规模的方法。 所以问题是: - 如何将五年多以前对处理器的应用要求转换成针对当今的处理器? - 目前的处理器有哪些是合适的? - 虚拟化如何影响 CPU 容量计划? 2017 年 6 月添加: 要深入了解 VMware CPU 注意事项和规划的细节,以及一些常见问题,另请查看以下帖子:[虚拟化大型数据库 - VMware cpu 容量计划](https://community.intersystems.com/post/virtualizing-large-databases-vmware-cpu-capacity-planning) [本系列其他帖子的列表](https://cn.community.intersystems.com/post/intersystems-数据平台的容量规划和性能系列文章) # 使用 spec.org 基准比较 CPU 性能 要针对使用 InterSystems 数据平台(Caché、Ensemble、HealthShare)构建的应用程序在不同的处理器类型之间转换 CPU 使用率,可以使用 SPECint 基准作为可靠标准,来粗略计算处理器之间的伸缩性。 [http://www.spec.org](http://www.spec.org) 网站提供了一套标准化基准测试的可信结果,这些测试由硬件供应商运行。 具体来说,SPECint 是一种在同一供应商的不同处理器型号之间以及在不同供应商(例如戴尔、惠普、联想以及英特尔、AMD、IBM POWER 和 SPARC)之间比较处理器的方法。 当需要升级硬件时,或者要将您的应用部署在一系列不同的客户硬件上,而您需要为规模调整指标设置基准(例如英特尔至强 E5-2680 或所选任何处理器的每个 CPU 核心的峰值事务数)时,可以使用 SPECint 来了解您的应用的预期 CPU 要求。 SPECint 网站上使用了多个基准,不过 **SPECint_rate_base2006** 结果最适合 Caché,而且根据多年的客户数据研究和我们自己的基准测试,这一点已得到确认。 在本帖的示例中,我们将比较客户的戴尔 PowerEdge 服务器(运行英特尔至强 5570 处理器)与当前的戴尔服务器(运行英特尔至强 E5-2680 V3 处理器)之间的差异。 当英特尔至强 V4 服务器处理器普遍可用(本帖写于 2016 年初,预计很快就会上市)时,可以应用同样的方法。 ## 示例:比较处理器 在 spec.org 的 __SPECint2006_Rates__ 数据库中搜索处理器名称,例如 __E5-2680 V3__,如果目标服务器品牌和型号已知(例如戴尔 R730),可以进一步优化搜索结果,否则请使用流行的供应商。我发现戴尔或惠普的型号是很好的标准服务器基准,不同供应商硬件上的处理器之间通常不会有太大差异。 > 在本帖的最后,我逐步演示了一个使用 spec.org 网站搜索结果的示例。 假设您已搜索 spec.org,并找到现有服务器和一个可能的新服务器,如下所示: 现有:戴尔 PowerEdge R710,搭载至强 5570 2.93 GHz:8 个核心,双芯片,4 个核心/芯片,2 个线程/核心: __SPECint_rate_base2006 = 251__ 新服务器:PowerEdge R730,搭载英特尔至强 E5-2680 v3,2.50 GHz:24 个核心,双芯片,12 个核心/芯片,2 个线程/核心: __SPECint_rate_base2006 = 1030__ 不出所料,新 24 核服务器的 SPECint_rate_base2006 基准吞吐量是旧 8 核服务器的 4 倍以上,即使新服务器的时钟速度较低。 请注意,示例中的两台双处理器服务器均已插满处理器插槽。 ### 为什么对 Caché 使用 SPECint_rate_base2006? spec.org 网站上有各种基准的解释,但总结起来就是 **SPECint_rate2006** 基准是一个完整的系统级基准,通过超线程使用所有 CPU。 对于具体的 SPECint_rate2006 基准,会报告两个指标:_base_ 和 _peak_。 base 是保守的基准,peak 则更为激进。 要进行容量计划,请使用 __SPECint_rate_base2006__ 结果。 ## 四倍的 SPECint_rate_base2006 是否意味着四倍的用户或事务容量? 如果全部 24 个核心均被使用,应用吞吐量可能会扩展为旧服务器容量的四倍。 不过,有几个因素可能会导致不同情况。 SPECint 将提供大致可能的规模和吞吐量结果,但有几点注意事项。 在上面的示例中,虽然 SPECint 给出了两台服务器之间的明确比较,但并不保证 E5-2680 V3 服务器的峰值并发用户容量或峰值事务吞吐量比基于至强 5570 的旧服务器多 75%。 其他因素也会起作用,例如食物群中的其他硬件组件是否已升级,新存储或现有存储是否能满足吞吐量的增长(我很快会写一篇深入探讨存储的帖子)。 根据我对 Caché 进行基准测试的经验和对客户性能数据的研究,随着计算资源(CPU 核心)的增加,__在单台服务器上,Caché 能够线性扩展到极高的吞吐率__,而且 Caché 每年都在改进,性能会进一步提高。 换句话说, 随着 CPU 核心的增加,最大应用吞吐量(例如,应用事务数或 Caché gloref 中反映的值)会线性扩展。 但是,如果存在应用瓶颈,它们可能在较高的事务处理速率下出现,并影响线性扩展。 在以后的帖子中,我将介绍在哪里查找应用瓶颈的症状。 要提高应用性能,最好的方法之一是将 Caché 升级到最新版本。 > **注:**Caché 不支持具有超过 64 个逻辑核心的 Windows 2008 服务器。 例如,40 核服务器必须禁用超线程功能。 对于 Windows 2012,支持多达 640 个逻辑处理器。 Linux 上没有任何限制。 ## 应用需要多少个核心? 应用各不相同,并且您知道自己的应用情况,但在为服务器(或虚拟机)规划 CPU 容量时,我常用的方法是通过连续的系统监视来了解某个“标准”处理器的特定数量的 CPU 核心可以维持的峰值事务速率:每分钟 _n_ 个事务。 这些事务可能是情节、遭遇、实验室测试或您的世界中任何有意义的事情。 重点是,标准处理器的吞吐量基于您在当前系统或客户系统上收集的指标。 如果您知道已知的具有 _n_ 个核心的处理器当前的峰值 CPU 资源使用情况,您可以使用 SPECint 结果将其转换为较新或不同的处理器实现相同事务处理速率所需的核心数量。 如果预期的线性扩展结果是每分钟 2 x _n_ 个事务数,则大致相当于需要 2 倍的核心数量。 ## 选择处理器 正如您从 spec.org 网站或从首选供应商产品中所见,有许多处理器选择。 本示例中的客户对英特尔很满意,因此如果我坚持推荐当前的英特尔服务器,那么一种方法是力求“物有所值”- 或者每美元和每核心的 SPECint_rate_base2006 分数。 例如,下图绘制了戴尔商用服务器的性能价格图表,您的价格表可能有所不同,但这说明在价格和适合使用虚拟化整合服务器的高核心数中存在着甜蜜点。 我是通过先确定生产服务器(例如戴尔 R730)的价格,然后查看不同的处理器选项来制作这份图表的。 ![mo](https://community.intersystems.com/sites/default/files/inline/images/005_specint_compare_500.png) 根据图表中的数据和客户站点的经验,E5-2680 V3 处理器显示出良好的性能以及按 SPECint 或按核心计算的出色价格点。 其他因素也在起作用,例如,如果您正在寻找用于虚拟化部署的服务器处理器,以更高的成本增加每个处理器的核心数可能反而更实惠,因为这样做的效果是减少了支持所有虚拟机所需的主机服务器总数,从而节省了按处理器插槽进行授权的软件(例如 VMware 或操作系统)成本。 您还必须根据高可用性 (HA) 要求来平衡主机数量。 我将在以后的帖子中重新讨论 VMware 和 HA。 例如,由三台 24 核主机服务器组成的 VMware HA 集群可提供良好的可用性和强大的处理能力(核心数),允许运行各种灵活配置的生产和非生产虚拟机。 请记住,VMware HA 的规模是 N+1 台服务器,因此三台 24 核服务器相当于总共 48 个核心可用于虚拟机。 ## 核心数与 GHz - 哪个更适合 Caché? 如果在更快的 CPU 核心与更多的 CPU 核心之间进行选择,您应该考虑以下几点: - 如果您的应用需要许多 cache.exe 线程/进程,那么更多核心将允许更多线程/进程同时运行。 - 如果您的应用进程较少,您希望每个进程都尽可能快地运行。 另一种考虑方式是,如果您的客户端/服务器应用有许多进程,假设每个并发用户一个(或多个),那么您需要更多可用核心。 对于使用 CSP 的基于浏览器的应用程序,用户被绑定到数量较少但非常繁忙的 CSP 服务器进程,那么您的应用程序将受益于数量可能较少但速度更快的核心。 在理想情况下,假设当多个 cache.exe 进程在所有核心中同时运行时没有资源争用,则两种应用程序类型都将受益于多个快速核心。 上文已叙述,但值得重申的是,每个 Caché 版本在 CPU 资源使用方面都有改进,因此将应用程序升级到最新版的 Caché 确实可以从更多的可用核心中受益。 另一个关键考虑事项是在使用虚拟化时最大程度地增加每个主机的核心数。 单个虚拟机的核心数量可能不高,但综合来看,您必须在可用性所需的主机数量与最大程度地减少主机数量(为了管理和成本考虑,通过增加核心数量来实现)之间取得平衡。 ## VMware 虚拟化和 CPU 在配合使用当前服务器和存储组件的情况下,VMware 虚拟化很适合 Caché。 通过遵循与物理容量计划相同的规则,在正确配置的存储、网络和服务器上使用 VMware 虚拟化不会有明显的性能影响。 较新型号的英特尔至强处理器对虚拟化的支持更好,具体来说,您只应考虑在英特尔至强 5500 (Nehalem) 及更高版本(即英特尔至强 5500、5600、7500、E7 系列和 E5 系列)上进行虚拟化。 --- # 示例:硬件更新 - 计算最低 CPU 要求 如果我们考虑这样一个示例:对在具有 8 个核心(两个 4 核至强 5570 处理器)的戴尔 PowerEdge R710 上运行的工作负载进行服务器升级,那么将上述提示和程序结合在一起。 通过绘制客户的主生产服务器的当前 CPU 利用率,我们看到,服务器在当天最繁忙时段的峰值不到 80%。 运行队列没有压力。 IO 和应用也表现良好,因此不存在人为抑制 CPU 的瓶颈。 ![mo](https://community.intersystems.com/sites/default/files/inline/images/total_processor_time_500.png) > **经验法则**:首先在考虑到预期增长(例如用户数/事务数增长)的前提下调整系统规模,使得在硬件寿命结束时的最大 CPU 利用率为 80%。 这样可以容许出乎预期的增长、异常事件或意外的活动激增。 为了使计算更清楚,我们假设在新硬件的生命周期内,预计吞吐量不会有任何增长: 每核心的扩展可以计算为:(251/8) : (1030/24),或者每核心吞吐量增长 26%。 **8 核心**旧服务器上的 80% CPU 大致相当于新的 **6 核心** E5-2680 V3 处理器上的 80% CPU。 因此,6 个核心即可支持相同数量的事务。 客户有几个选择,他们可以购买新的裸机服务器以满足 6 核 E5-2680 V3 或相同 CPU 核心数的最低 CPU 要求,或者继续推进在 VMware 上虚拟化生产工作负载的计划。 虚拟化对于利用服务器整合、灵活性和高可用性更有意义。 由于我们已经得出 CPU 要求,客户可以放心地继续在 VMware 上适当调整生产虚拟机的规模。 另外,目前低核心数的服务器很难采购到或者价格昂贵,这使得虚拟化更具吸引力。 如果预期有显著增长,虚拟化也是一个优势。 可以根据前几年的增长来计算 CPU 要求。 在持续监视的前提下,一个有效策略是只在出现资源需求之前才添加额外资源。 --- # CPU 和虚拟化注意事项 正如我们所看到的,Caché 生产系统的规模根据实际客户站点的基准测试和测量结果来确定。 通过裸机监视来确定 VMware 虚拟 CPU (vCPU) 的规模需求也是有效的。 与裸机相比,使用共享存储的虚拟化所增加的 CPU 开销非常小**。 对于生产系统,使用的策略是将系统初始规模调整为与裸机 CPU 核心数相同。 __**注:__对于 VMware VSAN 部署,必须添加 10% 的主机级 CPU 缓冲区才能进行 VSAN 处理。 虚拟 CPU 分配应考虑以下关键规则: __建议:__分配的 vCPU 数量不要超过满足性能需求的安全数量。 - 虽然可以为虚拟机分配大量 vCPU,但最佳做法是不要分配超过所需数量的 vCPU,因为管理未使用的 vCPU 会有性能开销(通常很小)。 这里的关键是定期监视系统,以确保虚拟机的规模合适。 __建议:__生产系统,特别是数据库服务器,按 1 个物理 CPU = 1 个虚拟 CPU 进行初始规模设置。 - 生产服务器,特别是数据库服务器预计将被高度利用。 如果需要六个物理核心,则设置六个虚拟核心的规模。 另请参见下文关于超线程的说明。 ## 超额预定 通过超额预订方法,可以将比物理主机上可用资源更多的资源分配给该主机支持的虚拟服务器。 通常,可以通过超额预定虚拟机中的处理、内存和存储资源来整合服务器。 运行生产 Caché 数据库时,仍然可以对主机进行超额预定,但是对于_生产_系统的初始规模设置,假定 vCPU 能够完全发挥核心能力。 例如,如果您有一台 24 核(2 个 12 核)E5-2680 V3 服务器 – 总共多达 24 个 vCPU 的容量规模,且可能还有余量可供整合。 此配置假定在主机级别启用了超线程。 在您花时间监测应用程序、操作系统和 VMware 在峰值处理期间的性能后,您可以决定是否进行更高度的整合。 如果混合非生产虚拟机,要计算 CPU 核心总数,我经常使用的系统规模调整经验法则是_最初_将非生产虚拟机的物理 CPU 与虚拟 CPU 的比例调整为 2:1。 但是,这并不是绝对的,具体情况可能各不相同,需要监视来帮助您进行容量计划。 如果您有疑问或没有经验,可以在主机级别或使用 vSphere 配置将生产虚拟机与非生产虚拟机分开,直到了解工作负载为止。 VMware vRealize Operations 和其他第三方工具能够随时间监视系统,并可提供整合建议或发出虚拟机需要更多资源的提醒。 在将来的帖子中,我将讨论更多可用于监视的工具。 最重要的是,在我们的客户示例中,他们可以确信他们的 6 vCPU 生产虚拟机会很好地工作,当然前提是其他主要食物群组件(如 IO 和存储)有足够容量 ;) ## 超线程和容量计划 根据物理服务器的已知规则调整虚拟机规模的一个良好起点是,针对启用了超线程功能的目标处理器计算物理服务器 CPU 要求,然后简单地进行转换: > 一个物理 CPU(包括超线程)= 一个 vCPU(包括超线程)。 一个常见的误解是,超线程以某种方式使 vCPU 容量增加了一倍。 这对于物理服务器或逻辑 vCPU 来说并不正确。 根据经验,开启超线程的裸机服务器可能比未开启超线程的相同服务器多提供 30% 的性能。 同样的 30% 规则也适用于虚拟化的服务器。 ## 授权和 vCPU 在 vSphere 中,您可以将虚拟机配置为具有一定数量的插槽或核心。 例如,如果您有一个双处理器虚拟机,可以将其配置为具有两个 CPU 插槽,或者具有单个插槽,但支持两个 CPU 核心。 从执行的角度看,并没有多大区别,因为虚拟机监控程序将最终决定虚拟机是在一个还是两个物理插槽上执行。 但是,指定双 CPU 虚拟机实际有两个核心而不是两个插槽,会对非 Caché 软件许可证产生影响。 --- # 总结 在本帖中,我概述了如何使用 SPECint 基准结果比较不同供应商、服务器或型号的处理器。 以及如何根据性能和体系结构进行容量计划和选择处理器,而不管是否使用虚拟化。 这些都是很深的主题,很容易陷入牛角尖... 不过,与其他帖子一样,如果您想要转移到其他方向,请评论或提问。 — # 示例:搜索 SPECint_rate2006 结果。 #### 下图显示了如何选择 SPECint_rate2006 结果。 ![mo](https://community.intersystems.com/sites/default/files/inline/images/001_specint_menu_500.png) ---- #### 使用搜索屏幕缩小结果范围。 #### 请注意,您还可以将所有记录转储为一个大约 20MB 的 .csv 文件,以进行本地处理,例如使用 Excel 处理。 #### 搜索的结果显示戴尔 R730。 ![mo](https://community.intersystems.com/sites/default/files/inline/images/003_specint_result_1_500.png) ![mo](https://community.intersystems.com/sites/default/files/inline/images/003_specint_result_2_500.png) --- #### 选择 HTML 以提供完整的基准结果。 ![mo](https://community.intersystems.com/sites/default/files/inline/images/004_specint_html_500.png) --- 在我们的示例中,您可以看到以下服务器及处理器结果。 戴尔 PowerEdge R710,2.93 GHz:8 个核心,双芯片,4 个核心/芯片,2 个线程/核心 至强 5570:__SPECint_rate_base2006 = 251__ PowerEdge R730(英特尔至强 E5-2680 v3,2.50 GHz),24 个核心,双芯片,12 个核心/芯片,2 个线程/核心 至强 E5-2680 v3:__SPECint_rate_base2006 = 1030__
公告
Claire Zheng · 六月 22, 2021

畅聊吧!来Discord加入InterSystems开发者社区!

亲爱的社区开发者们,大家好! 你可能已经听说过Discord,很多人或许已经是Discord的资深用户了。此刻我们邀请您走近InterSystems技术的世界,加入我们的开发人员社交俱乐部! 用一种超级便捷的方式交流沟通: 💥 Discord:InterSystems开发者社区 💥 在开发者社区Discord Server上, 你会发现许多与intersystems相关的频道和讨论,以及日常生活对话的频道。只要加入我们的俱乐部,就能更接近InterSystems开发者的世界! 约起来,在 Discord:InterSystems开发者社区 与您相聚✌️ 如果您对提升Discord Server有任何建议,或者想在某个特定话题上创建一个新频道,欢迎在评论中分享:)
问题
Michael Lei · 五月 13, 2021

是否有任何Spark或Kafka连接InterSystems Iris Source?

我找不到在Internet上连接到InterSystems Iris的spark或Kafka的情况。是否可以共享任何相关资源? InterSystems 提供一个专门的 Spark connector. Documentation. 当然也可以用 JDBC 驱动 以下是一些IRIS--Kafka 互操作性的例子: PEX Demo Kafka demo
文章
Michael Lei · 四月 24, 2021

置顶--InterSystems 中文开发者社区精华文章集锦

欢迎大家将相关的经验在这个讨论区分享。 板块 文章列表 征文大赛作品集锦 2022年首届InterSystems 技术征文大赛集锦 官方文档 我司即将推出中文官方文档门户,欢迎大家把需要的官方文档发在评论区,我们会优先发布。谢谢! IRIS 2021 最新技术文档 First Look 1 技术概要 IRIS 2021 中文文档PDF下载 基础知识与概念 InterSystems-常用术语 多语言字符集系列文章--第一篇 多语言字符集和相关标准简史 基础系列--第一章 SQL中使用的符号 基础系列--Object Script 基础知识(一) 基础系列--InterSystems SQL 的使用 - 第一部分 - 架构及特性介绍 基础系列--WebGateway系列(1): Web Gateway介绍 基础系列 DeepSee 的开发 - 第一部分 - Cube 基础系列--访问IRIS数据平台的四种方式 在集成产品中压缩解压文件 无代码实现SQL业务服务和业务操作 运维与常见问题 InterSystems 最佳实践系列文章 IRIS/Healthconnect-高可用机制-mirror-的配置 系统运维、管理常见问题FAQ系列 运维好文--InterSystems 数据平台互操作功能运行维护管理基础 运维好文--集成平台实例中有哪些文件在占用磁盘? 安全、等保、审计相关系列 虚拟化大型数据库 - VMware CPU 容量规划 InterSystems 数据平台的容量规划和性能系列文章 已经解决的问题清单 使用Prometheus监控Cache集群 医院信息化建设实战教程:如何在不允许使用Git的情况下自动备份代码/自动执行代码? 开发与创新 CDC系列:使用Dejournal Filter在InterSystems IRIS/Caché上通过Mirroring实现CDC功能实操--HealthConnect中创建HTTP服务创新--基于Docker的一体化集成AI环境中部署机器学习/深度学习模型 创新--面向 Google Cloud Platform (GCP) 的 InterSystems IRIS 示例参考架构 创新--在 Windows 主机上运行的 Hyper-V Ubuntu 虚拟机中配置 Docker 使用环境 创新-- 新一代医疗数据互操作标准FHIR系列文章 科研--用IRIS IntegratedML(一体化机器学习)来预测肾病的Web应用 IRIS如何进行CRUD操作 如何调用Ensemble/IRIS内置的HL7 V2 webservice - Java,PB9,Delphi7样例 IRIS与Caché的23种设计模式 10分钟快速开发一个连接到InterSystems IRIS数据库的C#应用 SQLAlchemy - 将 Python 和 SQL 与 IRIS 数据库一起使用的最简单方法 物联网 (IOT) 在 InterSystems IRIS 平台上的应用 本地化 Caché实现SM3密码杂凑算法 在国产系统上安装Healthconnect2021 HEALTHSHARE2018版如何实现AES(CBC)的HEX输出,并可以实现加密和解密 行业观察与洞见 精华文章--《数据二十条》的号角声 论集成标准的选择对医院信息集成平台建设的影响 医疗行业的生态创新:如何实现数据利用和应用创新 精华文章--从软件架构发展谈业务集成技术演进与展望 精华文章--漫谈应用集成的现在与未来 翻译文章:什么是智慧医院数字孪生? 医疗行业数字化转型 —谈谈微服务架构 医院数字化转型之数智底座建设思路(在陕西省数字医学数字化转型论坛上的分享) 行业前沿系列翻译文章--EPIC 电子病历系统: FHIR, API, 互操作性和资源 行业前沿--利用数据编织应对挑战,创造数据价值 医疗行业的生态创新:如何实现数据利用和应用创新 转载:Epic的Cosmos如何用去识别化的数据支持临床研究 前沿探讨--大模型GPT 对医疗行业互操作性协议的影响? 其他 社区文章汇总--跟着社区学习InterSystems 技术 产品对比——Gartner DBMS 魔力象限中的主要领先数据库产品功能对比 产品对比--企业软件的“大众点评”之最新Gartner 云数据管理系统对比,国内医疗信息行业主流的Hadoop(Cloudera)vs Oracle vs Sql Server vs InterSystems Cache 产品对比--Gartner Peer Insight 华山论剑之应用集成平台--InterSystems vs MS vs IBM 学习系列 IRIS/Healthconnect-高可用机制-mirror-的配置 跟版主学caché——大型史诗级免费技术培训caché百讲 git-github入门学习系列 IRIS 快速入门系列讲座 WebGateWay 学习系列 Intersystems IRIS for Health 数据平台医疗版最新在线培训课程 CDC系列 ISC 中国在B站培训视频 如何在社区学习? 初学者资源库 调研—— InterSystems 客户服务满意度调研(长期有效) 互操作系列 消息统一管理 孤立消息管理 HTTP服务 开发系统接口 IRIS 系列 2021版最新官方系列文档 权限管理 容量和性能规划 超融合规划 Web Gateway 数据同步和容灾系列 SOAP 服务 开发 ObjectScript 系列 Object & SQL 运维 系统运维常见问题 B站视频 其他Ensemble相关
文章
Michael Lei · 二月 8, 2022

InterSystems广播站第一期——什么是IRIS?欢迎收听!

说明 欢迎来到InterSystems广播站--数据点!在这一集里,我们和在线培训团队负责人Jenny Ames聊了聊InterSystems IRIS--稳定、灵活、可扩展、可互操作的数据平台,它为世界上许多最关键的核心应用提供支持。从它的多模型性质到它的集成引擎,再到它的医疗保健功能,在一次谈话中,有很多东西需要解读。 本期节目回放:https://datapoints.castos.com/episodes/1-what-is-intersystems-iris-jenny-ames 关于InterSystems广播站的更多信息,请访问https://datapoints.intersystems.com。 今天就试用InterSystems IRIS,请到https://www.intersystems.com/try,启动你的实例! 更多资料欢迎访问:https://gettingstarted.intersystems.com。 以下是本期对话中文全文。 德里克-罗宾逊 00:01 欢迎来到InterSystems 在线培训的播客。请确保在你最喜欢的播客应用程序上订阅播客,如Spotify、苹果播客、谷歌播放或Stitcher。你可以通过搜索 "数据点 "并点击订阅按钮来做到这一点。我是Derek Robinson,在今天的节目中,我将与InterSystems在线培训团队负责人Jenny Ames谈论InterSystems IRIS数据平台。 Derek Robinson 00:39 欢迎来到InterSystems在线培训广播站《数据点》第一集。我的名字是Derek Robinson。我是InterSystems公司的一名在线培训课程开发人员,我们学习服务部的所有人都对推出这个播客节目感到非常非常兴奋。我们有多集不同的节目将陆续推出,所以在你听完这一集后一定不要错过其他的节目。在这一集里,我将与Jenny Ames聊天。正如我在介绍中提到的,Jenny是在线培训团队负责人,她在我们的技术栈方面有超过10年的经验。因此,在我们的讨论中,我们将介绍InterSystems IRIS的基本情况,它的一些最佳功能是什么,以及她所看到的一些最佳使用案例。我们将概要地聊聊这个产品是什么,它的一些医疗行业的扩展是什么,以及它如何能够真正帮助你作为一个开发者的应用开发,开发数据驱动和数据密集型应用。闲话少说,下面是我对Jenny Ames的采访。 德里克-罗宾逊 01:36 欢迎Jenny Ames来到播客室,她是InterSystems在线培训服务的团队负责人。Jenny,你好吗? 珍妮-艾姆斯 嗨,德里克。我很好。你呢? 德里克-罗宾逊 好。我也很好。我们很高兴推出InterSystems广播站--数据点,并邀请你作为我们的首批嘉宾之一,在这里谈论InterSystems IRIS,以及它对于那些可能不知道的人来说是什么,还有对于那些有兴趣了解更多的InterSystems用户,以及我们技术栈的背景。首先,请您先介绍一下自己,让我们知道你在InterSystems是做什么的,你在这里工作了多长时间,以及你在InterSystems世界的经验? Jenny Ames 02:07 当然,是的。所以我在2020年6月份刚刚庆祝了10年。前五年,我是一名培训讲师,培训我们大部分的产品。Caché、Ensemble、Health Connect以及大部分的HealthShare课程,我非常喜欢这些课程,但是一些生活上的变化意味着我想在这里多待一会儿,所以在过去的五年半里,我一直在做在线培训。 德里克-罗宾逊 02:33 不错。这真是太棒了。所以你显然非常适合我们今天要讨论的问题。那么,让我们从InterSystems IRIS数据平台是什么这个问题开始,好吗?您可以先为那些从未见过它的听众用一个概要性的例子或描述一下IRIS吗?然后我们可以更详细地去了解它的一些功能是什么。所以,如果我今天在电梯里看到你,问你什么是InterSystems IRIS,你会怎么回答? Jenny Ames 02:58 好的,我喜欢把InterSystems IRIS分成三个主要部分。首先它是一个强大的数据库,可以存储、检索数据。它有一个内置的开发环境来构建业务逻辑。同时它也是一个集成引擎,所以你可以在不同的系统之间非常容易地分享数据,进行互联互通,有一些很好的用户界面UI可以帮助你快速地做到这一点,而无需太多的代码。你也可以定制它,因为我们有很好的数据库层面的支持。然后,它也是一个数据分析平台,你可以建立机器学习模型来显示仪表盘和分析数据,以真正使你的数据有意义,并且持续在这个基础上建立新的分析。我们还包含了自然语言处理NLP功能。可以分析大段的文本,找到积极的东西或总结文本。 Derek Robinson 03:52 是的。在今天,整合不断的信息流从各种不同的来源进入你的应用程序,这变得越来越重要,真实世界并不总是像传统的关系型数据库中那样严谨地定义属性和排列,那需要你知道所有的属性和一切,对吗?所以你总整体上总结了这三个方面。下面,让我们从数据库部分开始,因为我认为任何要建立一个数据密集型应用程序的应用开发者都需要从数据库开始,对吗?比如他们需要他们的数据在某个地方。那么,在进入其他功能之前,仅从数据库的角度来看,InterSystems IRIS与人们可以选择的其他数据库相比有什么区别? Jenny Ames 04:30 是的,这是个好问题。首先,我们在InterSystems IRIS中内置了一些逻辑,所以你可以直接利用来建立业务。如果你熟悉Caché,这是我们已经推出一段时间的产品之一,IRIS里有一些新的东西是一些语言的互操作性部分,所以你仍然可以利用你其他用Java.net、Python或Node.js构建的应用程序,然后与InterSystems IRIS的数据库平台进行整合。但我想说的是,真正让它脱颖而出的特性是可靠性。我们在全球主流市场,比如医疗、金融,我们能成功的主要原因就是因为它的可靠性。这是因为我们拥有的可靠性和内置的安全性。 Derek Robinson 05:27 对,没错。因此,对于任何使用数据库来建立他们的应用程序和托管他们的数据并真正能够使用他们的数据的人来说,那里有一些好的元素和好的要求。还有一点,我想谈谈,我知道这与语言的互操作性有一点关系,当涉及到为你的数据库使用不同的模型时,也是模型的灵活性。我知道,当我们在活动中与开发人员交谈时,有时会让他们停下来说,等等,告诉我更多关于这个问题。所以,请给我一个快速的例子,描述一下InterSystems IRIS在数据库层面的多模型能力。 Jenny Ames 06:00 是的。因此,多模型......大多数数据库都选择支持一种模型,无论是对象型数据库还是关系型数据库。而我们认为,为什么要选择?通过对象访问或通过二维表来访问数据有不同的原因。从像Java这样的东西来看,它已经是一个对象模型。所以能够直接保存一个对象是一个巨大的好处,因为它既节省了开发者的时间,也节省了转化时间, 它不必将数据转化为关系型、转化为行就能够做到这一点。但是做一些事情,比如说,选择所有在一家公司工作的人,这种数据用关系型模型来做就真的很容易。因此,我们的设计理念,是使用对每项任务最有效的模型,然后将其全部整合到一个应用程序和平台中。 Derek Robinson 06:45 对。不需要为了解决同一问题或者问题中的不同变化而建立或重复不同的方法,这真的很酷。顺便说一句,沿着这个话题,我想未来的一集可能会涉及到更深层次的内容,即我们的Global和有效的工作方式。我想到了一两个人,他们会很好地解释InterSystems的这些概念,但要更多地讨论InterSystems和InterSystems产品的整体形象。我知道我们以前参加过一些活动,人们会看到我们的商标,看到我们的品牌,然后他们就把InterSystems归类到到医疗行业。对吗?看起来你们是一家医疗IT公司,所以这很酷。可以再跟我说说,为什么人们不应该因为我们做医疗行业把我们只归类在医疗行业?如果有人不在医疗行业领域,有什么理由让他们不应该立即认为InterSystems真的只是医疗信息IT软件? Jenny Ames 07:38 是的。我们在医疗领域的成功是有原因的。同样,因为我们在InterSystems IRIS和其他产品中建立的可靠性、可扩展性和安全性。所以,是的,我们进入其他领域也是有原因的。因为这些功能在多个垂直领域真的很重要。比如,金融机构,你知道,钱对人们来说真的很重要,所以能够使用InterSystems IRIS和利用这些特性真的很重要。而且,就像我提到的,我在教室里的前五年,我已经看到了一些不同的使用案例,我认为我们的一些客户真的很酷。比如说有一家汽车制造公司,他们基本上是集成和处理汽车零件,并能够管理所有这些零部件数据。他们基本上从多个不同的警察辖区获取数据,这些数据以不同的格式存储,他们必须转换这些数据。把所有的数据用我们的产品管理起来,然后他们在此基础上建立了仪表盘,以便能够分析数据并利用数据本身做一些非常酷的事情。 Derek Robinson 09:00 有意思。是的,我认为你提到的最后一个用例可以作为深入讨论我们IRIS的互操作性功能的基础,对吗?我认为还有很多我们可以深入讨论的地方,比如你提到把数据转化为正确的格式。其中有一些转化是我们开始进入那些医疗行业功能的核心,也是我们在医疗行业中最需要的东西。那么,你对这部分还有什么要补充的吗? Jenny Ames 09:26 是的。我们有一些内置的功能,在医疗等行业,一些预置的组件方面确实有帮助。但我们也一直在建立更多的功能,在那里你可以做一些事情,如记录映射器,无代码集成数据等等。但同样,你也可以完全定制它,以便能够使数据具有正确的格式。但是,互操作性实际上是让我最兴奋的功能。我真的很喜欢,我实际上有很多的乐趣,建立集成,玩这个,自己学习更多。但是,是的,我真的很喜欢InterSystems IRIS的这个功能。 Derek Robinson 10:00 是的。在使用案例之前,还有一件事......我们马上要讲到医疗行业,但是经常谈到的InterSystems IRIS的其他使用案例之一是欧洲航天局,它突出了InterSystems IRIS的一些可扩展性、可靠性和处理这些数据负载的巨大能力。 这是一个我们已经谈了很多的例子。你能给我们讲讲这个用例,这个例子,以及为什么它能有效地展示InterSystems IRIS的能力? Jenny Ames 10:29 是的,欧空局使用了我们的一个产品,InterSystems IRIS也采用了其中最好的功能,非常酷。几年前有一个很好的演示,我去看了,就是他们在太空中放置的这个东西,它实际上非常小。比如你可以......你现在看不到我,但是它也许是足球大小,或者可能比它小一点。它基本上绘制了整个银河星系的地图,而且,你知道,对于亮度和速度以及所有这些不同的天体。然后它把这些数据带回来,让操作人员上分析这些数据,真正绘制银河系,这真的很酷。但是,是的,我认为这是一个非常漂亮的例子,因为它正在处理大量的数据,在“大数据”这个词被创造出来之前我们已经在做大数据,但这不是最酷的,最酷的是你拥有所有的数据能够真正发挥他们的作用。 德里克-罗宾逊 11:38 对。很好。作为对我们学习者的一点提示,要想更多地了解这些功能,一般来说,我们只是在谈论可扩展性和可靠性。在可扩展性方面,当涉及到横向扩展系统时,你真的可以看一下分片,以了解更多。我不想深究这个问题,因为我们会有关于这个问题的其他专题。对于可靠性来说,我们的可靠性是镜像技术,对吧?就像我认为你所提到的系统的可靠性,如果一个系统发生故障,也许这种镜像能力是InterSystems产品的特点之一。我有时会说IRIS,但我们谈论的确实是我们大部分的技术堆栈,这些技术对于那些可扩展性和可靠性的一些功能来说确实是最基本的。所以,在这里,我们要进入最后一个部分,也就是IRIS医疗版。InterSystems IRIS for Health是InterSystems IRIS的医疗扩展,是一个更强大的平台。请告诉我们InterSystems IRIS for Health在医疗领域的一些具体扩展功能。 Jenny Ames 12:46 是的。IRIS for Health是InterSystems的IRIS医疗版,它确实是专门为医疗行业打造的,所以它有许多预置的医疗行业特性,帮助你整合并真正为医疗行业环境建立整个数字化应用。它包括对HL7 v2等事务的预建支持,你可以根据事件引入不同的消息。我们有对FHIR的支持。有一个内置的FHIR资源库来管理所有的资源。如果你不熟悉这些术语,你可以百度一下,了解一下。实际上,我们也有一些关于它的课程,你可以参加。我们有对IHE的支持,所以我们的许多针对医疗行业的支持都是内置的,它使你更容易集成不同的数据和应用和更快搭建医疗行业应用程序。 德里克-罗宾逊 13:45 对。很好。我想说的是,珍妮提到的学习内容,即learning.intersystems.com,是我们的学习目录所在。我想这是在这些播客和所有东西的介绍中的一种。但是说到更多的学习和呼吁行动,我们在这里想谈的最后一件事是,我们一直在谈论InterSystems IRIS和InterSystems产品的整体情况。如果我们的一些听众很好奇,他们想了解更多的情况,人们如何才能尝试IRIS? 珍妮-艾姆斯 14:08 是的。我们有两个很棒的新东西可以使用。有一个 "试用IRIS实例"。这基本上是一个试用实例,你可以免费获得,如果你不注册,它可以使用24小时。但如果你注册了,你可以保留30天,这真的很不错。你可以亲身体验,里面有一些预制的样本。所以要访问这个网站,你可以去intersystems.com/try,右边有一个按钮,你可以开始编码。然后还有一个网站,实际上与此有关。在这个屏幕的左侧,有一个新的按钮,可以进入我们新的入门网站。所以,如果你去gettingstarted.intersystems.com,你可以直接去那里,同样,那里有练习和一些使用案例视频,所以你可以开始想象使用InterSystems IRIS的不同方式。 Derek Robinson 14:57 真棒!对于我们的听众,我们会把这些链接放在节目描述中,这样你就可以直接进入这些页面,无论是尝试页面还是入门页面,以真正了解InterSystems IRIS的情况。所以,Jenny Ames,今天的时间就先到这里,非常感谢你参加我们的节目,我们期待和您再次访谈。 Jenny Ames 很好。谢谢邀请! Derek Robinson 15:16 所以再次感谢Jenny加入我们,就InterSystems IRIS和InterSystems IRIS for Health进行了一次内容丰富的谈话,最后还谈到了它对开发人员构建这些数据驱动型应用程序的最大帮助,他们可能需要与其他系统的互操作性,转换你在其他应用程序之间发送或接收的数据。拥有一个非常可靠的设置,如果有什么东西发生故障,或者你需要比你目前拥有的更大的规模,可以真正依靠它。因此,与Jenny就InterSystems IRIS进行了很好的讨论,并再次感谢她。就像我在介绍中提到的,我们在目录中还有很多集,您现在就可以听,然后随着我们的发展,就像我们在预告片中提到的,我们将寻求每月做一到两集,而且真的就像我们可以从我们的专家那里获取内容一样,这就是我们的计划,能够给你提供信息和有趣的讨论,帮助大家学习更多。所以,重要的事情说三遍,你可以到intersystems.com/try或gettingstarted.intersystems.com去试试InterSystems IRIS,至于一般的学习内容,可以到learning.intersystems.com去看看我们的全部目录,同样,在你喜欢的播客应用程序上搜索Data Points并点击订阅按钮。这样,每当我们有新的节目时,你就会收到每一集。再次感谢您的收听,我们将在InterSystems广播站《数据点》节目中再见。 本期节目回放:https://datapoints.castos.com/episodes/1-what-is-intersystems-iris-jenny-ames 关于InterSystems广播站的更多信息,请访问https://datapoints.intersystems.com。 今天就试用InterSystems IRIS,请到https://www.intersystems.com/try,启动你的实例! 更多资料欢迎访问:https://gettingstarted.intersystems.com。
文章
Weiwei Gu · 三月 14, 2022

[首次使用InterSystems IRIS]-让我们来使用互操作性!

大家好! InterSystems IRIS有一个叫做互操作性Interoperability的菜单。 它提供了轻松创建系统集成的机制(适配器、记录图、BPM、数据转换等),因此不同的系统可以轻松地连接起来。 在数据中继过程中可以包括各种操作,比如:为了连接那些通常不连接的系统,可以根据目的系统的规格要求来接收(或发送)数据。另外,在发送数据之前,可以从另一个系统获取和添加信息。以及,信息可以从数据库(IRIS或其他)获取和更新。 为此,我们会撰写一系列的文章,将讨论以下主题,同时看一下示例代码,以帮助你了解它是如何工作的,以及在用互操作性整合系统时需要什么样的开发。 * How it works 它是如何工作的* What a Production is 什么是Production ?* Message 消息* Component Creation 组件的创建 * 1)Business Operations 业务操作 *2)Business Processes 业务流程*3) Business Services 业务服务 首先,介绍一下我们在这个系列中要使用的案例。 一家经营着一个购物网站的公司,目前正在改变其产品信息的显示顺序,以配合季节的变化。 然而,有些商品无论在什么季节都能卖得很好,而有些商品却在意想不到的时候卖得很好,这与目前改变顺序的显示规则不相符。 因此,我们研究了以当天的温度,而不是按季节来改变产品展示顺序的这种可能性。这就需要调查当时购买产品时的天气温度。 由于外部网络API可用于检查天气信息,我们计划在购买时收集这些天气信息,并在后来的审查数据库中登记。 这很简单,但你需要使用 "外部Web API "来收集信息,并且需要将获得的信息和购买信息结合起来,再在数据库中登记。 具体说明将在以后的相关文章中讨论(不包括创建网站)。也请大家持续关注查看! 至于我们这次使用的 "外部网络API",我们使用的是( OpenWeather的当前天气数据.) (如果你想尝试一下,你需要注册一个账户并获得一个API ID)。 下面是一个REST客户端的GET请求的结果(我们将在所应用的互操作性机制中去运行这个请求)。 ![](/sites/default/files/inline/images/image1050jp.png) The JSON of the HTTP response is as follows: ```json { "coord": { "lon": 135.5022, "lat": 34.6937 }, "weather": [ { "id": 803, "main": "Clouds", "description": "broken clouds", "icon": "04d" } ], "base": "stations", "main": { "temp": 17.05, "feels_like": 13.33, "temp_min": 16, "temp_max": 18, "pressure": 1017, "humidity": 55 }, "visibility": 10000, "wind": { "speed": 4.63, "deg": 70 }, "clouds": { "all": 75 }, "dt": 1611635756, "sys": { "type": 1, "id": 8032, "country": "JP", "sunrise": 1611612020, "sunset": 1611649221 }, "timezone": 32400, "id": 1853909, "name": "Osaka", "cod": 200 } ``` 在 下篇文章中,我们将再来讨论如何使用互操作菜单来实现系统集成。 [OpenWeather]: https://openweathermap.org/ 系列第一篇!
公告
jieliang liu · 三月 30, 2022

[视频] InterSystems ObjectScript如何使用 VS Code调试器

HI 开发者们, 我们在bilibili 发布了新的视频! 看看VS Code的InterSystems ObjectScript的调试器如何帮助你浏览和检查代码。了解如何为调试类方法和production组件编写启动配置,并获得VS Code调试器界面的概述--包括变量部分、观察窗格和调试控制台。 请欣赏并继续关注! B 站视频可以支持中文字幕:https://www.bilibili.com/video/BV1cb4y1p7RE?spm_id_from=333.337.search-card.all.click