搜索​​​​

清除过滤器
文章
Qiao Peng · 三月 5, 2021

Global 扫描和切片

Global 扫描和切片 这是一个在 IRIS 2020.1 和 Caché 2018.1.3 上工作的代码示例 不会与新版本保持同步 也不会获得 InterSystems 提供的支持服务! 大多数情况下,默认存储使用的 global 只有 1 个表示 IDKEY 的下标级别。 对于索引 global,可能有 2 个或更多下标级别。 数组、父子关系或扩展了基础数据类的持久化类 是具有更多下标级别的示例。 但所有这些 global 都非常统一。 我们还能看到与类或表无关的 global,例如 ^SPOOL、^ERRORS 或 ^%SYS 其中的结构取决于各个级别的具有特殊含义的下标。 分析这些不一致的 global 是一个挑战,而只是把它的内容导出来不一定有助于理解依赖关系。 本示例的原理就像那个古老的笑话:“如何吃一头大象?” ==>“切成片吃!” 以下是实现的功能: 通过一条 SQL 语句,您可以逐级显示任意 global 的结构。 您提供 global 名称和要显示的最大级别,即可获得相关下标、节点的 $Data、后面的子节点数量以及在该级别存储的内容(如果有的话)。 示例:**SELECT * FROM rcc\_G.scan where rcc\_G.Scan('^%SYS',1)=1** Reference Level $D SubN Value ^%SYS 0 10 25 ("CSP") 1 10 ("CSPAppSec") 1 1 64 ("CacheTempDir") 1 1 "c:\intersystems\iris\mgr\iristemp\" ("DBRefByName") 1 10 ("Ensemble") 1 11 "2020-04-25 18:37:18" ("ErrorPurge") 1 1 30 ("FIPSMode") 1 1 0 ("IRISTempDir") 1 1 "c:\intersystems\iris\mgr\iristemp\" ("JOURNAL") 1 11 0 ("LANGUAGE") 1 10 ("LASTSESSIONGUID") 1 1 "EÊcRù¢GM£ô"_$c(127)_"¹9¾ÒÆ" ("LOCALE") 1 10 ("ModuleRoot") 1 10 ("NLS") 1 10 ("SERVICE") 1 10 ("SSPort") 1 1 51773 ("StreamLocation") 1 10 ("SystemMode") 1 1 "TEST" ("TempDir") 1 1 "C:\InterSystems\IRIS\mgr\Temp" ("WebServer") 1 10 ("bindir") 1 1 "c:\intersystems\iris\bin\" ("shutdownlogerrors") 1 1 0 ("sql") 1 10 ("sysdir") 1 1 "c:\intersystems\iris\mgr\" ("tercap") 1 10 26 lines **SELECT * FROM rcc\_G.scan where rcc\_G.Scan('^%SYS',2)=1** Reference Level $D SubN Value ^%SYS 0 10 25 ("CSP") 1 10 1 ("CSP","LastUpdate") 2 1 "65553,44452" ("CSPAppSec") 1 1 0 64 ("CacheTempDir") 1 1 0 "c:\intersystems\iris\mgr\iristemp\" ("DBRefByName") 1 10 9 ("DBRefByName","CACHE") 2 1 "^^c:\intersystems\iris\mgr\cache\" ("DBRefByName","CACHEUSER") 2 1 "^^c:\intersystems\user\" ("DBRefByName","ENSLIB") 2 1 "^^c:\intersystems\iris\mgr\enslib\" ("DBRefByName","IRISAUDIT") 2 1 "^^c:\intersystems\iris\mgr\irisaudit\" ("DBRefByName","IRISLIB") 2 1 "^^c:\intersystems\iris\mgr\irislib\" ("DBRefByName","IRISLOCALDATA") 2 1 "^^c:\intersystems\iris\mgr\irislocaldata\" < 60 lines more > **SELECT * FROM rcc\_G.scan where rcc\_G.Scan('^ERRORS',37)=1 and id['Jour'** Reference Level $D SubNodes Value (65588,1,"*STACK",1,"V","%00000","N","""JournalState""") 8 1 0 4 (65592,1,"*STACK",1,"V","%00000","N","""JournalState""") 8 1 0 4 (65592,2,"*STACK",1,"V","%00000","N","""JournalState""") 8 1 0 4 很棒的文章,辛苦乔老爷!
文章
jieliang liu · 十月 27, 2021

IRIS 2021 技术文档 First Look 34 技术概要:InterSystems IRIS Native API for Python

技术概要:InterSystems IRIS Native API for Python 目录 技术概要: InterSystems IRIS Native API for Python 1 InterSystems IRIS 存储结构简介 1 探索 IRIS Native for Python 1 用前须知 2 安装 Native API 包 2 IRIS Native 应用程序 2 运行练习 3 确认管理门户(Management Portal)中的变更 3 了解有关 IRIS Native 的更多信息 3 技术概要:InterSystems IRIS Native API for Python 本技术概要(First Look)指南解释了如何使用 InterSystems IRIS Native 功能从 Python 应用程序访问 InterSystems IRIS® globals。IRIS Native 还允许您运行 ObjectScript 方法、函数和例程。在本文中,您将首先连接到 InterSystems IRIS。然后您将在 InterSystems IRIS 中设置和检索一个 global 节点的值,并在另一个 global 节点上进行迭代。您还将调用 InterSystems IRIS 类方法。所有这些活动都将在 Python 3 应用程序中执行。 为了让您体验 IRIS Native,而又不陷入细节的困境,本次探索特意设计得很简单。这些活动被设计成只使用默认设置和功能,这样您就可以熟悉功能的基本原理,而不必处理那些离题或过于复杂的细节。当您把 IRIS Native 引入您的生产系统时,您可能需要做一些不同的事情。请确保不要把这种对 IRIS Native 的探索与真实的情况相混淆! 本文档末尾提供的参考资料将使您对在生产中使用 IRIS Native 的情况有一个很好的了解。 要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。 InterSystems IRIS 存储结构简介 InterSystems IRIS 提供了一种易于使用的方法来将数据存储在持久化多维数组中。global 是存储在物理 InterSystems IRIS 数据库中的命名多维数组。在应用程序中,globals 到物理数据库的映射基于当前命名空间,命名空间提供一个或多个物理数据库的逻辑统一视图。例如,要使用一个名为* ^Settings* 的 global 将值 "Red "与键 "Color "关联起来,请使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础: 连接一个 IDE》)中的为您的实例描述的程序打开 InterSystems 终端(InterSystems Terminal),并输入以下代码: set ^Settings("Color")="Red" 您可以利用 globals 的多维特性来定义一个更复杂的结构: set ^Settings( "Auto1 ", "Properties ", "Color ") = "Red " set ^Settings( "Auto1 ", "Properties ", "Model ") = "SUV " set ^Settings( "Auto2 ", "Owner ") = "Mo " set ^Settings( "Auto2 ", "Properties ", "Color ") = "Green " 有关 globals 的更多信息,请参见 Using Globals(《使用 globals》)。 探索 IRIS Native for Python 现在,您已经准备好实验 IRIS Native 了。下面的简短演示向您演示了如何在一个简单的 Python 应用程序中使用 IRIS Native。 想试试 InterSystems Native API for Python 的在线视频演示吗?请查看 Python QuickStart(Python 快速入门)! 探索 IRIS Native for Python 用前须知 要使用这个程序,您需要一个正在运行的 InterSystems IRIS 实例和一个使用 Python 3 和 PIP 实用程序以及您喜欢的 Python IDE 的系统。(在 Windows 系统中,确保 Python 解释器包含在您的 PATH 环境变量中)。您对 InterSystems IRIS 的选择包括多种类型的已授权的和免费的评估实例;该实例不需要由您正在工作的系统托管(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。使用同一文档中的 InterSystems IRIS Connection Information(InterSystems IRIS 连接信息)和 Python IDE 中的信息,将 Visual Studio 连接到您的 InterSystemsIRIS 实例。 安装 Native API 包 在运行示例 Python 程序之前,您需要使用 PIP 包管理器来安装 irisnative 包,您可以从 https://github.com/intersystems/quickstarts-python/tree/master/Solutions/nativeAPI_wheel 下载。 如果您的本地系统上安装了 InterSystems IRIS,wheel 文件已经安装在子目录 install-dir dev python 中,其中 install-dir 是 InterSystems IRIS 实例的安装目录, Python 3 包的名称 (.whl 文件) 包括 cp34。 要安装 wheel 文件,在命令行中输入命令 pip install irisnative-1.0.0 whl file,其中 irisnative-1.0.0 whl file 是您的 Python 版本和操作系统对应的 wheel 文件。例如,如果您在 Linux 上使用 Python 3,请使用 irisnative-1.0.0-cp34-abi3-linux_x86_64.whl。 IRIS Native 应用程序 现在您已经创建了项目,接下来您将创建一个小的应用程序,演示 Native API 的一些功能。 在您的 IDE 中,在 IRISNative 目录中创建一个新的源文件,将该文件保存为 IRISNative.py。 将以下代码粘贴到 IRISNative.py 中,将 InterSystems IRIS 实例的连接信息替换为 kwargs 中的值。您可以指定所示的 USER 命名空间,也可以选择在实例上创建的另一个命名空间: import irisnative # Modify connection info based on your environment ip = "127.0.0.1 " port = 1972 namespace = "USER " username = " _SYSTEM " password = "SYS " # create database connection and IRIS instance connection = irisnative.createConnection(ip,port,namespace,username,password) dbnative = irisnative.createIris(connection) print( " [1. Setting and getting a global ] ") # setting and getting a global # ObjectScript equivalent: set ^testglobal( "1 ") = 8888 dbnative.set(8888, "testglobal ", "1 ") # ObjectScript equivalent: set globalValue = $get( ^testglobal( "1 ")) globalValue = dbnative.get( "testglobal ", "1 ") print( "The value of testglobal is ", globalValue) print() print( " [2 Iterating over a global ] ") # modify global to iterate over # ObjectScript equivalent: set ^testglobal( "1 ") = 8888 # ObjectScript equivalent: set ^testglobal( "2 ") = 9999 dbnative.set(8888, "testglobal ", "1 ") dbnative.set(9999, "testglobal ", "2 ") Iter = dbnative.iterator( "testglobal ") print( "walk forwards ") 了解有关 IRIS Native 的更多信息 for subscript, value in Iter.items(): print( "subscript= {}, value={} ".format(subscript, value)) print() print( " [3. Calling a class method ] ") # calling a class method # ObjectScript equivalent: set returnValue = ##class(%Library.Utility).Date(5) returnValue = dbnative.classMethodValue( "%Library.Utility ", "Date ", 5) print(returnValue) # close connection connection.close() 示例代码分为三个部分: 第一部分展示了如何设置一个 global 的值以及稍后如何检索它。这部分里面执行的命令等同于 ObjectScript 的 SET 和 GET 命令。 第二部分展示了如何迭代 global 的子节点,类似于 ** $ORDER** ObjectScript 函数。 第三部分展示了如何使用 IRIS Native 从您的 Python 应用程序调用 ObjectScript 类方法。 注意: ObjectScript中的 Globals 以插入符号( ^)开头。在使用 InterSystems IRIS Native API 的 Python 应用程序中,这不是必需的。 运行练习 现在您已经准备好运行演示应用程序了。如果示例执行成功,您应该会看到带有示例代码结果的打印输出: [1. Setting and getting a global ] The value of testglobal(1) is 8888 [2.Iterating over a global ] walk forwards subscript=1, value=8888 subscript=2, value=9999 [3. Calling a class method ] Jan 30, 2018 确认管理门户(Management Portal)中的变更 接下来,使用以下程序在管理门户(Management Portal)中确认您的结果: 使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中为您的实例描述的 URL,在浏览器中打开您的实例的管理门户(Management Portal)。 <span id="3_Learn_More_About_IRIS_Native" class="anchor"></span>如果您不在代码指定的命名空间中,请切换到该命名空间。 导航到 Globals 页面(System Explorer(系统资源管理器) > Globals)。您应该会看到示例代码中创建的 testglobal global。点击 View(查看)来查看其内容。您应该会看到 global 的两个节点: ^testglobal(1) = 8888 和 ^testglobal(2) = 9999。 了解有关 IRIS Native 的更多信息 有关 IRIS Native、globals 和 InterSystems IRIS 的更多信息,请参见:Using the Native API for Python(《使用 Native API for Python》) 了解有关 IRIS Native 的更多信息 Using Globals(《使用 Globals》)
文章
Michael Lei · 七月 20, 2022

如何将IRIS的启动/停止状态输出到一个文件中

IRIS 命令qlist或list可以用来把输出结果输出到一个文件。 qlist的结果以文本格式输出,以^为分隔符。 第三部分,以^为界,包含运行状态数据。 $ iris qlist IRIS > iris.log $ cat iris.log IRIS^/Applications/iris^2022.1.0.164.0^running, since Thu Apr 7 16:37:03 2022^iris.cpf^1972^52773^0^alert^IRIS^^^/Applications/iris 在列表的情况下,以status:为前缀的一行包含运行状态数据。 对于基于Unix的操作系统 $ iris list IRIS > iris.log $ cat iris.log Configuration 'IRIS' (default) directory: /Applications/iris versionid: 2021.2.0.650.0 datadir: /Applications/iris conf file: iris.cpf (SuperServer port = 1972, WebServer = 80) status: running, since Thu Apr 7 16:37:03 2022 state: alert product: InterSystems IRIS Windows 环境下,不显示STATE行。 C:\InterSystems\IRIS\bin>iris listInstance 'IRIS' (Development installation)  directory: 'C:\InterSystems\IRIS' versionid: '2021.2.0.650.0' conf file: 'c:\intersystems\iris\iris.cpf' (SuperServer port = 1972, WebServer port = 80) status : 'running, since Wed Jun 1 19:26:09 2022' Product : InterSystems IRIS
文章
Jingwei Wang · 十一月 29, 2022

配置 DSN

在Windows配置DSN 确认InterSystems ODBC客户端驱动已安装 InterSystems IRIS ODBC驱动会随着InterSystems IRIS安装包默认安装。 如果没有随着InterSystems IRIS安装,请由此下载驱动,下载后执行.exe文件进行安装。 定义DSN(Data Source Names) 打开Administrative Tools 打开ODBC Data Sources Administrator(32-bit 或者 64-bit) 选择‘System DSN’,点击右边 ‘Add’,弹出‘Create New Data Source’窗口。 选择一个InterSystems IRIS 安装版本的ODBC驱动,点击‘Finish’ 如下图所示,输入驱动名称,IP地址,端口号(使用超级服务端口号),命名空间,用户名和密码。 然后点击 'Test Connection' 进行连接测试 在Linux配置DSN 确认InterSystems ODBC客户端驱动已安装 InterSystems IRIS ODBC驱动会随着InterSystems IRIS安装包默认安装。 如果没有随着InterSystems IRIS安装,请先安装ODBC驱动 Linux 点击下载ODBC驱动 创建一个文件夹,例如/usr/irisodbc,存放刚刚下载的.tar文件 解压.tar文件,执行ODBCinstall安装脚本,irisodbc.ini会被创建: # tar xvf ODBC-2022.1.0.209.0-lnxrharm64.tar.gz # ./ODBCInstall Mac 执行以下命令安装unixODBC brew install unixODBC 配置DSN - 根据InterSystems IRIS服务器修改odbcinst.ini文件的配置信息 [ODBC Data Sources] User = User Userunixodbc = Userunixodbc ​ [User] Driver = /isc/iris/bin/libirisodbc35.so Description = IRIS ODBC driver Host = localhost Namespace = IRISAPP UID = username Password = pws Port = 51773 Protocol = TCP Query Timeout = 1 Static Cursors = 0 Trace = off TraceFile = iodbctrace.log Authentication Method = 0 Security Level = 2 Service Principal Name = iris/localhost.domain.com ​ [Userunixodbc] Driver = /isc/iris/bin/libirisodbcur6435.so Description = IRIS ODBC driver Host = localhost Namespace = IRISAPP UID = username Password = pws Port = 51773 Protocol = TCP Query Timeout = 1 Static Cursors = 0 Trace = off TraceFile = iodbctrace.log Authentication Method = 0 Security Level = 2 Service Principal Name = iris/localhost.domain.com 您好,问下配置sqlsever的odbc应该怎么配置呢 您是在什么环境配置呢?windows的话,照着上面的截图配置,Linux的话需要安装配置unixODBC。 linux下,自己安装了unixODBC,安装之后配置了DSN,在页面中怎么才能选择到自己安装配置的DSN呢
文章
Claire Zheng · 二月 13, 2023

【GS22 视频】如何确保企业长青?InterSystems CEO Terry:保持愿景、热情与专注

InterSystems 2022年全球峰会上,InterSystems 创始人兼 CEO Terry Ragon 分享了如何才能使企业获得持续发展。他是“愿景领导公司”的坚定信徒,他认为,愿景、热情与专注对于推动业务发展、保持企业创新活力至关重要。InterSystems 的愿景是:我们是一家提供创新数据技术服务的公司,对卓越和客户成功充满激情。
公告
Claire Zheng · 三月 12, 2021

3月19日直播预告:聚焦InterSystems 数据平台与WRC服务

亲爱的社区开发者们, 北京时间3月19日下午14:00-16:00,我们将举办一次线上直播,聚焦InterSystems 数据平台与WRC服务,为您答疑解惑!今天隆重向大家介绍此次直播的主讲人! 主讲人:刘皆良 演讲主题:告诉你从Caché数据库升级到InterSystems IRIS数据平台的N个理由 本次演讲将分别从数据引擎的性能提升、互操作性的支持提升以及IntegratedML(自动化机器学习)、API全生命周期管理器等全新应用,来全方位多维度阐述从Caché数据库升级到InterSystems IRIS数据平台N个理由。 主讲人:杨乐乐 演讲主题:InterSystems全球响应中心服务介绍 通过演讲您将了解到InterSystems全球响应中心(Worldwide Response Center)提供的全面服务以及独特之处,更重要的是,作为InterSystems用户,您将如何获取快速响应、并高效得到您想要的技术支持服务! 欢迎点击进入直播!
文章
姚 鑫 · 七月 14, 2022

第五章 使用嵌入式 Python (二)

# 第五章 使用嵌入式 Python (二) ## 在 Python 脚本文件 (.py) 中 还可以使用 `irispython` 命令执行 `Python` 脚本。 考虑 `Windows` 系统上的文件 `C:\python\test.py`,其中包含以下代码: ```python # print the members of the Fibonacci series that are less than 10 print('Fibonacci series:') a, b = 0, 1 while a < 10: print(a, end=' ') a, b = b, a + b # import the iris module and show the classes in this namespace import iris print('\nInterSystems IRIS classes in this namespace:') status = iris.cls('%SYSTEM.OBJ').ShowClasses() print(status) ``` 可以从命令行运行 `test.py`,如下所示: ```python C:\InterSystems\IRIS\bin>set IRISUSERNAME = C:\InterSystems\IRIS\bin>set IRISPASSWORD = C:\InterSystems\IRIS\bin>set IRISNAMESPACE = USER C:\InterSystems\IRIS\bin>irispython \python\test.py Fibonacci series: 0 1 1 2 3 5 8 InterSystems IRIS classes in this namespace: User.Company User.Person 1 ``` 在基于 `UNIX` 的系统上,使用 `export` 而不是 `set`。 ```python /InterSystems/IRIS/bin$ export IRISUSERNAME= /InterSystems/IRIS/bin$ export IRISPASSWORD= /InterSystems/IRIS/bin$ export IRISNAMESPACE=USER /InterSystems/IRIS/bin$ ./irispython /python/test.py Fibonacci series: 0 1 1 2 3 5 8 InterSystems IRIS classes in this namespace: User.Company User.Person 1 ``` 注意:如果运行 `import iris` 并看到一条消息说 `IRIS_ACCESSDENIED`,请启用 `%Service_Callin`。在管理门户中,转至 `System Administration > Security > Services`,选择 `%Service_CallIn`,然后选中启用服务框。 # 在 IRIS 类的方法中 可以使用 `Language` 关键字在 `IRIS` 类中编写 `Python` 方法。然后,可以调用该方法,就像调用用 `ObjectScript` 编写的方法一样。 例如,使用 `Python` 编写的具有类方法的以下类: ```python Class User.EmbeddedPython { /// Description ClassMethod Test() As %Status [ Language = python ] { # print the members of the Fibonacci series that are less than 10 print('Fibonacci series:') a, b = 0, 1 while a < 10: print(a, end=' ') a, b = b, a + b # import the iris module and show the classes in this namespace import iris print('\nInterSystems IRIS classes in this namespace:') status = iris.cls('%SYSTEM.OBJ').ShowClasses() return status } } ``` 可以从 `ObjectScript` 调用此方法: ```python USER>set status = ##class(User.EmbeddedPython).Test() Fibonacci series: 0 1 1 2 3 5 8 InterSystems IRIS classes in this namespace: User.Company User.EmbeddedPython User.Person USER>write status 1 ``` 或来自 `Python`: ```python >>> import iris >>> status = iris.cls('User.EmbeddedPython').Test() Fibonacci series: 0 1 1 2 3 5 8 InterSystems IRIS classes in this namespace: User.Company User.EmbeddedPython User.Person >>> print(status) 1 ``` ## 在 SQL 函数和存储过程中 还可以通过在 `CREATE` 语句中指定参数 `LANGUAGE PYTHON` 来使用 `Embedded Python` 编写 `SQL` 函数或存储过程,如下所示: ```python CREATE FUNCTION tzconvert(dt DATETIME, tzfrom VARCHAR, tzto VARCHAR) RETURNS DATETIME LANGUAGE PYTHON { from datetime import datetime from dateutil import parser, tz d = parser.parse(dt) if (tzfrom is not None): tzf = tz.gettz(tzfrom) d = d.replace(tzinfo = tzf) return d.astimezone(tz.gettz(tzto)).strftime("%Y-%m-%d %H:%M:%S") } ``` 该代码使用 `Python datetime` 和 `dateutil` 模块中的函数。 以下 `SELECT` 语句调用 `SQL` 函数,将当前日期/时间从东部时间转换为协调世界时 (`UTC`)。 ```sql SELECT tzconvert(now(), 'US/Eastern', 'UTC') ``` 该函数返回如下内容: ```sql 2021-10-19 15:10:05 ```
问题
Michael Lei · 三月 1, 2022

如何重置 Web Gateway 用户名和密码

Hi Community, C:\InterSystems\IRISHealth\CSP\bin.csp.cni 有用户名, 但密码被加密了,如何解密或者重置? 谢谢! 1. Open <IRIS>\CSP\bin\CSP.ini 2. Edit Username/Password in [LOCAL] section. 3. Using Management Portal or ^SECURITY routine set the same user as (2) if they do not match. 4. Restart InterSystems IRIS.
公告
Claire Zheng · 四月 27, 2021

恭喜!InterSystems开发者工具编程大赛优胜者已产生!

亲爱的社区开发者们: InterSystems开发者工具编程大赛 顺利结束. 感谢大家对激动人心的编码马拉松的支持参与! 是时候宣布此次竞赛优胜者啦! 掌声送给以下参赛者和他们贡献的优秀应用! 🏆 专家提名奖(Experts Nomination)- 获奖者由我们特别挑选的专家团选出: 🥇 第一名,奖金$4,000 ,项目 Server Manager for VSCode ,提交者 @John.Murray 🥈 并列第二名,奖金 $1,500 ,项目 Config-API ,提交者 @Lorenzo.Scalese 🥈 并列第二名,奖金 $1,500 ,项目 zpm-explorer ,提交者 @Henrique.GonçalvesDias 和 @José.Pereira 🏆 社区提名奖(Community Nomination) - 获得总投票数最多的应用: 🥇 第一名,奖金 $750 ,项目 Server Manager for VSCode ,提交者 @John.Murray 🥈 第二名,奖金 $500 ,项目 zpm-explorer ,提交者 @Henrique.GonçalvesDias and @José.Pereira 🥉 第三名,奖金 $250 ,项目 Config-API ,提交者 @Lorenzo.Scalese 恭喜所有获奖者和参赛者! 感谢大家对本次大赛的关注和在本次大赛中付出的努力! 下一场竞赛是什么时候呢? 我们即将发布最新竞赛信息,敬请期待!
文章
Michael Lei · 四月 25, 2022

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

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

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

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

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

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

现有系统通过使用InterSystems FHIR 适配器提供 FHIR 服务 - 简介

想必大家都听说过 FHIR 是解决系统间所有互操作性和兼容性问题的灵丹妙药和解决方案。就在这里,我们可以看到他手持一份 FHIR 资源,愉快地享受其中: 但对于我们这些普通人,我们将做一个小小的介绍。 什么是 FHIR? 让我们直接进入定义:FHIR(Fast Healthcare Interoperability Resource)是由HL7(Health Level 7标准组)开发的一种互操作性标准,旨在实现医疗行业中不同系统之间的电子医疗数据交换。 FHIR 从根本上基于哪些技术? 主要是通过 REST API 和 JSON 格式进行 HTTP 调用的结合(尽管它可以是 XML 以及我们可用的任何其他通信,具体根据我们的使用情况)。 我们如何与 FHIR 合作? 一般来说,最简单的方式是拥有一个FHIR服务器,我们将使用诸如GET(从服务器获取数据)、PUT(更新数据)、POST(保存数据)和DELETE(删除数据)等HTTP调用与其通信。 FHIR处理了“资源”(Resource)的概念,用于在服务器和客户端之间发送和接收数据。这些资源旨在涵盖系统间80%的互通性需求。在这里,我们可以看到默认情况下可用的资源图示。 如您所见,每个资源都附带一个表示资源成熟度的数字或字母(其中N = 正式)。如果您访问官方的FHIR文档,您将能够获取到众多示例。 资源的一种扩展是“Bundle”,简言之,它是一组封装在同一JSON中的资源,用于对我们的服务器进行查询以及执行批量或事务中的CRUD操作。 完美,FHIR听起来很棒,但是...我们如何将其应用到我们的传统系统中,这些系统并不是按照FHIR定义的标准设计的呢? FHIR适配器 InterSystems 向其客户提供 FHIR 适配器功能,这将使他们能够在其传统现有系统之上设置业务层,开发所谓的 FHIR Façade。在接下来的文章中,我们将了解如何使用 FHIR 对象并与使用 PostgreSQL 数据库的 HIS(健康信息服务)系统的小型模拟进行交互。 为了理解这些解释,您可以使用一个 OpenExchange 应用程序,它将自动设置我们将在未来几天遵循的示例: 研讨进程 在接下来的文章中,我们将讨论以下几点: IRIS 实例中的 FHIR 适配器架构 在我们的 HIS 中注册患者类型资源。 使用 REST API 调用按 其ID 查询患者。 在我们的 HIS 中注册包含患者和医疗中心数据的捆绑包。 因此,如果您有兴趣...请在未来几天继续关注社区!
文章
Lilian Huang · 十一月 24, 2023

现有系统通过使用InterSystems FHIR 适配器提供 FHIR 服务 - 架构

我们继续使用FHIR适配器的示例,在本文中,我们将回顾如何在我们的IRIS实例中进行配置以及安装的结果。 配置项目的步骤与官方文档中所示的相同,您可以直接在此处查看。好吧,让我们开始工作吧! 安装 正如您在与本文相关的项目中看到的,我们将 IRIS 实例部署在 Docker 中,因此初始配置的主要部分将在 Dockerfile 中完成。别担心,我们不会详细介绍 Docker 配置。 要安装 FHIR 适配器,我们只需: 在我们的 IRIS 实例中使用互操作性功能创建一个名为ADAPTER的命名空间。 从 IRIS 终端访问我们的命名空间并执行以下命令。 set status = ##class (HS.FHIRServer.Installer).InteropAdapterConfig( "/Adapter/r4" ) 在我们的例子中,我们定义了将接收 REST 请求的 IRIS 端点的 URL 为/Adapter/r4 。 安装结果 FHIR 适配器安装完成后,我们可以查看 IRIS 实例中发生的情况。为此,我们首先查看 Web 应用程序菜单(系统管理 -> 安全 -> 应用程序 -> Web 应用程序) 正如我们所看到的,一个新的 Web 应用程序已添加到列表中,表明它对应于我们的 ADAPTER 命名空间。让我们访问它以更详细地查看其配置。 正如我们所看到的,创建的 Web 应用程序启用了 REST 调用的接收,并且负责管理这些调用的类是HS.FHIRServer.HC.FHIRInteropAdapter 。我们看到的另一个细节是密码身份验证和未经身份验证的调用均已启用。对于我们的示例,我们不会修改任何内容,但如果在任何生产环境中启用 JWT 身份验证,那就会很有趣。 让我们回顾一下命名空间的制作过程中发生了什么。 安装过程已经创建并部署了两个新组件,即业务服务 InteropService 和业务操作 InteropOperation。在我们的示例中,我们将仅使用 InteropService,它将负责转发接收到的FHIR消息,该消息将是类 HS.FHIRServer.Interop.Request 的实例,我们将在其上进行操作以提取接收到的信息。InteropService必须接收的响应以返回响应JSON将是 HS.FHIRServer.Interop.Response 类型的实例。 我们的“HIS”的配置 我们在上一篇文章中提到,我们将模拟与一个理论上的HIS的互操作性,为此,我们在 Docker 中部署了一个 PostgreSQL 实例以及一系列测试表。为了启动对此外部数据库的查询,我们包含并配置了 Java 网关,以便我们可以通过 JDBC 建立必要的连接。我们还包含了用于连接 PostgreSQL 的 JAVA 库。 让我们看看负责此连接的生产组件。 我们将 JavaGateway 配置为指向我们在 Docker 中部署的 Java 虚拟机: 业务操作FromAdapterToHIS将负责对我们的PostgreSQL进行查询,让我们看看它的配置: 正如我们所看到的,它使用EnsLib.SQL.OutboundAdapter作为 Adapter 类,这将允许我们直接连接到“HIS”的数据库。 DSN 值将是我们的 Docker 中部署的 PostgreSQL 实例的连接字符串。 总之... 让我们回顾一下我们在本文中所做的事情: 在我们的命名空间中安装FHIRAdapter并检查我们是否有一个端点可以将 FHIR 消息发送到。 检查我们的命名空间(InteropService 和 InteropOperation)生产中的缺陷所创建的组件。 创建与我们的“HIS”数据库通信所需的组件。 通过这些步骤,我们已准备好开始接收 JSON 格式的 FHIR 消息。在下一篇文章中,我们将创建负责处理接收到的消息的业务流程,并实现我们需要查阅和编写有关 PostgreSQL 数据库的不同功能。 非常感谢您的关注!
文章
Claire Zheng · 二月 9

InterSystems开发者社区中文版恭祝开发者们龙年大吉!

农历甲辰龙年迤逦而来,InterSystems开发者社区在过去的一年里得到了各位开发者的厚爱与支持,在这新的一年里,恭祝大家龙行龘龘,前程朤朤!