清除过滤器
公告
jieliang liu · 四月 18, 2022
各位开发者们好,
欢迎在我们的 Bilibili 频道观看新视频:
客户选择InterSystems IRIS的原因是其强大的数据引擎的纯粹速度。为了衡量我们的引擎改进对速度的贡献,我们不断地进行性能测试,包括内部测试和使用客户的数据和工作负载的测试。在过去的一年里,这些测试表明基于SQL的应用程序的性能有了很大的提高,我们将很高兴在这个视频中告诉你更多。
收获: InterSystems IRIS提供的SQL性能会让你大吃一惊。
演讲者: @Benjamin.DeBoe, InterSystems 产品经理
本视频的其他材料,你可以在 InterSystems Online Learning Course找到。
请继续关注! 👍🏼
文章
he hf · 四月 24, 2023
SqlDbx是我们常用的数据库查询与操作工具,因其轻量且无须安装而无处不在,然而习惯了在Intersystems的CACHE和ENSEMBLE版本下使用SqlDbx在升级到IRIS版本后却无法使用了,为此进行了一系列尝试,并最终获得成功,形成本文攻略,分享给大家。
1、在SqlDbx的连接登录窗口,从DBMS Type中直接选择 “InterSystems CACHE”连接IRIS会报错,提示“通过IRISconnect失败”,说明“InterSystems CACHE”不再适用于IRIS。
2、考虑IRIS的ODBC支持,为此换一种思路,采用ODBC方式连接,此方式需要在ODBC中建立DSN。
3、从Intersystems官网https://intersystems-community.github.io/iris-driver-distribution/或github网站https://github.com/intersystems-community/iris-driver-distribution/tree/...下载InterSystems IRIS ODBC 32位驱动,注意一定要下载32位驱动(注:SqlDbx现只支持32位的ODBC)。
4、下载后直接安装即可。
5、通过Windows的控制面板找到“管理工具”,打开后找到“ODBC Data Sources (32-bit)”(注:SqlDbx现只支持32位的ODBC),在弹出的“ODBC数据源管理程序(32位)”窗口中“用户DSN”页签中选择添加DSN,在随后弹出的“数据源驱动程序”窗口中选择“InterSystems IRIS ODBC35”,点击“完成”。
6、在弹出的“InterSystems ODBC Data Source Setup”窗口中填写数据源名称、描述、主机IP、端口、命名空间、用户名、密码,检查正确无误后、点击测试连接,在弹出的窗口中科室看到连接成功结果,点击“OK”,这就基本成功啦。
7、回到“ODBC数据源管理程序(32位)”窗口,可以看到刚才成功添加的用户DSN。
8、再回到SqlDbx的连接登录窗口,从DBMS Type中选择“OBDC”,点击DSN下拉选择框的后面三个点,在弹出的选择窗口中可以看到刚才成功添加的用户DSN,选中并点击OK,DSN中出现了刚才选择的数据库服务器,点击OK,成功完成了连接登录。恭喜你,可以用SqlDbx继续对IRIS的访问和操作啦!
公告
Nicky Zhu · 三月 30, 2021
2021年3月23日 – 提醒:镜像Dejournaling的潜在数据完整性问
InterSystems 已经纠正了一个缺陷,该缺陷在极少数情况下会导致非主镜像成员的数据不一致问题。此缺陷影响到InterSystems产品的所有发布版本。
如果发生该缺陷,则会在镜像系统的正常运行中悄然发生。该缺陷的结果是,镜像成员未能删除数据库日志的子集,然后导致镜像成员之间的数据不一致。这对故障转移和异步成员都有影响。虽然这个缺陷遇到的可能性非常小,但InterSystems建议所有使用镜像的客户都要获得修正,并使用DataCheck验证镜像数据库的一致性。有关可能触发该缺陷的具体情况以及将遇到该缺陷的风险降至最低的步骤的更多详细信息,请联系全球响应中心(WRC)。
该缺陷的更正被确定为 SML2898、HYY2434 和 HYY2435,并将包含在所有未来的产品版本中,包括 Caché 和 Ensemble 2018.1.5 以及 InterSystems IRIS 和 InterSystems IRIS for Health 2019.1.2 和 2020.1.1。这些更正也可通过InterSystems全球响应中心(WRC)的Ad hoc分发版本获得。
如果您对这个提醒有任何疑问,请联系 Worldwide Response Center。
文章
Johnny Wang · 十二月 19, 2021
如果您经常阅读我们的博客,您可能记得去年夏天我们进行了 InterSystems 速度测试,该测试由 ESG 验证,旨在测试数据库可以同时摄取和查询的数据量,以及这表现出的具体的影响。从那以后,我们 GitHub 页面的许多访问者一直在根据自己的想法重复验证这个测试
最初,第一次数据库速度测试将 InterSystems IRIS 数据平台与来自许多不同云和数据管理供应商的流行数据库进行了比较。令人兴奋的是,我们现在可以宣布,我们已经将数据库性能测试从 SAP HANA、AWS Aurora MySQL、SAP Sybase ASE 和 AWS RDS SQL Server 扩展到包括 PostgreSQL、MariaDB 和 Oracle Enterprise,所有这些都跑在 Amazon Web Services (AWS )上面。
我们为什么要做这一次开源速度测试?
通过模拟不支持任何特定产品的多工作负载用例,速度测试往往充当了另一种数据库性能测试工具,可以根据测试结果来确定哪个数据库或数据平台最适合业务需求来做出决策。随着许多公司继续进行数字化转型并探索传统技术的替代品,这种能力被证明是至关重要的。
数据库速度测试最大的特点就是您可以轻松地在云端或您的机器上自己体验它,并且由于我们已将测试作为可定制的开源代码发布,它可以扩展到您自己的数据和查询。
许多人将其视为微服务的首选平台,开源速度测试现在也可在 Kubernetes 上运行,以响应该应用程序在 InterSystems 开发人员社区中越来越受欢迎的现状。这意味着除了能够使用 AWS 和 Amazon Elastic Kubernetes Service (EKS) 之外,开发人员还可以了解 InterSystems IRIS 如何在 Kubernetes 集群上执行并利用 InterSystems Kubernetes Operator。
InterSystems IRIS 如何与竞争对手抗衡?
数据库速度测试着眼于同步摄取和查询性能的特定用例,这是医疗、金融、供应链和制造等许多行业实时用例的基本要求。
最新速度测试的结果发现,与 AWS MariaDB 相比,InterSystems IRIS 在测试期间摄取的记录多 620.9%,到最后摄取它们的速度提高了 717.3%。将 InterSystems IRIS 与在公共云上运行的 Sybase ASE 的性能进行比较发现,InterSystems IRIS 在测试期间摄取的记录多 4862.8%,在测试结束时摄取记录的速度提高了 6733.4%。
对于任何希望对其基础架构进行现代化改造以提高实时和接近实时的数据库性能的公司,这些指标都极为重要。此外,对于那些在 SAP Sybase ASE 上运行生产应用程序的公司,InterSystems 对 Transact-SQL 的本机支持允许这些应用程序的无缝迁移,通常不需要重写自定义代码。
不要只相信我们的话,请访问我们的 GitHub 页面,亲自对 InterSystems IRIS 进行测试,或在此处了解有关速度测试如何工作的更多信息。
阅读更多关于 Amir Samary 的 InterSystems IRIS 数据平台速度测试的博客文章
阅读更多关于去年夏天我们进行的 InterSystems 速度测试
关于作者:Amir Samary
Amir Samary 已在数据库、互操作性和 InterSystems 技术方面工作了 20 多年。 Amir 致力于为使用 InterSystems 技术为阿根廷、巴西、智利、哥伦比亚、乌拉圭和美国的各个行业构建解决方案的合作伙伴、客户和开发人员提供支持。 这使 Amir 能够理解和试验不同技术、文化和基础设施现实中的模式和架构。 Amir Samary 目前担任解决方案架构经理,他领导 InterSystems 的一组解决方案开发人员。 他主修计算机科学,辅修数学。
查看原文 阅读更多关于 Amir Samary 的 InterSystems IRIS 数据平台速度测试的博客文章
阅读更多关于去年夏天我们进行的 InterSystems 速度测试
这两个还有文中的其他链接可以换成中文链接(如果有)吗?谢谢! 关于:阅读更多关于去年夏天我们进行的 InterSystems 速度测试,请查看链接:https://cn.community.intersystems.com/post/%E6%B4%9E%E5%AF%9F%E6%96%B0%E7%9A%84-intersystems-%E9%80%9F%E5%BA%A6%E6%B5%8B%E8%AF%95
谢谢! 直接在原文里改吧
文章
Claire Zheng · 一月 13, 2023
在InterSystems 2022年全球峰会上,InterSystems HealthShare 产品管理总监 Jonathan Teich 及其团队解读了医疗与医疗IT行业的趋势,并分享了HealthShare的最新产品策略与路线图,演示了一些易用且具有前瞻性的功能和用例。
公告
Claire Zheng · 九月 5, 2022
亲爱的社区开发者们,
我很高兴地向大家介绍一位我们的新版主 @Tete.Zhang (张特特)!
@Tete.Zhang (张特特) 目前任职于InterSystems中国,在WRC部门任职资深技术支持专家一职。
以下是@Tete.Zhang (张特特)的自我介绍:
在2015年夏天实习结束后,我于2016年正式作为技术支持工程师加入InterSystems,从那时起,我在InterSystems全球支持中心北美分部工作了六年,2022年,我调职至北京,服务于InterSystems中国,希望能为成长中的中国市场出一份力。
很高兴可以在社区与大家相遇,希望能与大家一起努力,创造更精彩的社区!
再次欢迎我们的新版主 @Tete.Zhang (张特特)👏🏼👏🏼👏🏼👏🏼👏🏼
期待你在DC成长为一名优秀版主!
文章
Nicky Zhu · 九月 7, 2021
本文档介绍了 XEP API,它在 InterSystems IRIS®数据平台上极其快速的 .NET 对象存储和检索支持。它向您提供了一个关于 .NET 对象持久化的 XEP 方法的进阶概述,并引导您通过一个简单的场景来演示 API 的主要功能。
这些活动被设计成只使用默认设置和功能,这样您就可以熟悉 XEP 的基本原理,而不必处理超出本概述范围的细节。有关 XEP 的完整文档,请参见 Persisting .NET Objects with InterSystems XEP (《使用 InterSystems XEP 持久化 .NET 对象》)。
要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。
快速的对象存储和检索
面向对象编程是 .NET 框架的核心,因此 .NET 应用程序将数据建模为对象是很自然的。然而,当应用程序需要将数据存储在数据库中时,这可能会导致问题。如果您使用 ADO.NET 来存储和检索对象,您就面临着将对象数据转换为一组关系表、然后再将查询结果集转换为对象的问题。这个问题的通常解决方案是使用对象-关系映射(ORM)框架,如实体框架(Entity Framework) 来自动化这个过程。InterSystems IRIS 确实提供了实体框架(Entity Framework)接口,InterSystems 推荐它用于大型、复杂的对象层次结构。另一方面,对于执行实时数据采集等任务的应用程序,主要问题是速度而不是数据复杂性。虽然实体框架(Entity Framework)绝对不慢(如果适当优化的话),但对于需要极快地存储和检索简单或中等复杂数据的任务来说,XEP 是一个更好的选择。在大多数情况下,它比实体框架(Entity Framework)或 ADO.NET 快得多。
XEP 是如何工作的?
XEP 是一个轻量级的 .NET API,它将 .NET 对象数据作为持久化事件(persistent event)来投射。持久化事件(persistent event)是 InterSystems IRIS 类的一个实例(通常是 %Persistent 的子类),包含 .NET 对象中数据字段的副本。与任何此类实例一样,可以通过对象访问、SQL 查询或直接 global 访问来检索它。
在创建和存储持久化事件(persistent event)之前,XEP 必须分析相应的 .NET 类,并将模式(schema)导入数据库。模式(schema)定义了用于存储 .NET 对象的持久化事件类的结构。如果持久化事件类不存在相应的 ObjectScript 模式,则导入模式(schema)将自动为其创建相应的 ObjectScript 模式。来自分析的信息可能是 XEP 导入简单模式所需要的全部信息。对于更复杂的结构,您可以提供额外的信息,允许 XEP 生成索引并覆盖导入字段的默认规则。 在为类创建模式(schema)之后,您可以使用各种 XEP 方法来存储、更新或删除事件、运行 SQL 查询,并通过查询结果集进行迭代。
试一试!XEP 的实际操作
现在是您自己尝试 XEP 的时候了。这个 XepSimple 演示是一个非常小的程序,但它提供了大多数关键 XEP 功能的示例,并概述了如何使用 XEP API。(想试试 InterSystems IRIS .NET 开发和互操作性功能的在线视频演示吗?请看.NET QuickStart(.NET 快速入门)!)
用前须知
要使用该程序,您需要一个安装了 .NET 框架和 Visual Studio 的 Windows 系统,以及一个运行中的 InterSystems IRIS 实例来连接。您对 InterSystems IRIS 的选择包括多种类型的已授权的和免费的评估实例;实例不需要由您正在工作的系统托管(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。使用同一文档中的 InterSystems IRIS Connection Information(InterSystems IRIS 连接信息)和 .Net IDE 中的信息将 Visual Studio 连接到您的 InterSystems IRIS 实例。
配置 Visual Studio 项目
首先,打开 Visual Studio 并创建一个新的控制台(console)应用程序项目,选择 Visual C# 和 Console App (.NET Framework)(控制台应用程序(.NET 框架)) 选项。对于 Name(名称) 字段,输入 netxep。(想试试 InterSystems IRIS .NET 开发和互操作性功能的在线视频演示?请看.NET QuickStart(.NET 快速入门)!)
添加程序集引用
XEP API 被打包到 InterSystems.Data.XEP.dll 库中,该库必须安装在您的本地系统上。您可以通过克隆 repo https://github.com/intersystems/quickstarts-dotnet/tree/master/XEP 或从该 repo 下载文件来获取它。如果 InterSystems IRIS 安装在您的本地系统或您可以访问的另一个系统上,则该程序集已经安装在子目录 install-dir\dotnet\bin\v4.5 中,其中 install-dir 是实例的安装目录。
要将 InterSystems.Data.XEP.dll 的程序集引用添加到项目:
从 Visual Studio 主菜单中,选择 Project(项目) > Add Reference(添加引用)...
在出现的窗口中,点击 Browse(浏览)....
浏览到 InterSystems.Data.XEP.dll 文件的位置。
选择文件并点击 Add(添加)。
点击 OK(确定)。
在 Visual Studio Solution Explorer 中,InterSystems.Data.XEP.dll 程序集现在应该列在 References(引用)下。
添加示例类
在创建程序源文件之前,您将添加一个类,主程序会访问该类以生成用于存储的示例对象。在 Visual Studio 中,使用 Project(项目) > Add Class(添加类) 添加一个 C# 类文件到 netxep 项目。删除类文件的默认内容,并将以下代码复制并粘贴到文件中。
using System; namespace xep.samples
{
public class SingleStringSample { public string name;
public SingleStringSample() { }
internal SingleStringSample(string str) { name = str;}
public static SingleStringSample[] generateSampleData(int objectCount) { SingleStringSample[] data = new SingleStringSample[objectCount]; for (int i = 0; i < objectCount; i++)
{
data[i] = new SingleStringSample("single string test");
}
return data;
}
}
}
因为这个类非常简单,所以 XEP 不需要任何注释就可以从中生成有效的模式。对于真实应用程序中更复杂的类,您可以使用各种选项来优化导入。
创建 XEP 演示程序
现在您可以创建 XEPSimple 演示程序了。在 Visual Studio 中,找到您在创建项目时创建的默认 program.cs 文件。删除该文件的默认内容,并粘贴下面的代码,用connection information for your InterSystems IRIS instance(您的 InterSystems IRIS 实例的连接信息)替换主机、端口、irisnamespace、用户名和密码变量的值。您可以指定所示的 USERnamespace,也可以选择在实例上创建的另一个命名空间。
using System;
using InterSystems.XEP; using xep.samples;
namespace XepSimpleNamespace
{
public class XepSimple
{
public static void Main(string[] args)
{
// Generate 12 SingleStringSample objects for use as test data SingleStringSample[] sampleArray = SingleStringSample.generateSampleData(12);
// EventPersister
EventPersister xepPersister = PersisterFactory.CreatePersister();
String host = "127.0.0.1"; // InterSystems IRIS host int port = 51774; // InterSystems IRIS Superserver port
String irisnamespace = "USER"; // InterSystems IRIS namespace String username = "_system"; // Credentials for InterSystems IRIS String password = "SYS"; //Credentials for InterSystems IRIS
xepPersister.Connect(host,port,irisnamespace,username,password); // connect to localhost xepPersister.DeleteExtent("xep.samples.SingleStringSample"); // remove old test data xepPersister.ImportSchema("xep.samples.SingleStringSample"); // import flat schema
// Event
Event xepEvent = xepPersister.GetEvent("xep.samples.SingleStringSample");
long[] itemIdList = xepEvent.Store(sampleArray); int itemCount = 0;
for (int i = 0; i < itemIdList.Length; i++)
{
if (itemIdList[i] > 0) itemCount++;
}
Console.WriteLine("Stored " + itemCount + " of " + sampleArray.Length + " events");
// EventQuery
EventQuery<SingleStringSample> xepQuery = null;
String sqlQuery = "SELECT * FROM xep_samples.SingleStringSample WHERE %ID BETWEEN ? AND ?";
xepQuery = xepEvent.CreateQuery<SingleStringSample>(sqlQuery); xepQuery.AddParameter(3); // assign value 3 to first SQL parameter xepQuery.AddParameter(12); // assign value 12 to second SQL parameter xepQuery.Execute(); // get resultset for IDs between 3 and 12
xepQuery.Close(); xepEvent.Close(); xepPersister.Close();
} // end main()
} // end class xepSimple
}
演示程序分为三个部分,每个部分演示了 XEP 三个主要类——EventPersister、 Event 和 EventQuery 中的一个。运行时,XepSimple 演示程序执行以下任务:
首先,通过调用示例数据类(sample data class) xep.samples.SingleStringSample 这一方法生成一些示例对象。
EventPersister 是 XEP 的主要入口点(main entry point),并提供到数据库的连接。
它创建一个名为 xepPersister 的实例,该实例在数据库中建立到 User 命名空间的 TCP/IP 连接,并删除任何现有的示例数据。然后调用 ImportSchema() 来分析示例类并将模式发送到数据库,从而创建相应的 ObjectScript 模式来保存持久化 SingleStringSample 对象。
Event 封装了(encapsulate) .NET 对象和相应的数据库对象之间的接口。
一旦生成了模式(schema),xepPersister 就可以为示例类创建一个名为 xepEvent 的 Event 对象。Store() 方法将 .NET 对象数组存储为持久化事件。
EventQuery 用于准备和执行 SQL 查询的有限子集。
名为 xepQuery 的 EventQuery<SingleStringSample> 对象是通过将查询字符串传递给 xepEvent 对象的 CreateQuery() 方法创建的。 该字符串定义了一个接受两个参数(? 字符)的 SQL 查询。 参数值是通过调用 AddParameter() 定义的,调用 Execute() 来获取查询结果集。
当处理完成后,它通过调用 XEP 对象的 close() 方法进行清理。
运行 XEPSimple 程序
现在您可以构建和运行 XEPSimple 演示程序了。按 Ctrl + F5 运行程序,以便当程序结束时命令提示符保持打开状态。
下一步
XepSimple 演示的目的是让您体验 XEP,而又不陷入细节困境,它不是用于实际生产代码的模型——它甚至没有进行异常检查。最重要的简化是在示例数据中。您从一个不需要注释或其他机制来帮助模式(schema)生成和优化的类中持久化了一些很小的 .NET 对象。虽然在实际应用程序中通常需要注释和其他选项,但这些选项非常简单易用。API 也同样简单易用。
有关所有 XEP 功能的全面描述,请参见 Persisting .NET Objects with InterSystems XEP(《使用 InterSystems XEP 持久化 .NET 对象》)。
了解有关 .NET 支持的更多信息
InterSystems IRIS 提供了 .NET API,通过 SQL 表、对象和多维存储轻松访问数据库。有关每种类型的访问的详细信息,请参见以下书籍:
Using the Native API for .NET(《使用 Native API for .NET》),了解从 .NET 应用程序访问 InterSystems IRIS globals。
Using ADO.NET Managed Provider Classes(《使用 ADO.NET Managed Provider Classes》),了解SQL 表访问。允许您的 .NET 项目使用完全兼容的通用 ADO.NET Managed Provider 版本访问 InterSystems IRIS 数据库。
Using the InterSystems ODBC Driver(《使用 InterSystems ODBC Driver》),了解 SQL 表访问。InterSystems ODBC 驱动程序允许 InterSystems IRIS 建立到外部应用程序的 ODBC 连接,并通过 SQL 提供对外部数据源的访问。
Persisting .NET Objects with InterSystems XEP(《使用 InterSystems XEP 持久化 .NET 对象》),了解对象访问。XEP 对事务处理应用程序进行了优化,这类程序使用复杂度从简单到中等的对象层次结构,且要求极高的对象数据持久化和检索速度。
Using the Entity Framework Provider(《使用 Entity Framework Provider》),了解对象-关系映射。提供有关使用实体框架(Entity Framework)技术访问 InterSystems IRIS 数据库的信息。
这是我们的Firstlook 文档? 对
公告
Claire Zheng · 十一月 18, 2021
亲爱的社区开发者们,大家好!
我们欢迎您来参加 2021年欧洲医疗编程马拉松 ,这一赛事时间为2021年11月19日-21日,免费参赛,线上赛道(On-line Track)的申请截止日期延长至11月15日。
我们将有一个InterSystems的挑战:“用FHIR创新”。InterSystems赛道的奖金设置如下:
🥇第一名: 1500 EUR🥈第二名: 1000 EUR🥉第三名: 500 EUR我们为所有参加InterSystems挑战的人准备了奖品!参考下图,了解我们的挑战细节:)你愿意参加吗?请在下面的投票中告诉我们!
InterSystems挑战赛: 用FHIR创新
无论是IoMT的实现、更容易的患者参与,还是用于分析解决方案的临床数据的可用性,FHIR(医疗数据交换的标准)都可以推动创新。利用FHIR提供的合成数据来改善对患者及其治疗的了解,或者仅仅是在FHIR服务的帮助下,使您的解决方案在实践中立即可用,以收集和提供数据。
为您的解决方案使用一个或多个InterSystems FHIR服务,例如云中的FHIR存储库或HealthShare消息转换服务,并有资格获得InterSystems奖。InterSystems将为参与者提供免费访问服务以及在线和现场技术援助和指导。
在这次编程马拉松中,每个团队将由3位成员组成。如果你没有队伍,组织者会在比赛前安排好队伍。在这里上了解更多关于编程马拉松的信息。
期待与您相聚!如果你计划参加,请在下面告诉我们!
文章
Qiao Peng · 三月 29, 2021
前面介绍了通过mirroring或shadow,使用journal日志过滤器的方式,在不改动数据模型的情况下实现InterSystems IRIS/Caché上的CDC能力。但如果你可以修改InterSystems IRIS/Caché上的数据模型,也可以考虑使用DSTIME特性实现变更数据捕获。
DSTIME特性
DSTIME特性是InterSystems IRIS/Caché的嵌入式实时BI工具DeepSee用于跟踪数据变更的。InterSystems IRIS和2011版之后的Caché,都支持DSTIME特性。它会自动记录数据库中SQL表记录或持久化对象的变更,并将变更记录写入持久化的多维数组^OBJ.DSTIME中。
DSTIME特性是针对于SQL表/持久化类的,因此需要为每个需要记录变化的表/持久化类开启。当开启了DSTIME的表/持久化类,有记录插入、更新、删除时,InterSystems IRIS/Caché引擎会自动在^OBJ.DSTIME中记录这些操作。其格式为:^OBJ.DSTIME(类名,DSTIME,对象ID) = 执行的操作代码
DSTIME:当SQL表/持久化类的参数DSINTERVAL未被设置时,DSTIME=0;当SQL表/持久化类的参数DSINTERVAL被设置时,DSTIME=1840/12/31午夜12点到记录发生时的秒数。
执行的操作代码:
代码
操作
0
更新
1
插入
2
删除
例如:^OBJ.DSTIME(“Demo.Patient”,5673588714,2) = 1^OBJ.DSTIME(“Demo.Patient”,5673588735,3) = 1^OBJ.DSTIME(“Demo.Patient”,5673588784,4) = 1^OBJ.DSTIME(“Demo.Patient”,5673588791,2) = 0
因此,如果你没有使用DeepSee,就可以监控^OBJ.DSTIME即可获得IRIS/Cache’的数据变更。注:DeepSee在同步cube时,会自动查询、操作、删除^OBJ.DSTIME的数据,因此,将会对于直接使用它进行数据变更捕获产生影响。如果你的确在使用DeepSee自动同步cube,也想使用^OBJ.DSTIME实现CDC,请联系InterSystems获得解决方案。这不在本文的讨论范围。
开启DSTIME特性
InterSystems IRIS/Caché可以在SQL表建模时、对象模型上开启DSTIME特性。涉及2个类参数:DSTIME 和DSINTERVAL
DSTIME 类参数设置为AUTO时,InterSystems IRIS/Caché会自动记录对应SQL表/持久化类的数据变更。DSINTERVAL类参数控制记录的数据变更如何分组。用于实现CDC时,建议设置该参数=1。
1. 通过SQL建模,新建SQL表
在使用SQL新建表时,可以增加对于类参数DSTIME 和DSINTERVAL的设置。
例如下面的SQL创建一个开启了DSTIME的表Demo.Patient:
CREATE TABLE Demo.Patient (
%CLASSPARAMETER DSTIME = 'AUTO',
EMPNUM INT NOT NULL,
NAMELAST CHAR(30) NOT NULL,
NAMEFIRST CHAR(30) NOT NULL,
CONSTRAINT EMPLOYEEPK PRIMARY KEY (EMPNUM))
其中%CLASSPARAMETER DSTIME = 'AUTO'开启表的DSTIME特性。
2. 通过面向对象建模,修改持久化的对象模型
对于对象模型,在建模时或之后修改模型,设置DSTIME类参数的方式开启:Parameter DSTIME = "AUTO";:
Class Demo.Patient Extends %Persistent [ ClassType = persistent, DdlAllowed, Final, Owner = {_SYSTEM}, ProcedureBlock, SqlRowIdPrivate, SqlTableName = PATIENT ]
{
Property NAME As %Library.String(MAXLEN = 1) [ SqlColumnNumber = 2 ];
Property DOB As %Library.Date [ SqlColumnNumber = 3 ];
Parameter USEEXTENTSET = 1;
Parameter DSTIME = "AUTO";
Parameter DSINTERVAL = 1;
}
3. 对批量对象模型增加DSTIME特性
如果想对整个SQL Schema下对所有表或一个包下的所有对象类增加DSTIME,也可以定义一个持久化的纯虚基类,在基类中定义DSTIME类参数,然后让所有的类继承于这个基类。示例代码如下:
定义基类:
Class Demo.Super Extends %Persistent [ Abstract, NoExtent ]
{
Parameter DSTIME = "AUTO";
}
注意,基类应该设置NoExtent关键字,以避免编译器生成存储模型。
修改子类,使Demo.Super成为其主父类:
Class Demo.Patient Extends Demo.Super [ Language = objectscript ]
{
Property NAME As %Library.String(MAXLEN = 100) [ SqlColumnNumber = 2 ];
Property DOB As %Library.Date [ SqlColumnNumber = 3 ];
}
测试
开启DSTIME后,就可以使用SQL或对象操作方式,在InterSystems IRIS/Caché中执行一些插入、更新、删除操作,并观察持久化多维数组^OBJ.DSTIME的记录。
总结
通过开启DSTIME特性,让InterSystems IRIS/Caché自动记录需要追踪的SQL表或持久化类的数据变更,可以方便的通过^OBJ.DSTIME捕获这些变更,并处理数据变更或将变更记录输出到下游系统。
其它注意事项:应考虑在处理/输出完数据变更后,记录上次处理的DSTIME值,或删除^OBJ.DSTIME中已处理过的记录,以方便持续的、高效的捕获新的数据变更。
CDC系列
更多的CDC选项实现,请参考:
1. CDC系列之一 :使用Dejournal Filter在InterSystems IRIS/Caché上通过Mirroring实现CDC功能
2. CDC系列之二 :使用Dejournaling filter routine在Caché上通过Shadow实现CDC
3. CDC系列之三 :建立InterSystems IRIS/Caché的Global数据变更与SQL表记录的对应关系
4. CDC系列之四:使用DSTIME特性在InterSystems IRIS/Caché上实现CDC功能
文章
Jingwei Wang · 九月 16, 2022
连接前准备:
.Net 开发环境
InterSystems IRIS 客户端组件:InterSystems.Data.IRISClient.dll,这个dll文件可以再IRIS安装包中找到,在IRIS/dev/dotnet/bin/version
Connection String
步骤:
在.Net 开发环境中,配置客户端组件InterSystems.Data.IRISClient.dll作为一个dependency
Connection String:其中using InterSystems.Data.IRISClient 用来导入需要使用的dll文件,string connectionString = "Server = localhost; Port = 1972; Namespace = User; User ID = SQLAdmin; Password = deployment-password"是connection string。
using System;
using InterSystems.Data.IRISClient;
namespace ADODemo
{
internal class Program
{
static void Main(string[] args)
{
string connectionString = "Server = localhost; Port = 1972; Namespace = User; User ID = SQLAdmin; Password = deployment-password";
IRISADOConnection connection = new IRISADOConnection(connectionString);
connection.Open();
// when finished, use the line below to close the connection
// connection.Close();
}
}
}
公告
Claire Zheng · 十一月 2, 2022
Hi!大家好!
截至11月3日中午,我们的开发者社区会员共495人!我们准备了一份惊喜礼品,准备送给第500名开发者社区会员!
那么,谁是第500名幸运的开发者社区成员呢?我们拭目以待!(*^▽^*)
文章
Claire Zheng · 六月 8, 2023
亲爱的开发者们,
向大家分享一个好消息!InterSystems开发者中文社区版主、InterSystems高级销售工程师祝麟 ( @Lin.Zhu ) 于近日顺利通过“HL7 FHIR R4 Proficiency Exam”并取得资格认证证书!
HL7 FHIR(R4)能力证书可以证明在最新和最热门的HL7标准方面达到行业公认的专业水平。考试涵盖了以下内容:FHIR原则;FHIR资源的基本概念;交换机制;一致性和实施指导;如何使用术语;如何建立安全和可靠的FHIR解决方案;FHIR维护过程;以及如何使用和处理FHIR许可和知识产权(IP)。
FHIR®(快速医疗互操作性资源)是HL7的下一代标准框架,2023年,我们推出的InterSystems IRIS医疗版互联互通套件3.0版(V3.0)就实现了与FHIR更深层的生态互通——借助强大的、打通多个互操作生态的能力,用户可以将互联互通服务和消息与其它互操作标准(如FHIR、HL7 V2)进行自动双向转换,为数据挖掘与价值实现带来更多可能性。
举例来说,在数据利用上,通过V3.0内置的FHIR资源仓库,用户可按业务需要,将互联互通文档和消息通过FHIR资源投射为SQL结构化数据,为实现“原始数据不出院、数据可用不可见”提供了技术基础,从而极大加强现有院内临床数据中心、科研数据中心以及区域健康大数据平台等数据仓库类系统的数据利用,使BI、AI/ML过程可基于数据发掘实现价值洞察,进行数字化业务闭环,把数据转化为可以持续产生价值的资产,为医院实现数据资产变现提供必要条件,全面助力医院数字化转型和生产力提升。
在应用创新上,V3.0 提供强大的FHIR生态能力(包含SMART on FHIR与CDS Hooks),支持快速开发和集成任意支持FHIR标准的、即插即用的第三方创新应用,实现数据利用最大化,为包括居民健康管理、临床决策支持、专科电子病历等打造坚实的数据和平台基础。
InterSystems作为FHIR标准在全球范围的推广者,已经在美国和亚太地区拥有众多成功案例,并且帮助越来越多的国家部署并遵循这种标准。
再次恭喜 @Lin.Zhu ✿✿ヽ(°▽°)ノ✿ 获得这一证书!
公告
Claire Zheng · 九月 4, 2022
嗨,开发者们!
秋高气爽之际,我们很高兴地宣布启动🏆InterSystems开发者社区中文版首届技术征文大赛 🏆(←点击链接进入参赛页面,浏览所有参赛文章)!
从2022年9月5日-10月24日(北京时间),欢迎热爱InterSystems技术的你来投稿,撰写与InterSystems技术相关的文章。
🎁参与奖 我们为每一位成功参赛的作者准备了礼品!
🏆优秀文章大奖 Apple iPad; Beats Fit Pro; HUAWEI WATCH; Logitech键盘; WD固态硬盘;KEEP智能手环
奖品设置
1. 专家提名奖:活动期间发布文章且成功参赛后,由InterSystems专家评选得出
🥇一等奖1名,Apple iPad
🥈二等奖2名,Beats Fit Pro
🥉三等奖3名,WD 固态硬盘
2. 开发者社区奖:活动期间发布文章且成功参赛后,由社区成员点赞评选得出,点赞前五名获得以下奖品
🥇第一名,HUAWEI WATCH 3智能手表
🥈第二名,罗技(Logitech)ERGO键盘
🥉第三名-第五名,KEEP 运动智能手环
3. 入围奖:在征文大赛期间,所有在InterSystems开发者中文社区发布文章且成功参赛的其余用户都将获得特别奖励。
请注意:
每位作者只可以获得一个奖项(即:您只可以获得一次专家提名奖/开发者社区奖/入围奖);
当出现票数相当的平手情况时,将以专家评选投票数作为最终票数高低的判断标准。
谁可以参加?
任何开发者社区成员,除了InterSystems的员工。创建一个账户!
关键时间节点
📝 2022年9月5日-10月23日(北京时间),文章发布与点赞收集!在社区发布文章,呼朋引伴来点赞。越早发布文章,就越有时间收集更多点赞(这是您获得“开发者社区奖”的关键)。
🎉 2022年10月24日(北京时间),公布获奖名单。
参赛要求
❗️ 征文期间,发布在中文社区的文章只要满足以下要求,将自动参加比赛,无需额外提交:
文章必须与InterSystems技术有关
文章必须以中文撰写
文章必须是100%的原创文章(可以是现有文章的延续)
文章应在InterSystems开发者中文社区首发,严禁从其他社区进行搬运
文章严禁抄袭或翻译社区现有文章
社区成员可以发布多篇文章参赛
文章字数应不少于800字,写作时请关注编辑器右下角的计数器
额外奖励
您可以自由选择任何与InterSystems技术相关的主题,如果您提交的文章中符合以下要求,将获得额外奖励票数。
资源助力
➡️ 文章样例:同一主题系列文章
数据平台与三级等保第一篇
精华文章-基于docker的一体化集成ai环境中部署机器学习深度学习模型
数据平台互操作功能运行维护管理基础-互操作消息管理
互操作进阶-第二篇:规则引擎-(第一部分)
精华文章-webgateway系列1-web-gateway介绍
➡️ 文章样例:独立主题文章
精华文章-从软件架构发展谈业务集成技术演进与展望
精华翻译文章:什么是智慧医院数字孪生?
在intersystems-iris医疗行业版的fhir服务器上测试和开发smart-fhir应用
➡️ 操作指导:首次加入社区,如何发帖?
如何发帖以及其他常见问题解答
如何在开发者社区上发布包含代码的帖子?
如何从 Word 或 Google Docs 发布文章
如何在帖子中突出显示 ObjectScript?
如何在其他开发者社区翻译并发布帖子
➡️ 操作指导:更多开发者社区技能学习
【精华置顶帖】一文了解关于InterSystems开发者社区的各种积分福利!
快乐分享技术,期待您的大作!✨
🏆InterSystems开发者社区中文版首届技术征文大赛 🏆(←点击链接进入参赛页面,浏览所有参赛文章)
如果有疑问/高见,欢迎跟帖留言!
文章
Jingwei Wang · 九月 28, 2021
本文档介绍了如何在 InterSystems IRIS®数据平台中使用 Java 网关(Gateway)与 Java 组件进行互操作。在本文中,您将首先创建一个示例 JAR 文件。然后,您将在 InterSystems IRIS 管理门户(Management Portal)中创建并启动 Java 网关(Gateway)。您将以编程方式导入创建的示例 JAR 文件。最后,您将在 ObjectScript 中创建并操作一些代理类(proxy class)和对象(object)。
为了让您体验 Java 网关(Gateway ),而又不陷入细节困境,我们保持了简单的探索。这些活动被设计成只使用默认设置和功能,这样您就可以熟悉功能的基本原理,而不必处理那些离题或过于复杂的细节。当您把 Java 网关(Gateway)引入您的生产系统时,您可能需要做一些不同的事情。请确保不要把这种对 Java 网关(Gateway )的探索与真实的情况相混淆!本文档末尾提供的参考资料将使您对在生产中使用 Java 网关(Gateway)的情况有一个很好的了解。
要浏览所有的技术概要(First Look),包括下面描述的可以在免费的社区版(Community Edition)实例上执行的那些,请参见 InterSystems 技术概要。
为什么 Java 网关(Gateway)很重要
Java 网关(Gateway)为 InterSystems IRIS 与 Java 组件进行互操作提供了一种简单的方法。在使用 Java 网关(Gateway)导入 JAR 文件后,您可以实例化一个外部 Java 对象,并将其作为 InterSystems IRIS 中的本机对象进行操作。您可以从 InterSystems IRIS 和 ObjectScript 内部访问 Java 类和方法!
在内部,Java 网关(Gateway)为每个 Java 类生成一对一的 ObjectScript 代理。通常,使用 Java 网关(Gateway)的最佳方法是构建一个小型 Java 封装类(wrapper class),它只公开您想要的功能,然后为这个封装创建一个代理。
探索 Java 网关(Gateway)
我们开发了一个简短的演示,向您展示如何使用 Java 网关(Gateway)和 InterSystems IRIS。想试试InterSystems IRIS Java 开发和互操作性功能的在线视频演示吗?请查看 Java QuickStart(Java 快速入门)!
用前须知
要使用该程序,您需要在一个系统上工作,应安装 JDK 1.8 版本和您选择的 Java IDE,并连接一个正在运行的 InterSystems IRIS 实例。您对 InterSystems IRIS 的选择包括多种已授权的和免费的评估实例;实例不需要由您正在工作的系统托管(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见InterSystems IRIS 基础:连接一个 IDE中的部署 InterSystems IRIS。使用同一文档中的InterSystems IRIS 连接信息和 Java IDE中的信息,将 IDE 连接到您的 InterSystems IRIS 实例。
创建 JAR 文件
使用您选择的 IDE 在 Java 中创建 Person 类。使用以下示例代码:
public class Person {
public int age; public String name;
//constructor
public Person (int startAge, String Name) {
age = startAge; name = Name;
}
public void setAge(int newAge)
{
age = newAge;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public static void main(String []args) {
Person myPerson = new Person (5, "Tom"); System.out.println(myPerson.getName()); System.out.println(myPerson.getAge());
}}
编译 Person 类。然后,打开命令提示符(Command Prompt)窗口,并导航到包含 Person.class 文件的目录。使用下面的命令来生成 Person.jar 文件:
jar cf Person.jar Person.class
注意文件的位置。
启动 Java 网关(Gateway)
要启动 Java 网关(Gateway),请按照以下步骤操作:
使用InterSystems IRIS 基础:连接一个 IDE中为您的实例描述的 URL,在浏览器中打开您的实例的管理门户(Management Portal)。
导航到 Object Gateways(对象网关)页面。(System Administration(系统管理) > Configuration(配置) > Connectivity(连接) > External Language Servers
选择 Create New External Language Servers
下拉菜单选择 Java 。
服务器名称输入 JavaGatewayTest,端口输入 55555。
点击 Save(保存)。
在新的 Java 网关(Gateway)所在行中,点击 Start(开始)。
生成代理类(Proxy Classes)
在 USER 命名空间(或您在已安装的实例)中创建一个名为 CreateProxyClasses.cls 的新 ObjectScript 类,包名为 JavaGatewayTest。粘贴以下代码,用您的 InterSystems IRIS 实例的连接信息 (如InterSystems IRIS 基础:连接一个 IDE中所述)替换 gwyConn.&Connect 的参数。您可以指定所示的 USER 命名空间,也可以选择实例上创建的另一个命名空间。用双引号括起来的 Person.jar 文件的完整文件路径替换 YOUR FILEPATH HERE。
Class JavaGatewayTest.CreateProxyClasses Extends %Persistent
{
ClassMethod run()
{
// get a connection to the Java Gateway
set gwyConn = ##class(%Net.Remote.Gateway).%New()
set status = gwyConn.%Connect("127.0.0.1", 55555, "USER") if $$$ISERR(status) {
write !,"error: "_$system.OBJ.DisplayError(status) quit
}
// add the jar to the classpath
set classpath = ##class(%ListOfDataTypes).%New() do classpath.Insert("YOUR FILEPATH HERE")
set status = gwyConn.%AddToCurrentClassPath(classpath) if $$$ISERR(status) {
write !,"error: "_$system.OBJ.DisplayError(status) quit
}
// create the proxy ObjectScript classes that correspond to the Java classes in the jar file set status = gwyConn.%Import("Person",,,,1)
if $$$ISERR(status) {
write !,"error: "_$system.OBJ.DisplayError(status) quit
}
// close the connection to the Java gateway set status = gwyConn.%Disconnect()
if $$$ISERR(status) {
write !,"error: "_$system.OBJ.DisplayError(status) quit
}}}
编译并构建该类。
打开 InterSystems 终端(Terminal),并导航到您指定的命名空间。使用以下命令执行 run() 方法:
do ##class(JavaGatewayTest.ManipulateObjects).run()
您应该可以看到以下输出:
Name: Tom Age: 5
setting age to 100 Age: 100
现在您已经成功地完成了练习,停止您创建的 Java 网关(Gateway)。返回到管理门户(Management Portal)中的 External Language Servers页面,找到您的 JavaGatewayTest 网关,并选择 Stop(停止)。
了解有关 Java 网关(Gateway)的更多信息
要了解有关 Java 网关(Gateway)和 InterSystems IRIS 的更多信息,请参见:
使用 Java 网关(Gateway) 有个疑问,生成代理类(Proxy Classes)该步骤中是不是应该体现为JavaGateway而不是Net.Remote.Gateway。 %Net.Remote.Gateway 是 %Net.Remote.Java.JavaGateway的基类,是用来建立JavaGateway的连接使用的。