文章 Michael Lei · 七月 6, 2021 2m read

如果一张图片胜过千言万语,那么一段视频又价值几何? 当然胜过敲一个帖子。

请在 InterSystems Developers YouTube 观看我的“Coding talks”:

1. 使用 Yape 分析 InterSystems IRIS 系统性能。 第 1 部分:安装 Yape

在容器中运行 Yape。

2. Yape 容器 SQLite iostat InterSystems

提取和绘制 pButtons 数据,包括时间范围和 iostat。

0
0 209
文章 Michael Lei · 七月 6, 2021 16m read

供应商或内部团队要求说明如何为 VMware vSphere 上运行的_大型生产数据库_进行 CPU 容量规划。

总的来说,在调整大型生产数据库的 CPU 规模时,有几个简单的最佳做法可以遵循:

  • 为每个物理 CPU 核心规划一个 vCPU。
  • 考虑 NUMA 并按理想情况调整虚拟机规模,以使 CPU 和内存对于 NUMA 节点是本地的。
  • 合理调整虚拟机规模。 仅在需要时才添加 vCPU。

通常,这会引出几个常见问题:

  • 由于使用超线程技术,VMware 创建的虚拟机的 CPU 数量可以是物理 CPU 数量的两倍。 那不就是双倍容量吗? 创建的虚拟机不应该有尽可能多的 CPU 吗?
  • 什么是 NUMA 节点? 我应该在意 NUMA 吗?
  • 虚拟机应该合理调整规模,但我如何知道什么时候合理?

我以下面的示例回答这些问题。 但也要记住,最佳做法并不是一成不变的。 有时需要做出妥协。 例如,大型生产数据库虚拟机很可能不适合 NUMA 节点,但我们会看到,其实是没问题的。 最佳做法是指必须针对应用程序和环境进行评估和验证的准则。

0
0 1042
问题 deng hang · 六月 21, 2021

除了objectscript 自带的 list,array 数据结构以外,是否有存在其它已经实现好的数据结构,类似 java 里面 collection包一样,是否有已经实现好的排序工具,有没有针对集合类的sort工具。

6
0 332
文章 姚 鑫 · 七月 5, 2021 7m read

[toc]

第二十八章 定制SAX解析器创建自定义内容处理程序

创建自定义内容处理程序

如果直接调用InterSystems IRIS SAX解析器,则可以根据自己的需要创建自定义内容处理程序。本节讨论以下主题:

  • Overview
  • 要在内容处理程序中自定义的方法的描述
  • %XML.SAX.Parser类中解析方法的参数列表摘要
  • 示例

创建自定义内容处理程序概述

要定制InterSystems IRIS SAX解析器导入和处理XML的方式,请创建并使用定制的SAX内容处理程序。具体地说,创建%XML.SAX.ContentHandler的子类。然后,在新类中,重写任何默认方法以执行所需的操作。在解析XML文档时使用新的内容处理程序作为参数;为此,需要使用%XML.SAX.Parser类的解析方法。

此操作如下图所示:

创建和使用自定义导入机制的过程如下:

  1. 创建扩展%XML.SAX.ContentHandler的类。
  2. 在该类中,包括希望覆盖的方法,并根据需要提供新定义。
  3. 在使用%XML.SAX.Parser的分析方法之一(即ParseFile()ParseStream()ParseString()ParseURL())编写读取XML文档的类方法。

调用分析方法时,请将自定义内容处理程序指定为参数。

SAX内容处理程序的可定制方法

0
0 266
文章 Qianzhu Liu · 七月 4, 2021 4m read

多学科协作诊疗(Multidisciplinary TeamMDT)是当今医学领域的重要医学模式之一,其主要目的在于:通过不同专业的医务人员共同参与、联合决策,针对特定患者和疾病,提供临床最佳、管理最细、资源最整、效率最高的诊疗方案。该模式起源于20世纪80年代,在欧美国家已运行多年,尤其在肿瘤和重症领域应用较为广泛和成熟。近些年,越来越多的中国医疗机构(包括公立和私立)也开始尝试和完善MDT。虽然在具体实施形式和细节角色流程上仍有争议,但是多数报道患者满意度和诊疗结果综合评分提升。因此,值得长期探索和实践。

本文以典型的MDT工作方案(图1)作为模版,阐述医学信息系统如何助力MDT的管理和运行。图中数字编号即为章节题目,将流程与系统功能结合,进行深入探讨。

1 MDT工作方案

1. 开展MDT的必备资源

0
0 712
文章 Michael Lei · 七月 4, 2021 3m read

大家好, 在本文中,我比较了 Gartner 最新DBMS 魔力象限中的主要领先数据库产品的功能。 请见按现有功能数量排序的列表。 1. InterSystems IRIS 2020.3 - 60 个功能 (https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls) 2. Oracle Database 21c - 54 个功能 (https://docs.oracle.com/en/database/oracle/oracle-database/index.html) 3. Microsoft SQL Server - 45 个功能 (https://docs.microsoft.com/en-us/sql/sql-server/?view=sql-server-ver15) 4. AWS Aurora - PostgreSQL - 34 个功能 (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_Auror…)

0
0 324
文章 Michael Lei · 七月 4, 2021 9m read

(ECP) Caché 出色的可用性和扩展特性之一是企业缓存协议 (ECP)。 在应用程序开发过程中,如对使用 ECP 的分布式处理加以考虑,可以横向扩展 Caché 应用程序的架构。 应用程序处理可以调整为非常高的速率,处理能力从单个应用程序服务器扩展到最多 255 个应用程序服务器,并且不需要任何应用程序更改。

在我参与的 TrakCare 部署中,ECP 已广泛使用多年。 十年前,主要供应商之一的一台“大型”x86 服务器可能总共只有八个核心。 对于大型部署来说,ECP 是横向扩展商业服务器处理能力的方式,不适合单台昂贵的大型企业服务器。 即使是高核心数的企业服务器也有限制,因此 ECP 也用于扩展这些服务器上的部署。

如今,大多数的新 TrakCare 部署或升级到当前硬件_不需要 ECP_ 即可扩展。 目前的双插槽 x86 生产服务器可以拥有数十个核心和巨大容量的内存。 我们看到,在最近的 Caché 版本中,TrakCare 以及许多其他 Caché 应用程序具有可预测的线性扩展能力,能够随着单台服务器中 CPU 核心数量和内存的增加而支持逐渐增多的用户和事务。 在现场,我看到大多数的新部署都是虚拟化的,即使如此,虚拟机也可以根据需要扩展到主机服务器的规模。 如果资源需求超过单个物理主机可以提供的资源,则使用 ECP 进行横向扩展。

0
0 312
文章 姚 鑫 · 七月 4, 2021 4m read

第二十七章 定制SAX解析器的执行自定义实体解析

执行自定义实体解析

XML文档可能包含对外部DTD或其他实体的引用。默认情况下,InterSystems IRIS尝试查找这些实体的源文档并解析它们。要控制InterSystems IRIS解析外部实体的方式,请使用以下步骤:

  1. 定义实体解析程序类。

此类必须在扩展%XML.SAX.EntityResolver,并且必须实现 resolveEntity()方法,该方法具有以下签名:

method resolveEntity(publicID As %Library.String, systemID As %Library.String) as %Library.Integer

每当XML处理器找到对外部实体(如DTD)的引用时,就会调用该方法;这里的public ID和systemID是该实体的Public和系统标识符字符串。

该方法应获取实体或文档,将其作为流返回,然后在将流包装在%XML.SAX.StreamAdapter的实例中。此类提供了用于确定流特征的必要方法。

如果无法解析该实体,则该方法应返回$$$NULLOREF ,以向SAX解析器指示该实体无法解析)。

尽管方法签名指示返回值为%Library.Integer,但该方法应返回%XML.SAX.StreamAdapter的实例或该类的子类。

0
0 141
文章 姚 鑫 · 七月 3, 2021 7m read

第二十六章 定制 SAX解析器的使用方式

每当InterSystems IRIS读取XML文档时,它都会使用InterSystems IRIS SAX(Simple API For XML)解析器。本章介绍用于控制系统间IRIS SAX解析器的选项。

关于IRIS SAX解析器

每当InterSystems IRIS读取XML文档时,都会使用InterSystems IRIS SAX解析器。

它是一个事件驱动的XML解析器,读取XML文件,并在找到感兴趣的项(如XML元素的开始、DTD的开始等)时发出回调。

(更准确地说,解析器与内容处理程序协同工作,内容处理程序发出回调。只有在自定义SAX接口时,此区别才很重要,如本章后面的“创建自定义内容处理程序”中所述。)

解析器使用标准Xerces-C++库,该库符合XML1.0推荐标准和许多相关标准。

可用的解析器选项

可以通过以下方式控制SAX解析器的行为:

  • 可以设置标志来指定要执行的验证和处理类型。

请注意,解析器始终检查文档是否为格式良好的XML文档。

0
0 229
文章 姚 鑫 · 七月 2, 2021 5m read

第二十五章 添加和使用XSLT扩展函数

自定义错误处理

当出现错误时,XSLT处理器(XalanSaxon)执行当前错误处理程序的error()方法,将消息作为参数发送到该方法。类似地,当发生致命错误或警告时,XSLT处理器会根据需要执行datalError()Warning()方法。

对于所有这三种方法,默认行为是将消息写入当前设备。

要自定义错误处理,请执行以下操作:

  • 对于XalanSaxon处理器,在创建%XML.XSLT.ErrorHandler的子类。在这个子类中,根据需要实现Error()FatealError()Warning()方法。

这些方法中的每一个都接受单个参数,即包含由XSLT处理器发送的消息的字符串。

这些方法不返回值。

  • 要在编译样式表时使用此错误处理程序,请创建子类的实例,并在编译样式表时在参数列表中使用它。
  • 若要在执行XSLT转换时使用此错误处理程序,请创建子类的实例,并在使用的Transform方法的参数列表中使用它。

指定样式表使用的参数

要指定样式表使用的参数,请执行以下操作:

  1. 创建%ArrayOfDataTypes的实例在。
  2. 调用此实例的SetAt()方法将参数及其值添加到此实例。对于SetAt(),将第一个参数指定为参数值,将第二个参数指定为参数名称。

根据需要添加任意多个参数。

0
0 168
文章 姚 鑫 · 七月 1, 2021 3m read

第二十四章 执行XSLT转换

执行XSLT转换

要执行XSLT转换,请执行以下操作:

  • 如果使用的是Xalan处理器(对于XSLT 1.0),请使用%XML.XSLT.Transformer的以下类方法之一:
    • TransformFile()——转换给定XSLT样式表的文件。
    • TransformFileWithCompiledXSL()——转换一个文件,给定一个已编译的XSLT样式表。
    • TransformStream()——转换给定XSLT样式表的流。
    • TransformStreamWithCompiledXSL()——转换一个流,给定一个已编译的XSLT样式表。
    • TransformStringWithCompiledXSL()——转换给定已编译XSLT样式表的字符串。
  • 如果使用Saxon处理器(用于XSLT 2.0),请使用%XML.XSLT2.Transformer的以下类方法之一:
    • TransformFile()——转换给定XSLT样式表的文件。
    • TransformFileWithCompiledXSL()——转换一个文件,给定一个已编译的XSLT样式表。
    • TransformStream()——转换给定XSLT样式表的流。
    • TransformStreamWithCompiledXSL()——转换一个流,给定一个已编译的XSLT样式表。
0
0 162
文章 姚 鑫 · 六月 30, 2021 7m read

第二十三章 执行XSLT转换概述

XSLT(Extensible StyleSheet Language Transformations,可扩展样式表语言转换)是一种基于XML的语言,用于描述如何将给定的XML文档转换为另一个XML或其他“人类可读”的文档。可以使用%XML.XSLT%XML.XSLT2包中的类来执行XSLT 1.02.0转换。

注意:使用的任何XML文档的XML声明都应该指明该文档的字符编码,并且文档应该按照声明的方式进行编码。如果未声明字符编码, IRIS将使用本书前面的“输入和输出的字符编码”中描述的默认值。如果这些默认值不正确,请修改XML声明,使其指定实际使用的字符集。

在IRIS中执行XSLT转换概述

IRIS提供两个XSLT处理器,每个处理器都有自己的API:

  • Xalan处理器支持XSLT 1.0XML.XSLT包为该处理器提供API。
  • Saxon处理器支持XSLT 2.0%XML.XSLT2程序包为该处理器提供API。

XML.XSLT2 API通过到XSLT 2.0网关的连接向Saxon发送请求。网关允许多个连接。这意味着,例如,可以将两个独立的 IRIS进程连接到网关,每个进程都有自己的一组编译样式表,同时发送转换请求。

0
0 304
文章 姚 鑫 · 六月 29, 2021 9m read

第二十二章 计算XPath表达式

XPath(XML路径语言)是一种基于XML的表达式语言,用于从XML文档获取数据。使用类中的%XML.XPATH.Document,可以轻松地计算XPath表达式(给定提供的任意XML文档)。

注意:使用的任何XML文档的XML声明都应该指明该文档的字符编码,并且文档应该按照声明的方式进行编码。如果未声明字符编码,InterSystems IRIS将使用本书前面的“输入和输出的字符编码”中描述的默认值。如果这些默认值不正确,请修改XML声明,使其指定实际使用的字符集。

IRIS中XPath表达式求值概述

要使用InterSystems IRIS XML支持使用任意XML文档计算XPath表达式,请执行以下操作:

  1. 创建%XML.XPATH.Document的实例。为此,请使用以下类方法之一:CreateFromFile()CreateFromStream()CreateFromString()``。使用这些方法中的任何一种,都可以将输入XML文档指定为第一个参数,并接收%XML.XPATH.Document的一个实例作为输出参数。

这一步使用内置的XSLT处理器解析XML文档。

  1. 使用%XML.XPATH.Document实例的EvaluateExpression()方法。对于此方法,需要指定节点上下文和要计算的表达式。
0
0 210
问题 e e · 六月 7, 2021

为什么我用webservice上传文件比csp上传文件快?

webservice用的soap协议也得走http呀。csp直接处理http,少了xml的封装,按理来说应该更快。

经测试,1M的文件,csp慢了0.1s左右。在网关连接到1972后,有0.1s左右的停滞,不知道原因。

有什么办法能够使csp的文件上传速度比webservice快吗?

1
0 380
文章 姚 鑫 · 六月 28, 2021 6m read

第二十一章 使用%XML.TextReader 导航文档

导航文档

要在文档中导航,请使用文本阅读器的以下方法:Read()ReadStartElement()MoveToAttributeIndex()MoveToAttributeName()MoveToElement()MoveToContent()Rewind()

导航到下一个节点

要移动到文档中的下一个节点,请使用read()方法。Read()方法返回TRUE值,直到没有更多节点可读为止(即,直到到达文档末尾)。前面的示例在如下所示的循环中使用了此方法:

 While (textreader.Read()) {

...

 }

导航到特定元素的第一个匹配项

可以移动到文档中特定元素的第一个匹配项。为此,请使用ReadStartElement()方法。除非找不到元素,否则此方法返回TRUE。如果未找到该元素,则该方法到达文件末尾。

ReadStartElement()方法有两个参数:元素的名称和命名空间URI(可选)。请注意,类中的%XML.TextReader不会对命名空间前缀进行任何处理。因此,ReadStartElement()方法将以下两个元素视为具有不同的名称:

0
0 147
文章 Michael Lei · 六月 27, 2021 1m read

下载网址:

https://hub.docker.com/r/yape/yape/

$ docker container run --rm -v "$(pwd)":/data yape/yape --version
yape 2.2.6
 

在以下网址查看自述文件:

https://github.com/murrayo/yape

更改包括:

  • 恢复配置文件,进行了更多更改使 x 和 y 轴更智能。
  • 更新了配置文件中的线条样式选择。
  • 解决了 yyyy 日期和 yy 日期或退出的问题。 使窗口标题的日期字符串一致(去掉小数位),在标题中添加短日期。 
  • 提高了 y 轴上小于 10 的值的小数精度,例如 Windows 每次读取时间为秒,而不是 linux 中的毫秒
  • 更新 Python 库后的一些小错误修复。

现在,GitHub 和容器保持同步。

0
0 143
文章 姚 鑫 · 六月 27, 2021 5m read

第二十章 使用%XML.TextReader 节点属性

节点属性

如前所述,类中的%XML.TextReader解析XML文档并创建一个text reader对象,该对象由一组与文档组件相对应的节点组成;节点类型在本章前面的“文档节点”中进行了描述。

当将焦点更改到其他节点时,text reader对象的属性将更新,以包含有关当前检查的节点的信息。本节介绍类中%XML.TextReader的所有属性。

AttributeCount

如果当前节点是元素或属性,则此属性指示元素的属性数。在给定元素中,第一个属性编号为1。对于任何其他类型的节点,此属性为0

Depth

指示文档中当前节点的深度。根元素位于深度1;根元素之外的项位于深度0。请注意,属性与其所属元素的深度相同。同样,错误或警告与导致错误或警告的项的深度相同。

EOF

如果读取器已到达源文档的末尾,则为true;否则为false。

HasAttributes

如果当前节点是一个元素,则如果该元素具有属性,则此属性为true(如果没有属性,则为false)。如果当前节点是属性,则此属性为true。对于任何其他类型的节点,此属性为False。

HasValue

如果当前节点是具有值的节点类型(即使该值为空),则为True。否则,此属性为false。具体地说,对于以下类型的节点,此属性为真:

0
0 160