本周,我将关注 CPU - 主要硬件食物群之一 :) 一位客户请我就以下情况提供建议:他们的生产服务器已接近使用寿命终止,是时候更新硬件了。 他们还考虑通过虚拟化来整合服务器,并希望适当调整裸机或虚拟机的容量规模。 今天我们将关注 CPU,在后面的帖子中,我将介绍适当调整其他主要食物群(内存和 IO)规模的方法。
所以问题是:
- 如何将五年多以前对处理器的应用要求转换成针对当今的处理器?
- 目前的处理器有哪些是合适的?
- 虚拟化如何影响 CPU 容量计划?
本周,我将关注 CPU - 主要硬件食物群之一 :) 一位客户请我就以下情况提供建议:他们的生产服务器已接近使用寿命终止,是时候更新硬件了。 他们还考虑通过虚拟化来整合服务器,并希望适当调整裸机或虚拟机的容量规模。 今天我们将关注 CPU,在后面的帖子中,我将介绍适当调整其他主要食物群(内存和 IO)规模的方法。
所以问题是:
本帖将展示为 InterSystems 数据平台上运行的数据库应用调整共享内存需求(包括 global 和例程缓冲区、gmheap 以及 locksize)的方法,以及在配置服务器和虚拟化 Caché 应用程序时应考虑的一些性能提示。 和以往一样,当我谈到 Caché 时,我指的是所有数据平台(Ensemble、HealthShare、iKnow 和 Caché)。
当我最初开始使用 Caché 时,大多数客户的操作系统是 32 位的,Caché 应用程序的内存有限且昂贵。 通常部署的英特尔服务器只有几个核心,唯一的扩展方式是选择大型服务器,或者使用 ECP 横向扩展。 现在,即使是基本的生产级服务器也具有多个处理器、几十个核心,并且最小内存为 128 或 256 GB,可能达到 TB。 对于大多数数据库安装,ECP 已被遗忘,我们现在可以在单台服务器上大幅提高应用事务处理速率。
关键字:深度学习,Grad-CAM,X 射线,Covid-19,HealthShare,IRIS
在复活节周末,我谈到了一些针对 Covid-19 肺的深度学习分类器。 演示结果还算不错,似乎与当时有关该主题的一些学术研究刊物相吻合。 但它真的足够“好”吗?
最近,我偶然收听了一个关于“机器学习中的可解释性”的在线午餐网络讲座,Don 在演讲的最后谈到了这个分类结果:

上图也出现在 “Why Should I Trust You?” Explaining the Predictions of Any Classifier 这篇研究论文中。 我们可以看到,分类器实际上经过训练,以背景像素(如雪等野生环境)作为主要输入,对宠物狗和野狼进行分类。
这关乎我过去的兴趣,现在也激起一些好奇:
这也是篇简单的 10 分钟笔记。 最后,我会谈到为什么它也与我们即将推出的全新 IRIS 和 HealthShare 功能有关。
幸运的是,过去几年中,各种 CNN 衍生分类器都有了方便的工具:
持久化类可以定义一个或多个索引;其他数据结构用于提高操作(如排序或条件搜索)的效率。InterSystems SQL在执行查询时使用这些索引。InterSystems IRIS对象和SQL在执行INSERT、UPDATE和DELETE操作时自动维护索引内的正确值。
标准索引将一个或多个属性值的有序集与包含属性的对象的对象ID值相关联。
例如,假设我们定义了一个简单的持久化MyApp.Person类,该类具有两个文本属性和一个关于其Name属性的索引:
Class MyApp.Person Extends %Persistent
{
Index NameIdx On Name;
Property Name As %String;
Property Age As %Integer;
}
如果我们创建并保存此Person类的多个实例,则生成的数据和索引全局变量类似于:
// data global
^MyApp.PersonD = 3 // counter node
^MyApp.PersonD(1) = $LB("",34,"Jones")
^MyApp.PersonD(2) = $LB("",22,"Smith")
^MyApp.提到临床医生与信息系统的交互,除外“病历书写”,恐怕最常见的临床场景就是“医嘱开具”了。医嘱是临床医生根据患者病史、体征、检验检查结果下达的医学指令,是医疗过程的重要环节和医疗质量的决定因素。在传统纸质医嘱时代,医生每天花费在医嘱开具、修改和确认等环节上的时间甚至接近于其与患者沟通的时间;且尽管上级医生、药剂师、护士等角色都会在不同阶段参与医嘱审核,依然难以避免医嘱差错的发生。因此,医学信息系统被广泛应用后,提升医嘱开具的便捷性和准确性成为其首当其冲的职责。那么,哪些系统功能是临床医生眼中的医嘱“助力神器”呢?
本章介绍InterSystems IRIS®对象和SQL引擎如何利用多维存储(全局变量)来存储持久对象、关系表和索引。
尽管InterSystems IRIS对象和SQL引擎会自动提供和管理数据存储结构,但了解其工作原理的详细信息还是很有用的。
数据的对象视图和关系视图使用的存储结构是相同的。为简单起见,本章仅从对象角度介绍存储。
每个使用%Storage.Persistent存储类(默认)的持久化类都可以使用多维存储(全局变量)的一个或多个节点在InterSystems IRIS数据库中存储其自身的实例。
每个持久化类都有一个存储定义,用于定义其属性如何存储在全局变量节点中。这个存储定义(称为“默认结构”)由类编译器自动管理。
用于存储持久对象的默认结构非常简单:
“D”以形成全局数据的名称,而附加“I”作为全局索引。$list结构中。ID值作为下标。默认情况下,对象ID值是通过调用存储在全局变量数据根(没有下标)的计数器节点上的$Increment函数提供的整数。例如,假设我们定义了一个简单的持久化类MyApp.Person,它有两个文本属性:
Class MyApp.InterSystems IRIS提供了使用全局变量实现完整事务处理所需的基本操作。 InterSystems IRIS对象和SQL自动利用这些特性。 如果直接将事务性数据写入全局变量,则可以使用这些操作。
事务命令是TSTART,它定义事务的开始;
TCOMMIT,它提交当前事务;
和TROLLBACK,它将中止当前事务,并撤消自事务开始以来对全局变量所做的任何更改。
例如,下面的ObjectScript代码定义了事务的开始,设置了一些全局变量节点,然后根据ok的值提交或回滚事务:
/// w ##class(PHA.TEST.Global).GlobalTro(0)
ClassMethod GlobalTro(ok)
{
TSTART
Set ^Data(1) = "Apple1"
Set ^Data(2) = "Berry1"
If (ok) {
TCOMMIT
}
Else {
TROLLBACK
}
zw ^Data
q ""
}
TSTART在InterSystems IRIS日志文件中写入事务开始标记。
这定义了事务的起始边界。
在上面的示例中,如果变量ok为true(非零),则TCOMMIT命令标记事务成功结束,并将事务完成标记写入日志文件。
InterSystems中国正在招聘SE,具体职位需求以英文发布,详情如下,欢迎将简历砸过来 (claire.zheng@intersystems.com)or 私信联系 :)
亲爱的社区开发者们,大家好!
欢迎积极参与新一轮InterSystems开发者竞赛!
🏆 InterSystems 编程大赛:FHIR 加速器 🏆
提交在AWS上使用InterSystems的IRIS FHIR-as-a-service的应用程序,或帮助使用InterSystems IRIS FHIR加速器开发的解决方案。点击这篇文章,了解如何在AWS上申请应用InterSystems IRIS FHIR 加速器服务 (FHIRaaS) 。
时间:2021年5月10日-6月6日
奖金总额: $8,750
👉 点击登录活动页面 👈
大家好!
约翰·霍普金斯大学每天都会发布有关 COVID-19 疫情的新数据。
我在部署于 GCP Kubernetes 上的 docker 中使用 InterSystems IRIS Community Edition 构建了一个简单的 InterSystems IRIS Analytics 仪表板,可显示疾病爆发的关键指标。
关键字:Python,JDBC,SQL,IRIS,Jupyter Notebook,Pandas,Numpy ,机器学习
这是一个用于演示的 5 分钟快速笔记,通过 Jupyter Notebook 中的 Python 3 调用 IRIS JDBC 驱动程序,以经由 SQL 语法从 IRIS 数据库实例读取数据和向 IRIS 数据库实例写入数据。
去年,我发表了关于将 Python 绑定到 Cache 数据库的简要笔记(第 4.7 节)。 如何使用 Python 挂入 IRIS 数据库以将其数据读入 Pandas 数据框和 NumPy 数组进行常规分析,然后再将一些经过预处理或标准化的数据写回 IRIS 中,准备进一步用于 ML/DL 管道,现在可能是时候回顾一些选项和讨论了。
一些立即浮现的快速选项:
这里有漏掉其他选项吗? 我有兴趣尝试任何选项。
若要将全局变量(全部或部分)的内容复制到另一个全局变量(或局部数组)中,请使用ObjectScript Merge命令。
下面的示例演示如何使用Merge命令将OldData全局变量的全部内容复制到NewData全局变量中:
Merge ^NewData = ^OldData
如果合并命令的source参数有下标,则复制该节点及其后代中的所有数据。如果Destination参数有下标,则使用目标地址作为顶级节点复制数据。例如,以下代码:
Merge ^NewData(1,2) = ^OldData(5,6,7)
将^OldData(5,6,7)及其下的所有数据复制到^NewData(1,2)。
大规模事务处理应用程序的一个主要并发瓶颈可能是创建唯一标识符值。例如,考虑一个订单处理应用程序,在该应用程序中,必须为每一张新发票指定一个唯一的标识号。传统的方法是维护某种计数器表。每个创建新发票的进程都会等待获取此计数器上的锁,递增其值,然后将其解锁。这可能会导致对此单个记录的激烈资源争用。
为了解决此问题,InterSystems IRIS提供了ObjectScript $INCREMENT函数。$INCREMENT自动递增全局节点的值(如果该节点没有值,则设置为1)。
Hi Developers!
看看2021年4月的开发者社区新版本有些什么改善, 主要的新特性包括:
This is a release of how did we improve the Developer Community in April 2021. The key features:
以下是详细介绍。
有许多方法可以遍历(迭代)存储在全局变量中的数据。
ObjectScript $Order函数允许顺序访问全局中的每个节点。
$ORDER函数返回给定级别(下标编号)的下一个下标的值。例如,假设定义了以下全局设置:
Set ^Data(1) = ""
Set ^Data(1,1) = ""
Set ^Data(1,2) = ""
Set ^Data(2) = ""
Set ^Data(2,1) = ""
Set ^Data(2,2) = ""
Set ^Data(5,1,2) = ""
要查找第一个第一级下标,我们可以使用:
SET key = $ORDER(^Data(""))
这将返回空字符串(“”)之后的第一个第一级下标。(空字符串用于表示第一个条目之前的下标值;作为返回值,它用于指示没有后续的下标值。)。在本例中,key现在将包含值1。
我们可以通过在$ORDER表达式中使用1或键来查找下一个第一级下标:
SET key = $ORDER(^Data(key))
如果key的初始值为1,则此语句将其设置为2(因为^Data(2)是下一个第一级下标)。再次执行此语句会将key设置为5,因为这是下一个第一级下标。请注意,即使没有直接存储在^Data(5)中的数据,也会返回5。
本章描述了使用多维存储(全局变量)可以执行的各种操作。
在全局节点中存储数据很简单:像对待任何其他变量一样对待全局变量。 区别在于对全局变量的操作是自动写入数据库的。
创建新的全局变量不需要设置工作;只需将数据设置为全局变量即可隐式创建新的全局结构。可以创建全局变量(或全局变量下标)并通过单个操作将数据放入其中,也可以创建全局变量(或下标)并通过将其设置为空字符串将其保留为空。在ObjectScript中,这些操作是使用SET命令完成的。
下面的例子定义了一个名为Color(如果还不存在)的全局变量,并将值“Red”与之关联。
如果已经存在一个名为Color的全局变量,那么这些示例将其修改为包含新信息。
在ObjectScript中:
SET ^Color = "Red"
注意:在应用程序中使用直接全局访变量问时,应制定并遵守命名约定,以防止应用程序的不同部分相互“遍历”;这类似于为类、方法和其他变量开发命名约定。
要在全局下标节点中存储值,只需像设置任何其他变量数组一样设置全局节点的值。如果指定的节点以前不存在,则会创建该节点。如果它确实存在,则其内容将替换为新值。
可以通过表达式(称为全局引用)指定全局内的节点。全局引用由脱字符(^)、全局名称和(如果需要)一个或多个下标值组成。
全局变量使用高度优化的结构存储在物理文件中。管理此数据结构的代码也针对运行InterSystems IRIS的每个平台进行了高度优化。这些优化确保全局操作具有高吞吐量(每单位时间的操作数)、高并发性(并发用户总数)、缓存的高效使用,并且不需要与性能相关的持续维护(例如频繁的重建、重新索引或压缩)。
用于存储全局变量的物理结构是完全封装的;应用程序不会以任何方式担心物理数据结构。
全局变量存储在磁盘上的一系列数据块中;每个块的大小(通常为8KB)是在创建物理数据库时确定的。为了提供对数据的高效访问,InterSystems IRIS维护了一种复杂的B树状结构,该结构使用一组指针块将相关数据块链接在一起。InterSystems IRIS维护一个缓冲池-经常引用的块的内存缓存-以降低从磁盘获取块的成本。
虽然许多数据库技术使用类似B树的结构来存储数据,但InterSystems IRIS在许多方面都是独一无二的:
本章描述全局变量的逻辑视图,并概述全局变量是如何在磁盘上物理存储的。
全局变量是存储在物理InterSystems IRIS®数据库中的命名多维数组。 在应用程序中,全局变量到物理数据库的映射基于当前名称空间——名称空间提供一个或多个物理数据库的逻辑统一视图。
全局名称指定其目标和用途。有两种类型的全局变量和一组单独的变量,称为“进程私有全局变量”:
全局变量的命名约定如下:
^)前缀开头。这个插入符号区分全局变量和局部变量。^)前缀后的第一个字符可以是:
ASCII 65到ASCII 255范围内的字母字符。如果全局名称以“%”开头(但不是“%Z”或“%z”),则此全局名称供InterSystems IRIS系统使用。%GLOBAL通常存储在IRISSYS或IRISLIB数据库中。|)或左方括号([)-表示扩展全局引用或进程专用全局变量。InterSystems IRIS®的核心功能之一是其多维存储引擎。此功能允许应用程序以紧凑、高效的多维稀疏数组存储数据。这些数组称为全局数组。
本章介绍:
globals ),以及可以对其执行的操作。全局变量提供了一种在持久的多维数组中存储数据的易于使用的方法。
例如,可以使用名为^Settings的全局变量将值“Red”与键“Color”相关联:
SET ^Settings("Color")="Red"
可以利用全局变量的多维特性来定义更复杂的结构:
SET ^Settings("Auto1","Properties","Color") = "Red"
SET ^Settings("Auto1","Properties","Model") = "SUV"
SET ^Settings("Auto2","Owner") = "Mo"
SET ^Settings("Auto2","Properties","Color") = "Green"
全局变量具有以下功能:
有两种方式显示SQL语句的详细信息:
可以使用“SQL语句详细信息”显示来查看查询计划,并冻结或解冻查询计划。
“SQL语句详细信息”提供冻结或解冻查询计划的按钮。
它还提供了一个Clear SQL Statistics按钮来清除性能统计,一个Export按钮来将一个或多个SQL语句导出到一个文件,以及一个Refresh和Close页面按钮。
SQL语句详细信息显示包含以下部分。
大多数SQL语句都有一个关联的查询计划。查询计划是在准备SQL语句时创建的。默认情况下,添加索引和重新编译类等操作会清除此查询计划。下次调用查询时,将重新准备查询并创建新的查询计划。冻结计划使可以跨编译保留(冻结)现有查询计划。查询执行使用冻结的计划,而不是执行新的优化并生成新的查询计划。
对系统软件的更改也可能导致不同的查询计划。通常,这些升级会带来更好的查询性能,但软件升级可能会降低特定查询的性能。冻结计划使可以保留(冻结)查询计划,以便查询性能不会因系统软件升级而改变(降级或提高)。
使用冻结计划有两种策略-乐观策略和悲观策略:
%NOFPLAN关键字重新运行查询(这会导致冻结的计划被忽略)。比较这两个查询的性能。如果忽略冻结的计划没有提高性能,请保持冻结该计划并从查询中删除%NOFPLAN。经常被问到有关IRIS如何支持SSL,HTTPS的问题,有必要写个东西介绍一下。
##HTTPS的原理 简单的说,https实现两个目的:一是访问网站加密,2是确认被访问的网站是真的。
首先,被访问的网站要申请一个证书,这个证书必须是权威机构发放的,比如google, VeriSign等等,所有的浏览器里有预装了这些组织的公钥(Public Key),因此能确认你提供的证书真是这些组织给出的,而这个证书可以证明你的网站的身份。注意证书证明的是提供服务的组织和服务的真实性,和用什么设备没关系,也就是说,IRIS不管证书的事儿。
接下去,被访问的服务器可以生成公钥和私钥,和客户端交换key,生成整个世界只有两者知道的security code,用来两者之间数据的交换。详细的过程和消息交互可以在网上找到很多很好的文章和视频,比如这个: How does HTTPS work? What's a CA? What's a self-signed Certificate?。
如果是测试环境或者使用者可以控制的内部网络,self-signed证书非常常用。self-signed证书就是不去花钱找人认证,而是告诉客户端,我这个证书是自己认证的,你知道我这台机器试内网的一个机器,不用权威机构证明我服务器的身份,咱们交换一下钥匙把通信加密了吧。
前言
着手书写“临床医生与信息系统的‘爱恨情愁’”系列文章的初衷是,希望从终端用户的视角阐述我们所期待的信息系统,为医学信息工作者提供参考,助力医学信息系统不断改进,最终迎来医疗品质的完美提升。在这个系列中,笔者会以临床常见疾病为例,用真实的临床场景说明亲身经历过的信息系统的优势和不足。其中肯定有思虑不周全或逻辑不严谨之处,望各位读者按需审阅,取其精华、弃其糟粕。同时,文中不涉及机构管理、收银财务、耗材库管等环节对临床工作的影响。此外,本系列更多在于探讨信息系统在临床应用场景中的“可能性”,而非“可行性”;文中部分图片尚处于设想模拟阶段,并非真实系统图片,请知悉。
正文
《中国心血管疾病报告2018》明确指出,心血管疾病死亡率居所有死因首位,且其发病率仍然处于上升阶段。胸痛中心作为欧美发达国家普遍应用的急性心血管疾病急救诊疗体系,凭借全新的管理理念和多学科协作的医疗模式及规范化的胸痛诊治流程,实现早期快速诊断、危险评估分层、正确分流、科学救治和改善预后,有效地缩短救治时间,降低患者的死亡率和并发症发生率。为了让更多心血管疾病和其他危重胸痛患者可以得到更及时和有效的救治,切实推进《健康中国行动2019-2030》的顺利实施,最终实现“以疾病为中心”到“以健康为中心”的战略转移,卫健委在过去的九年里,联合权威专家,主持并推进了中国胸痛中心的建设。
这个SQL语句列表为每个表提供了SQL查询和其他操作的记录,包括插入、更新和删除。 这些SQL语句链接到一个查询计划,该链接提供冻结该查询计划的选项。
系统为每个SQL DML操作创建一条SQL语句。 这提供了一个按表、视图或过程名称列出的SQL操作列表。 如果更改表定义,可以使用此SQL Statements列表来确定每个SQL操作的查询计划是否会受到此DDL更改的影响,以及/或是否需要修改某个SQL操作。 然后,可以:
注意:SQL语句是一个SQL例程列表,它们可能会受到表定义更改的影响。 它不应该用作表定义或表数据更改的历史记录。
下面的SQL操作会创建相应的SQL语句:
数据管理(DML)操作包括对表的查询、插入、更新和删除操作。 每个数据管理(DML)操作(动态SQL和嵌入式SQL)在执行时都会创建一个SQL语句。
SELECT命令在准备查询时创建SQL语句。
此外,在管理门户缓存查询列表中创建了一个条目。本章介绍由ShowPlan生成的InterSystems SQL查询访问计划中使用的语言和术语。
SQL表存储为一组映射。 每个表都有一个包含表中所有数据的主映射; 表还可以有其他的映射,如索引映射和位图。 每个映射可以被描绘成一个多维全局,其中一些字段的数据在一个或多个下标中,其余字段存储在节点值中。 下标控制要访问的数据。
RowID或IDKEY字段通常用作映射下标。RowID/IDKEY字段用作附加的较低级别的下标。RowID。编译SQL查询会生成一组指令来访问和返回查询指定的数据。
这些指令表示为. int例程中的ObjectScript代码。
指令及其执行顺序受到SQL编译器中有关查询中涉及的表的结构和内容的数据的影响。 编译器尝试使用表大小和可用索引等信息,以使指令集尽可能高效。
查询访问计划(ShowPlan)是对结果指令集的可读翻译。
查询的作者可以使用这个查询访问计划来查看将如何访问数据。
虽然SQL编译器试图最有效地利用查询指定的数据,但有时查询的作者对存储的数据的某些方面的了解要比编译器清楚得多。
本章介绍可用于主动分析特定SQL语句的分析工具。这些工具收集有关这些SQL语句执行的详细信息。使用这些信息,开发人员可以采取措施提高低效SQL语句的性能。
根据请求的详细程度,此活动分析可能会显著增加服务器上的负载。因此,SQL性能分析工具包旨在进行协调一致的代码分析工作。它不是用来连续监视执行代码的。
SQL性能分析工具包为开发人员和支持专家提供了分析特定SQL语句或语句组的能力。通过在执行特定SQL语句期间使用这些工具,它们可以收集详细信息,这些信息可用于单独或跨活动工作负载分析有问题的语句。
要记录的细节级别是可配置的,最细粒度的设置在模块级别收集信息,为语句的查询计划中的不同“步骤”提供信息。
%SYSTEM.SQL.PTools类方法。修改过用户门户之后,重新启动就报这个错,然后使用自带的修复功能,修复之后依然报错,日志中显示没有C:\InterSystems\HealthConnect\mgr\IRIS.WIJ,我复制了别人的过来依然报错,由于代码没有做备份我不能重装,有没有什么办法修复一下,或者把代码备份一下,我再重装。

在ensemble使用$SYSTEM.Encryption.SHA1Hash()加密“ensmble”得到“t????????????m??Afù????÷??%í”,但使用网络的SHA1加密方法得到”74ba9a06cbbc92f06d9b4166f9c5b4f7f8251aed“,如何使用ensemble得到与网络上一样的加密结果
可以在SELECT、INSERT、UPDATE、DELETE或TRUNCATE表命令中为查询优化器指定一个或多个注释选项。
注释选项指定查询优化器在编译SQL查询期间使用的选项。
通常,注释选项用于覆盖特定查询的系统范围默认配置。
语法/*#OPTIONS */(在/*和#之间没有空格)指定了一个注释选项。
注释选项不是注释;
它为查询优化器指定一个值。
注释选项使用JSON语法指定,通常是“key:value”对,例如: /*#OPTIONS {"optionName":value} */。
支持更复杂的JSON语法,比如嵌套值。
注释选项不是注释;
除了JSON语法之外,它可能不包含任何文本。
包含非json文本在/* ... */分隔符导致SQLCODE -153错误。
InterSystems SQL不验证JSON字符串的内容。
#OPTIONS关键字必须用大写字母指定。
JSON的大括号语法中不应该使用空格。
如果SQL代码用引号括起来,比如动态SQL语句,JSON语法中的引号应该是双引号。
例如:myquery="SELECT Name FROM Sample.
m 里面如何获取cpu的序列号?