#InterSystems IRIS

0 关注者 · 929 帖子

InterSystems IRIS 是一个完整的数据平台
InterSystems IRIS 为您提供了捕获、共享、理解组织最宝贵的资产(数据)并采取相应行动所需的一切。
作为一个完整的平台,InterSystems IRIS 不需要集成多种开发技术。应用程序需要更少的代码、更少的系统资源和更少的维护。

文章 姚 鑫 · 四月 21, 2021 13m read

第四章 缓存查询(二)

运行时计划选择

运行时计划选择(RTPC)是一个配置选项,它允许SQL优化器利用运行时(查询执行时)的离群值信息。运行时计划选择是系统范围的SQL配置选项。

RTPC被激活时,准备查询包括检测查询是否包含具有离群值的字段上的条件。如果PREPARE检测到一个或多个异常值字段条件,则不会将查询发送到优化器。相反,SQL会生成一个运行时计划选择存根。在执行时,优化器使用此存根选择要执行的查询计划:忽略离群值状态的标准查询计划,或针对离群值状态进行优化的替代查询计划。如果有多个异常值条件,优化器可以从多个备选运行时查询计划中进行选择。

  • 准备查询时,SQL将确定它是否包含离群值字段条件。如果是这样,它将推迟选择查询计划,直到执行查询。在准备时,它创建一条标准SQL语句和(对于动态SQL)相应的缓存查询,但将选择是使用此查询计划还是创建不同的查询计划,直到查询执行。在准备时,它创建看起来像是标准SQL语句的内容,如下所示:DECLARE QRS CURSOR FOR SELECT Top ? Name,HaveContactInfo FROM Sample.MyTest WHERE HaveContactInfo=?,用问号表示文字替代变量。
0
0 231
文章 Claire Zheng · 四月 21, 2021 1m read

在医院信息化建设中,如何打通医院的各个系统,给患者提供连续、无缝的良好体验,集成平台发挥着重要作用。而集成平台方案如何适应现在的多云时代、需要具备什么样的特性、如何与多云环境更好地结合以便为医院的信息化建设带来更多的便利?面对这一系列问题,InterSystems中国业务拓展经理李岩为您解读InterSystems集成平台方案的特点和优势,以及构建在VMware云方案上的最佳实践,让您了解云环境下集成平台方案的新特性和优势。

0
0 189
问题 Michael Lei · 四月 21, 2021

有人有将NonStop SQLMP与IRIS连接的经验吗?

如果可能的话,我需要一些参考或技巧,实际上是与JDBC驱动程序连接的,以便互连并解决许多各种各样的问题,例如:

一些查询(不是很多)有空获取,可以正常工作,但没有要获取的内容,而且确定Select 语句是正确的。

1
0 203
文章 姚 鑫 · 四月 20, 2021 13m read

第四章 缓存查询(一)

系统自动维护已准备好的SQL语句(“查询”)的缓存。这允许重新执行SQL查询,而无需重复优化查询和开发查询计划的开销。缓存查询是在准备某些SQL语句时创建的。准备查询发生在运行时,而不是在编译包含SQL查询代码的例程时。通常,PREPARE紧跟在SQL语句的第一次执行之后,但在动态SQL中,可以准备查询而不执行它。后续执行会忽略PREPARE语句,转而访问缓存的查询。要强制对现有查询进行新的准备,必须清除缓存的查询。

所有SQL调用都会创建缓存查询,无论是在ObjectScript例程中调用还是在类方法中调用。

  • 动态SQL、ODBC、JDBC和$SYSTEM.SQL.DDLImport()方法在准备查询时创建缓存查询。管理门户执行SQL接口、InterSystems SQL Shell和%SYSTEM.SQL.Execute()方法使用动态SQL,因此使用准备操作来创建缓存查询。

它们列在命名空间(或指定方案)的Management Portal常规缓存查询列表、每个正在访问的表的Management Portal Catalog Details缓存查询列表以及SQL语句列表中。动态SQL遵循本章中介绍的缓存查询命名约定。

  • 类查询在准备(%PrepareClassQuery()方法)或第一次执行(调用)时创建缓存查询。
0
1 378
文章 姚 鑫 · 四月 19, 2021 11m read

第三章 优化表(二)

调整表计算值

调优表操作根据表中的代表性数据计算和设置表统计信息:

  • ExtentSize,它可能是表中的实际行数(行数),也可能不是。
  • 表中每个属性(字段)的选择性。 可以选择性地阻止单个属性的选择性计算。
  • 属性的离群选择性,其中一个值比其他值出现得更普遍。 有效的查询可以利用离群值优化。
  • 标识某些属性特征的每个属性的注释。
  • 每个属性的平均字段大小。
  • 表的SQL Map NameBlockCountSource of BlockCount

区段大小和行计数

从管理门户运行Tune Table工具时,ExtentSize是表中当前行的实际计数。默认情况下,GatherTableStats()方法还将实际行数用作ExtentSize。当表包含大量行时,最好对较少的行执行分析。可以使用SQL tune table命令并指定%SAMPLE_PERCENT来仅对总行的一定百分比执行分析。在针对包含大量行的表运行时,可以使用此选项来提高性能。此%SAMPLE_PERCENT值应该足够大,以便对代表性数据进行采样。如果ExtentSize<1000,则无论%SAMPLE_PERCENT值如何,TUNE TABLE都会分析所有行。

指定的ExtentSize可以小于或大于实际行数。但是,ExtentSize不应显著超过当前表数据中的实际行数。

0
0 198
文章 Hao Ma · 四月 18, 2021 5m read

IRIS相比Caché在部署上的一个进步是支持docker。即便不是云部署, 使用docker也带来非常多的便利。 尤其是在开发测试环节,由于docker的使用更便捷,除非要模拟客户的环境或者做规定的性能测试,我在测试中基本已经不再使用本机的实例或者虚机。IRIS的联机文档有详细的IRIS docker安装使用指导,本文只是一个简单的,快速上手的在测试环境安装IRIS docker的简单步骤,尤其适合初学者。

注意Windows上docker可能会遇到这样那样的问题,因此通常还是推荐在Linux或者Mac OS上使用。正式的生产环境的IRIS docker container也是不支持Windows系统的。

Referrence

##1. 在操作系统上安装Docker环境

Docker官方文档的安装步骤非常清晰,我按照上面的步骤在MAC和CentOS上安装docker从来没有出现过问题。

0
1 899
文章 姚 鑫 · 四月 18, 2021 13m read

第三章 优化表(一)

要确保InterSystems IRIS®Data Platform上的InterSystems SQL表的最高性能,可以执行多种操作。优化可以对针对该表运行的任何查询产生重大影响。本章讨论以下性能优化注意事项:

  • ExtentSizeSelectiveBlockCount用于在用数据填充表之前指定表数据估计;此元数据用于优化未来的查询。
  • 运行tune Table来分析填充表中的代表表数据;生成的元数据用于优化未来的查询。
  • 优化表计算的值包括扩展大小、选择性、异常值选择性、平均字段大小和块计数
  • 导出和重新导入优选表统计数据

扩展大小、选择性和块数(ExtentSize, Selectivity, and BlockCount)

当查询优化器决定执行特定SQL查询的最有效方式时,它会考虑以下三种情况:

  • 查询中使用的每个表的ExtentSize行计数。
  • Selectivity为查询使用的每列计算的DISTINCT值的百分比。
  • 查询使用的每个SQL映射的块计数。

为了确保查询优化器能够做出正确的决策,正确设置这些值非常重要。

  • 在用数据填充表之前,可以在类(表)定义期间显式设置这些统计信息中的任何一个。
  • 在用代表性数据填充表之后,可以运行tune Table来计算这些统计数据。
  • 运行TuneTable之后,可以通过指定显式值来覆盖计算的统计信息。
0
0 281
文章 姚 鑫 · 四月 17, 2021 6m read

第二章 定义和构建索引(五)

验证索引

可以使用以下任一方法验证索引

  • $SYSTEM.OBJ.ValidateIndices()验证表的索引,还验证该表的集合子表中的任何索引。
  • %Library.Storage.%ValidateIndices()验证表的索引。集合子表索引必须使用单独的%ValidateIndices()调用进行验证。

这两种方法都会检查指定表的一个或多个索引的数据完整性,并可以选择更正发现的任何索引完整性问题。他们分两步执行索引验证:

  1. 确认为表(类)中的每一行(对象)正确定义了索引实体。
  2. 遍历每个索引,对于索引的每个条目,确保表(类)中有一个值和匹配的条目。

如果这两种方法中的任何一种发现不一致,它都可以有选择地更正索引结构和/或内容。它可以验证标准索引、位图索引、位图范围索引和位片索引,并可选择对其进行校正。默认情况下,这两种方法都会验证索引,但不会更正索引。

如果满足以下条件,%ValidateIndices()只能用于更正(生成)读写活动系统上的索引:如上所述,使用了SetMapSelecability()%ValidateIndices()参数必须包括AUTOCORRECT=1lockOption>0。由于%ValidateIndices()速度明显较慢,因此%BuildIndices()是在活动系统上构建索引的首选方法。

0
0 188
文章 姚 鑫 · 四月 15, 2021 10m read

第二章 定义和构建索引(三)

位图索引

位图索引是一种特殊类型的索引,它使用一系列位串来表示与给定索引数据值相对应的一组ID值。

位图索引具有以下重要功能:

  • 位图是高度压缩的:位图索引可以比标准索引小得多。这大大减少了磁盘和缓存的使用量。
  • 位图操作针对事务处理进行了优化:与使用标准索引相比,可以在表中使用位图索引,而不会降低性能。
  • 位图上的逻辑操作(countingANDOR)经过优化以获得高性能。
  • SQL引擎包括许多可以利用位图索引的特殊优化。

位图索引的创建取决于表的唯一标识字段的性质:

  • 如果表的ID字段定义为具有正整数值的单个字段,则可以使用此ID字段为字段定义位图索引。此类型的表使用系统分配的唯一正整数ID,或使用IdKey定义自定义ID值,其中IdKey基于类型为%IntegerMINVAL>的单个属性,或类型%Numeric型且Scale=0MINVA>0
  • 如果表的ID字段未定义为具有正整数值的单个字段(例如,子表),则可以定义采用正整数的%BID(位图ID)字段作为代理ID字段;这允许为该表中的字段创建位图索引。

受下列限制,位图索引的操作方式与标准索引相同。 索引值将被整理,可以在多个字段的组合上建立索引。

位图索引操作

位图索引的工作方式如下。 假设Person表,其中包含一些列:

image

此表中的每一行都有一个系统分配的RowID号(一组递增的整数值)。

0
0 185
文章 Qiao Peng · 四月 15, 2021 4m read

圆满结束!

所有的专题会议都已经播出了。当然,我们全部102部预录制的专题会议现在可以点播了,您可以随意观看,即使您错过了现场问答的机会。

说到现场问答,我们已经举办了6次现场会议,您也可以观看。我之前写过一篇单独的博客文章,题目是如何让您的问题会帮助我们做得更好。

智能工厂启动包

今天备受关注的亮点之一是Intersystems IRIS智能工厂启动包在OpenExchange上发布。为此,我们的合作伙伴ITVisors和他们的客户Vlisco与我们的Joe Lichtenberg一起举办了一场精彩的会议“MFG001:介绍适用于制造业的InterSystems IRIS智能工厂启动包”。

容器和Kubernetes平台

今天我们宣布了一个高度安全的新版IRIS容器,名为“iris-lockeddown”,这个容器非常适合在Kubernetes中使用加固型pod安全策略的团队。说到Kubernetes,Steve Lubars演示了我们新的InterSystems Kubernetes Operator,它让您可以很轻松地在Kubernetes 中部署IRIS集群。而Luca Ravazzolo则演示了如何用CPF合并文件配置您的IRIS实例,特别是如何自动化进行镜像配置。还有其他一些有趣的问题。

0
0 151
文章 Louis Lu · 四月 15, 2021 2m read

 

  1. 我喜欢事务型分析DBMS和高级分析细分概念
  2. VSCode的IRIS 1.0版插件很炫酷。社区和InterSystems IRIS之间的合作对此有着非常积极的作用。但在不久的将来,减少代码开发量对于IRIS来说将是一个非常合适的选项。
  3. 动态网关/原生API将IRIS定位为面向市场上主要开放语言的最先进的数据平台,但有必要使用这些语言的公共包管理器,尤其是Maven公共仓库。
  4. API管理器是一个不错的方案,但社区版IRIS不能用,且仅能用于由IRIS创建的API。这个关键问题亟待解决。
  5. 用于物联网的OPC-UA适配器和用于实时事件的Kakfa适配器都很棒,我很喜欢。未来,也可以考虑用于Salesforce、SAP、Office365和其他最常用平台的新适配器。
  6. 云支持目前很完美,采用ICM和IKO进行部署和管理,SAM进行监控。
  7. FHIR加速器对于FHIR项目是一个很棒的方案,真的很有用。
  8. IRIS的速度真的越来越快了,它能够让已经非常快的东西变得更快,非常出色。
  9. 自适应分析重磅推出后广受欢迎,它能够加速和简化分析数据立方体的创建(以完全可视化和直观的方式),并以极好的方式向Excel和其他数据查看器展示数据。未来,我很想看到InterSystems发布自己的查看器,因为IRIS本身的报告功能比较有限,且无法提供社区版,因而使它不可能在社区中推广。
0
0 163
文章 Louis Lu · 四月 15, 2021 4m read

我们刚刚结束了第二天的专题会议,会议内容精彩纷呈!虽然大家无法同时观看多个平行会议,但是线上会议有一个优势,那就是您可以根据自己的需要回看错过的内容!

在昨天的博客文章(第一天会议亮点)中,我介绍了大部分值得关注的公告,如 InterSystems IRIS Adaptive Analytics 和FHIR加速器服务等。所以,今天我想更宽泛地讨论一些战略主题。

 

运营和系统管理

现在,越来越多的客户业务已经运行在云端,也有越来越多的人开始在本地部署现代部署策略。Mark Bolinsky今天主持了两场背靠背会议:CL003 云存储策略CL004 云备份策略,为使用云端生产工作的用户带来了很多技术细节。我们新推出的系统警报和监控(SAM)模块也得到了不错的反馈。相关内容请查看DEV007 系统警报和监控CL005 分布式部署。另一个另广大开发者兴奋的消息是,集群监控现在可以轻松实现。在此感谢所有参与并提出问题的与会者!

 

安全性

在安全性方面,InterSystems一直受到客户和分析师的高度好评,不过大多数人会认为这样做是为了保持自身产品的安全。这当然是我们的一个目标,但是我们还添加了许多新的安全特性。今天的SEC000 OCSP装订就是一个典型的例子。虽然OCSP(在线证书状态协议)可提供更强的安全性,但也会影响浏览器性能。使用OCSP装订功能后,服务器会检查X.

0
0 101
文章 Louis Lu · 四月 15, 2021 15m read

IRIS 中支持的四种方式:

SQL、Objects、REST 和 GraphQL  

卡济米尔·马列维奇,《运动员》(1932) 

>

> “你当然无法理解! 习惯了坐马车旅行的人怎么可能理解乘坐火车或者飞机旅行的人的感受和印象?”
>

> >

> 卡济米尔·马列维奇 (1916)
>

## 引言

我们已经讨论过为什么在主题领域建模使用对象类型优于使用 SQL。 当时得出的结论和总结的事实如今依然适用。 那么,我们为什么要退后到对象和类型之前的时代,讨论将对象的操作拖回到使用global的技术? 我们又为什么要鼓励面条式代码?难道是为了用它难以跟踪的错误考验开发者的技能熟练度? 

目前有几种观点支持通过基于 SQL/REST/GraphQL 的 API 传输数据,而不是将其表示为类型/对象:

  • 这些技术经过深入研究,相当易于部署。
  • 知名度非常高,已在便捷的开源软件中广泛实现。
  • 您通常别无选择,只能使用这些技术,尤其是在网络和数据库中。
  • 最重要的是,API 仍然使用对象,因为它们提供了在代码中实现 API 的最适途径。

在讨论实现 API 之前,我们先来看一下底层的抽象层。 下图显示了数据在永久存储位置与处理并向应用程序用户呈现的位置之间的移动方式。

0
0 736
文章 Louis Lu · 四月 15, 2021 6m read

InterSystems IRIS 下使用 DataOps

Gartner 对 DataOps 的定义是:“DataOps 是一种协作式的数据管理方法,侧重于改善整个组织中数据管理者和数据消费者之间数据流的沟通、整合与自动化。 DataOps 的目标是创建可预测的数据、数据模型和相关项目的交付和变更管理,从而更快地交付价值。 DataOps 采取特殊技术手段和相应治理水平自动化数据交付的设计、部署和管理,以元数据提高动态环境中数据的易用性和价值。”

2014 年 6 月 19 日,InformationWeek 特约编辑 Lenny Liebmann 发表于 IBM Big Data & Analytics Hub 的题为“3 reasons why DataOps is essential for big data success”的文章中首次提出 DataOps 这一概念。 DataOps 一词后被 Andy Palmer 推广到 Tamr。 DataOps 是“数据运营”的专属名称。 2017 年对 DataOps 来说是意义重大的一年,生态系统取得巨大发展,分析师覆盖范围进一步扩张,关键字搜索量以及调查、出版物和开源项目数均有所提升。 Gartner 在 2018 年的 Hype Cycle for Data Management 中添加了 DataOps 。

0
0 305
文章 Louis Lu · 四月 15, 2021 3m read

我正在参加 Joel Solon 讲授的“使用 InterSystems Objects 和 SQL 进行开发”课程。 课程非常好,我将在这里分享一些从培训中总结的提示。

第 3 天的提示:

1. 您可以使用 %Dictionary 类查看类目录,并在 INFORMATION_SCHEMA 表中查看 sql 对象。

2. 可以在 ObjectScript 方法中以动态 SQL 或嵌入式 SQL 使用 SQL。

3. 您可以使用 ?(例如:where country = ?)将参数传递到动态 SQL 字符串, 使用冒号(例如:where country = :variable)将参数传递到嵌入式 SQL。

4. 动态 SQL 示例(来自 Intersystems 文档):

SET tStatement = ##class(%SQL.Statement).%New(,"Sample")
  SET myquery = 3
  SET myquery(1) = "SELECT TOP ? Name,DOB,Home_State"
  SET myquery(2) = "FROM Person"
  SET myquery(3) = "WHERE Age > 60 AND Age &lt; 65"
  SET qStatus = tStatement.%Prepare(.
0
0 275
文章 Louis Lu · 四月 15, 2021 3m read

我正在参加 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.

0
0 198
文章 Louis Lu · 四月 15, 2021 3m read

原文在这里

原作者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.

0
0 295
文章 姚 鑫 · 四月 14, 2021 8m read

第二章 定义和构建索引(一)

定义索引

使用带有索引的Unique、PrimaryKey和IdKey关键字

与典型的SQL一样,InterSystems IRIS支持惟一键和主键的概念。 InterSystems IRIS还能够定义IdKey,它是类实例(表中的行)的唯一记录ID。 这些特性是通过UniquePrimaryKeyIdKey关键字实现的:

  • Unique -在索引的属性列表中列出的属性上定义一个唯一的约束。 也就是说,只有这个属性(字段)的唯一数据值可以被索引。 唯一性是根据属性的排序来确定的。 例如,如果属性排序是精确的,则字母大小写不同的值是唯一的; 如果属性排序是SQLUPPER,则字母大小写不同的值不是唯一的。 但是,请注意,对于未定义的属性,不会检查索引的惟一性。 根据SQL标准,未定义的属性总是被视为唯一的。
  • PrimaryKey -在索引的属性列表中列出的属性上定义一个主键约束。
  • IdKey -定义一个唯一的约束,并指定哪些属性用于定义实例(行)的唯一标识。 IdKey总是具有精确的排序规则,即使是数据类型为string时也是如此。

这些关键字的语法出现在下面的例子中:

Class MyApp.
0
0 259
文章 Michael Lei · 四月 14, 2021 8m read

什么是分布式人工智能 (DAI)?

试图找到一个“无懈可击”的定义是徒劳的:这个术语似乎有些“超前”。 但是,我们仍然可以从语义上分析该术语本身,推导出分布式人工智能也是人工智能(请参见我们为提出一个“实用”定义所做的努力),只是它分布在多台没有聚合在一起(既不在数据方面,也不通过应用程序聚合,原则上不提供对特定计算机的访问)的计算机上。 即,在理想情况下,分布式人工智能的安排方式是:参与该“分布”的任何计算机都不能直接访问其他计算机的数据和应用程序,唯一的替代方案是通过“透明的”消息传递来传输数据样本和可执行脚本。 与该理想情况的任何偏差都会导致出现“部分分布式人工智能”- 一个示例是通过中央应用程序服务器分发数据, 或者其反向操作。 不管怎样,我们都会得到一组“联合”模型(即,在各自数据源上训练的模型,或者按自己的算法训练的模型,或者同时以这两种方式训练的模型)。

0
0 340
文章 姚 鑫 · 四月 13, 2021 14m read

第二章 定义和构建索引(一)

概述

索引是由持久类维护的结构,InterSystems IRIS®数据平台可以使用它来优化查询和其他操作。

可以在表中的字段值或类中的相应属性上定义索引。(还可以在多个字段/属性的组合值上定义索引。)。无论是使用SQL字段和表语法还是类属性语法定义相同的索引,都会创建相同的索引。当定义了某些类型的字段(属性)时,InterSystems IRIS会自动定义索引。可以在存储数据或可以可靠派生数据的任何字段上定义附加索引。InterSystems IRIS提供了几种类型的索引。可以为同一字段(属性)定义多个索引,为不同的目的提供不同类型的索引。

无论是使用SQL字段和表语法,还是使用类属性语法,只要对数据库执行数据插入、更新或删除操作,InterSystems IRIS就会填充和维护索引(默认情况下)。可以覆盖此默认值(通过使用%NOINDEX关键字)来快速更改数据,然后作为单独的操作生成或重新生成相应的索引。可以在用数据填充表之前定义索引。还可以为已经填充了数据的表定义索引,然后作为单独的操作填充(构建)索引。

InterSystems IRIS在准备和执行SQL查询时使用可用的索引。默认情况下,它选择使用哪些索引来优化查询性能。 可以根据需要覆盖此默认值,以防止对特定查询或所有查询使用一个或多个索引。

索引属性

每个索引都有一个唯一的名称。

0
0 372
文章 姚 鑫 · 四月 12, 2021 3m read

第一章 SQL性能优化简介

InterSystems SQL支持几个特性来优化InterSystems IRIS®数据平台的SQL性能。

表定义优化

SQL性能从根本上取决于良好的数据架构。 将数据划分为多个表并在这些表之间建立关系对于高效的SQL是必不可少的。

描述了以下优化表定义的操作。 这些操作要求定义表,但不要求用数据填充表:

  • 数据存储策略:可以选择使用%Storage.Persistent%Storage.SQL或自定义存储来存储数据。
  • 全局变量命名策略:可以使用USEEXTENTSET参数为数据和索引查找操作指定更短、更高效的散列全局名称。
  • 索引:可以为一个表字段或一组字段定义索引。可以定义几种不同类型的索引:标准索引、位图索引、位图索引和位图范围索引。SQL优化使用定义的索引而不是数据值本身来访问查询、更新或删除操作的特定记录。

表数据优化

根据对表中典型数据的分析,可以执行以下操作来优化表访问:

  • Tune Table:检查典型的表数据并生成ExtentSize(行数)、选择性(具有特定值的行的百分比)和BlockCount元数据。查询优化器使用此信息来确定最有效的查询执行计划。
  • 选择性和异常值选择性:确定某个字段具有特定值的行的百分比,以及某个值是否为异常值,该值明显比该字段的其他值更常见。
0
0 228
文章 姚 鑫 · 四月 11, 2021 16m read

人月神话

焦油坑

  1. 编程系统产品开发的工作量是供个人使用的,独立开发的构件程序的9倍。我估计软件构件产品化引起了3倍工作量,将软件构件整合成完成系统所需要的设计,集成和测试又强加了3倍工作量,这些高成本的构件在根本上是互相独立的。
  2. 编程行业“满足我们内心深处的创造渴望和愉悦所有人的共有情感”,其提供了五种乐趣:
  • 创建事物的快乐
  • 开发对其他人有用的东西的乐趣
  • 将可以活动,相互啮合的零部件组装成类似迷宫的东西,这个过程所体现出令人神魂颠倒的魅力。
  • 面对不重复的任务,不断学习的乐趣。
  • 纯粹的思维活动。
  1. 同样,这个行业具有一些内在固有的苦恼:
  • 将做事方式调正到追求完美是学习编程的最困难的部分。
  • 由其他人设定目标,并且必须依靠自己无法控制的事物,权威不等同于责任
  • 任何创造性活动都伴随着枯燥艰苦的劳动,编程也不例外
  • 人们通常期望项目在接近结束时,软件项目能收敛得快一些,然后,情况却是越接近完成,收敛得越慢。
  • 产品在完成前总面临着陈旧过时的威胁;只有实际需要时,才会用到最新的设想。

人月神话

  1. 缺乏合理的时间进度是造成项目滞后的主要原因,它比其他所有因素的总和影响还大。
  2. 所有的编程人员都是乐观主义者“一切都将运作良好”
  3. 由于编程人员通过纯粹的思维活动来开发,我们期待在实现过程中不会碰到困难。
  4. 但是,我们的构思本身是有缺陷的,因此总会有bug。
  5. 围绕着成本合算的估计技术,混淆了工作量和项目进度。
1
0 401
文章 姚 鑫 · 三月 27, 2021 11m read

第十三章 使用动态SQL(五)

从结果集中返回特定的值

要从查询结果集中返回特定的值,必须一次一行遍历结果集。 要遍历结果集,请使用%Next()实例方法。 (对于单一值,结果对象中没有行,因此%Next()返回0,而不是错误。) 然后,可以使用%Print()方法显示整个当前行的结果,或者检索当前行的指定列的值。

%Next()方法获取查询结果中下一行的数据,并将该数据放入结果集对象的data属性中。 %Next()返回1,表示它位于查询结果中的某一行上。 %Next()返回0,表示它位于最后一行(结果集的末尾)之后。 每次调用%Next()返回1个增量%ROWCOUNT; 如果游标定位在最后一行之后(%Next()返回0),%ROWCOUNT表示结果集中的行数。

如果SELECT查询只返回聚合函数,每个%Next()设置%ROWCOUNT=1。 第一个%Next()返回1并设置%SQLCODE=0%ROWCOUNT=1,即使表中没有数据; 任何随后的%Next()返回0,并设置%SQLCODE=100%ROWCOUNT=1

从结果集中获取一行后,可以使用以下任何一种方式显示该行的数据:

  • rset.%Print()返回查询结果集中当前行的所有数据值。
  • rset.%GetRow()rset.getrows()以编码列表结构的元素形式从查询结果集中返回一行的数据值。
  • rset.
1
0 334
文章 姚 鑫 · 四月 9, 2021 4m read

第二十一章 导入和导出SQL数据

在InterSystems IRIS®Data Platform Management Portal中,有用于导入和导出数据的工具:

  • 从文本文件导入数据
  • 将数据导出到文本文件

这些工具使用动态SQL,这意味着查询是在运行时准备和执行的。可以导入或导出的行的最大大小为3,641,144个字符。

还可以使用%SQL.Import.Mgr类导入数据,使用%SQL.Export.Mgr类导出数据。

从文本文件导入数据

可以将数据从文本文件导入到合适的InterSystems IRIS类中。执行此操作时,系统将在表中为该类创建并保存新行。该类必须已经存在并且必须编译。要将数据导入到此类中,请执行以下操作:

  1. 从管理门户中选择系统资源管理器,然后选择SQL。使用页面顶部的切换选项选择一个命名空间;这将显示可用命名空间的列表。

  2. 在页面顶部,单击向导下拉列表,然后选择数据导入。

  3. 在向导的第一页上,从指定外部文件的位置开始。对于导入文件所在的位置,请单击要使用的服务器的名称。

  4. 然后输入文件的完整路径和文件名。

  5. 对于选择架构名称,单击要向其中导入数据的InterSystems IRIS包。

  6. 对于选择表名,单击将包含新创建的对象的类。

  7. 然后单击下一步。

  8. 在向导的第二页上,单击将包含导入数据的列。

  9. 然后单击下一步。

0
0 299
公告 Jeff Liu · 四月 9, 2021

InterSystems IRIS,IRIS for Health和IRIS Studio的2020.4版本现已正式发布。

InterSystems IRIS Data Platform 2020.4使开发、部署和管理增强型应用和业务流程变得更加容易,从而弥合了数据和应用孤岛。它具有许多新功能,包括

增强了应用程序和接口开发人员的能力,包括:

 

  • 支持Java SE 11 LTS,在使用Oracle OpenJDK和AdoptOpenJDK时均可支持
  • 支持JDBC的连接池
  • 分段式虚拟文档路由规则中新的 "foreach "组件

增强了数据库和系统管理员的能力,包括:

  • ICM现在支持部署系统警报和监测(SAM)和InterSystems API Manager(IAM)
  • 对常见管理任务的SQL语法的扩展
  • 简化InterSystems报表的部署

InterSystems IRIS for Health 2020.4包含了InterSystems IRIS 2020.4的所有增强功能。此外,这个版本还包

  • 增强对FHIR的支持,包括对FHIR配置文件的支持
  • 支持RMD IHE 的Profile
  • HL7迁移工具中的DataGate支持  

 

关于这些功能的更多细节可以在产品文档中找到:

  • InterSystems IRIS 2020.
0
0 314
文章 姚 鑫 · 四月 7, 2021 12m read

第十九章 存储和使用流数据(BLOBs和CLOBs)

Intersystems SQL支持将流数据存储为Intersystems Iris ®DataPlatform数据库中的 BLOBs(二进制大对象)或 CLOBs(字符大对象)的功能。

流字段和SQL

Intersystems SQL支持两种流字段:

  • 字符流 Character streams,用于大量文本。
  • 二进制流 Binary streams,用于图像,音频或视频。

BLOBs and CLOBs

Intersystems SQL支持将BLOBs(二进制大对象)和CLOBs(字符大对象)存储为流对象的功能。 BLOBs用于存储二进制信息,例如图像,而CLOBs用于存储字符信息。 BLOBsCLOBs可以存储多达4千兆字节的数据(JDBC和ODBC规范所强加的限制)。

在各种方面,诸多方面的操作在通过ODBC或JDBC客户端访问时处理字符编码转换(例如Unicode到多字节):BLOB中的数据被视为二进制数据,从未转换为二进制数据另一个编码,而CLOB中的数据被视为字符数据并根据需要转换。

如果二进制流文件(BLOB)包含单个非打印字符$CHAR(0),则被认为是空二进制流。它相当于""空二进制流程值:它存在(不是null),但长度为0。

定义流数据字段

Intersystems SQL支持流字段的各种数据类型名称。

0
0 228