文章
· 三月 20 阅读大约需 2 分钟
IRIS/Caché SQL优化经验分享 - 复合索引的使用

复合索引(combined index)也被称为组合索引或者联合索引,顾名思义,就是一个索引建立在多个字段上。当用这些字段为条件查询时,相比对每个字段单独做索引,复合索引能给出很好的性能,还能减少索引的数量。

为什么能减少索引的数量? 通常来说,也就是在其他数据库,联合索引符合”最左匹配“的原则。在BING上搜索“复合索引,得到的第一个搜索结果的这篇文章就说的就很简单明了:

下面这个SQL语句在 列X,列Y,列Z 上建立了一个复合索引。

mysql
CREATE INDEX 索引名 ON 表名(列名X, 列名Y, 列名Z);

其实这相当于建立了三个索引,分别是:

0 0
0 24
文章
· 三月 21 阅读大约需 1 分钟
IRIS/Caché SQL优化经验分享 - Bitmap Extent

Bitmap索引是指对某个,或者某几个字段建立的bit map(位图映射)。如果是对整个表的记录,也就是表的%ID做位图映射,得到的特殊的bitmap索引在IRIS/Caché里被称为Bitmap Extent。

建立Bitmap Extent索引的目的就是加快COUNT(*)的执行。提高了多少呢? 下面两个显示的是最简单的全表查询花费的时间:

  • 不使用Bitmap Extent : 1.3810s
  • 使用Bitmap Extent: 0.0038

相差有几百倍。

0 0
0 16
文章
· 十二月 23, 2021 阅读大约需 6 分钟
在大学使用IRIS(一项有趣的任务)

正如你在我的简介中看到的,我在一所大学教书,我想分享我对IRIS(或之前的Caché)教学的看法。

已经有一段时间了,但我还记得在今年早些时候看到YURI MARX GOMES关于 "用InterSystems对象和SQL开发 "一系列课程。他对第1天第2天第3天的课程内容进行了简要的描述,并附有讲师Joel Solon的评论。我心想,分享我自己的经验可能会有趣。

0 1
0 136
文章
· 三月 2, 2023 阅读大约需 4 分钟
全球征文大赛选集 - 使用 %Query 教程第一篇#1

正式名称为Class Query 的意思可以追溯到 Caché 的早期。
使用CLASS是因为它嵌入在 COS 类中。
尽管官方文档中有精确的描述,但它仍然相当抽象。
我的教程应该通过 COS 中的一个简单示例逐步指导您,使您有直观的体会

0 0
0 80
文章
· 三月 22 阅读大约需 4 分钟
IRIS/Caché SQL优化经验分享 - Collation(排序规则)

这个帖子内容有点深。如果您读的有困难,请直接跳过这篇,对绝大多数IRIS/Caché使用者,它一点都不重要。

数据库表的Collation(排序规则)本来是一个非常简单的概念。说到它是因为曾经发现过由Collation引起的性能问题。

我试图用一句话来解释数据库的排序规则:

  • 绝大多数数据库因为业务查询需要,保存的字符型数据是不分大小写的。当你执行一个 order by, group by, distinct,like等等条件查询时,因为这个不分大小写的collation,你得到的结果也不分大小写。例如,对名字做group by, James, james一定是在一组。
  • 如果非要区分大小写,会在查询的时候使用一个函数
  • 因为要操作非英语的字符集,以及可以被当作字符看待的数字类型,适应不同的排序规则,一个数据库可能有很多种Collation类型。

很简单,在表一级定义Collation的SQL语句是:

0 0
0 27
文章
· 四月 10 阅读大约需 7 分钟
IRIS/Caché SQL优化经验分享 - 查询计划(Query Plan)

为什么要读Query Plan, 在线文档中有句话是这么说的:

While the SQL compiler tries to make the most efficient use of data as specified by the query, sometimes the author of the query knows more about some aspect of the stored data than is evident to the compiler. In this case, the author can make use of the query plan to modify the original query to provide more information or more guidance to the query compiler.

翻译一下是这样:系统给你的查询计划并不总是最好的,如果您能对查询计划,可以人工做更精细的优化。

0 0
0 16
文章
· 一月 30, 2021 阅读大约需 4 分钟
WebGateway系列(3): 配置IIS连接IRIS

IIS在Windows Server里是默认安装,在Windows7和Windows10里面需要用户到"控制面板>程序"里面找到"Turn Windows features on or off"的设置来启动。 本文假设IIS已经在用户的服务器上启动,并且正常工作。

通常情况下,当IRIS安装在Windows系统时,用户会在同一台机器上使用IIS,很少有单独安装一台IIS服务器给远程IRIS提供Web服务器的,当然这样也绝无问题。

有两个软件包可以安装CSP Gateway。一个是IRIS的安装包。在IRIS的安装过程中, 如果有IIS正在工作, 那么安装程序会自动的安装CSP Gateway。 2018年以前的Ensemble或者Cache'的版本的安装过程中会跳出一个询问框,让用户选择是否"安装CSP网关。。。”。而后来的版本大多不做询问而自动为用户做了选择。 如果需要强制安装或者不安装CSP Gateway,那么需要在安装中选"Customer Component"设置。

0 3
0 261

SQL性能监控是DBA最重要的日常工作。经常被问起:"Caché/IRIS怎么发现慢SQL"? 答案很简单: 到管理门户的SQL页面,点开如下的“SQL语句“子页, 您能看到这个命名空间的所有执行过的SQL语句,知道每个SQL语句执行了多少次,平均执行时间是多少, 被那个客户端编译的,第一次执行是那一天等等。

请看下面的截图

图中的各个栏目基本都不需要解释,有个别的内容在这里总结一些:

  • 表/视图/存储过程名称:列出这个查询使用的所有的表/视图/存储过程的名字。如果你想看某个表有关的查询,可以使用上面的过滤器

  • 位置(Location) : 对于动态查询, 列出所使用的缓存的查询的类名,对于嵌入SQL(Embedded SQL)查询,列出使用的routine名字。

0 0
0 11

在这篇文章中,我们将使用docker和 参数配置文件模版 这一新特性来运行IRIS集群且轻松配置好。

在 UNIX® 和 Linux 上,您可以使用声明式参数配置合并文件来修改默认的 iris.cpf。合并文件是一个部分 CPF,在实例启动时为任何数量的参数设置所需的值。CPF 合并操作对每个实例只起一次作用。

我们的集群架构非常简单,它将由一个主节点(Node1)和两个数据节点(检查所有可用角色)组成。不幸的是,docker-compose不能部署到几个服务器上(尽管它可以部署到远程主机上),所以这对本地开发分片的数据模型、测试等很有用。如果是生产的InterSystems IRIS集群部署,你应该使用ICM云管理器IKO K8S调度器

0 0
0 51
文章
· 四月 16 阅读大约需 3 分钟
IRIS/Caché SQL优化经验分享 - SQL索引分析器

索引分析器工具用来分析索引的使用情况,对DBA和开发者非常有用。 他们需要知道那些查询进行了全表扫描,那些查询缺失了索引, 而那些索引从来又从来没有被用过。多余的索引降低系统性能,浪费了磁盘空间。

索引使用情况

到“管理门户”的" 系统 > SQL 性能工具 > SQL 索引分析器", 点击“索引使用情况”, 您将看到这样的图

执行SQL语句查询会带来更多的灵活性。上面的查询可以写成下面这个SQL,

SELECT TableName, indexname, UsageCount
FROM %SYS_PTools.UtilSQLAnalysisDB order by usagecount desc

2016年以后的Caché版本就已经有了'索引使用情况'的查询。使用管理门户没有区别, 但SQL语句不同,使用的是比较老的类和表名,各位请参考文档。

0 0
0 14
文章
· 六月 27, 2022 阅读大约需 6 分钟
Globals 是管理数据的魔剑 : 第一部分

Globals,这些存储数据的魔剑,已经存在了一段时间,但是没有多少人能够有效地使用它们,也没有多少人知道这个超级武器。

如果你把Globals的东西用在它们真正能发挥作用的地方,其结果可能是惊人的,要么是性能的提高,要么是整体解决方案的大幅简化 (1, 2).

Globals提供了一种特殊的存储和处理数据的方式,它与SQL表完全不同。它们在1966年首次出现在 M(UMPS)编程语言中, 该语言最初用于医学数据库。现在它仍然以同样的方式被使用,但也被其他一些以可靠性和高性能为首要任务的行业所采用:金融、交易等。

后来M(UMPS)演变为 Caché ObjectScript (COS). COS是由InterSystems公司开发的,作为M的一个超集. 其原始语言仍然被开发者社区所接受,并在一些实现中保持活力。在网络上有几个活跃的网址,比如:MUMPS Google group, Mumps User's group), effective ISO Standard等等

现代基于Globals的数据库支持交易、日志、复制、分区等。这意味着它们可以被用来构建现代的、可靠的、快速的分布式系统。

Gloabls并不将你限制于关系模型的范围内。它们让你可以自由地创建为特定任务优化的数据结构。对于许多应用来说,合理地使用好的Globals就如一颗真正的银子弹头,它所提供的速度是传统关系型应用的开发者所梦寐以求的。

作为一种存储数据的方法,globals可以在许多现代编程语言中使用,包括高级和低级语言。因此,本文将特别关注Globals本身,而不是它们曾经来自的语言。

0 1
0 182
文章
· 六月 20, 2023 阅读大约需 5 分钟
使用 RESTful Web 服务创建Ensemble微服务

这是在 Ensemble 中实现“微服务”设计的初学者指南。 “微服务”是当今流行的一个词,具有广泛的解释。我的解释是:“微服务”是一种“NoSQL 服务”。一个什么?答案在文章中。

我们了解了 SQL 和 NoSQL 数据库之间的区别。对我来说,SOA Web 服务和“微服务”之间的区别几乎相同。我将通过一个例子来解释它。

请注意,虽然这是一本初学者指南,但我假定我对数据建模、RESTful 服务和 Ensemble 有深入的技术知识。

航班预订——示例

我的例子很简单。我想为我的家人订一张机票。我使用www.skyscanner.hu ,但它可以是任何预订网站。那我该怎么办?在着陆页上,我输入了航班信息:我需要从布达佩斯到布拉格并返回的机票,10 月29日起飞,11 月 1返回,直飞航班,经济舱四人。提交搜索表单后,我会返回可用选项。我选择一个并输入乘客详细信息、折扣计划,最后通过 PayPal 付款。直截了当。

在更详细的版本中:后台发生了什么。

n 开始预订

0 0
0 79
文章
· 四月 15, 2021 阅读大约需 15 分钟
精华文章--访问IRIS数据平台的四种方式

IRIS 中支持的四种方式:

SQL、Objects、REST 和 GraphQL

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

>

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

> >

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

## 引言

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

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

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

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

0 0
0 474
文章
· 七月 12, 2022 阅读大约需 9 分钟
Globals - 存储数据的魔剑-树:第二部分

开始 - 请拉到页面底部查看该系列文章第一部分 .

3. 使用globals时结构的变体

一个结构,比如说一个有序排列的“树”,有各种特殊的情况。让我们来看看那些对使用globals有实际价值的情况。

3.1 特殊情况1. 一个没有分支的节点

0 0
0 105
文章
· 十二月 4, 2023 阅读大约需 8 分钟
通用RESTful 业务服务和业务操作

1. 通用RESTful业务服务和业务操作


InterSystems IRIS 提供了一组通用的RESTful 业务服务和业务操作类,用户无需开发自定义的业务服务和业务操作类,就可以直接向外提供RESTful服务和调用外部的RESTful API。

0 0
1 76
文章
· 八月 9, 2022 阅读大约需 1 分钟
一个更有用的对象Object Dump

在测试你的代码时,你经常会遇到需要检查对象的实际内容。无论是使用 ZWRITE 还是 $system.OBJ.Dump()

你会得到一个简单的属性图片,"--- 属性值---"

而 "--- swizzled references ---" 更容易让人混淆

用“--- calculated references ---" 你只是被留在了后面。

0 0
0 229
文章
· 四月 29, 2021 阅读大约需 3 分钟
WebGateway系列(4): 配置HTTPS访问IRIS的Web服务

经常被问到有关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?

0 0
0 255
文章
· 九月 15, 2022 阅读大约需 4 分钟
将微服务架构应用于Ensemble

关于微服务架构(MSA)的IRIS定位的初学者指南。MSA在企业级Java世界中的能见度越来越高,因此,了解这股热潮背后的内容是至关重要的。我尝试着写下我的观点并与大家分享。

背景

首先,我必须承认。今年初夏,我的同事要求我收集一些关于匈牙利开发的医疗产品的信息。当我从相关公司得到反馈时,发现该产品是一个模块化系统,基于微服务架构(MSA)。好的。什么是MSA?在网上做了简短的研究,阅读了一些WIKI网页后,我得出结论:啊哈,又是一个 "架构"。我们可以用IRIS在 "架构层面 "遵守 "任何架构"--至少 "在某种程度上"。但也有一些恼人的地方。这让我对MSA有了更多的了解。到目前为止还不错,但是REST不是这篇文章的主要话题吗?MSA和REST之间的关系是什么?我访问的几乎每个网站都在例子中使用了RESTful网络服务。这让我有点怀疑。但总的来说,我赞同对MSA的一般总结:它是SOAP但做得很好。特别是因为有一些关于 "内聚 "和 "耦合 "的句子,我完全不明白。那么,如果MSA只是 "SOAP做得好",为什么我没有看到SOAP的例子?为什么这些例子(几乎)都是RESTful?

0 0
0 205
文章
· 五月 31, 2021 阅读大约需 6 分钟
精华文章---HealthConnect中创建HTTP服务

HealthConnect中创建HTTP服务端

这里我说说怎么在HealthConnect上开发HTTP服务。

作为消息引擎,HealthConnect会需要从一个接口接收HTTP请求发送到另一个接口,中间做消息转换,路由等等,目的的接口可能是HTTP,或者SOAP,REST等等。这里只介绍HTTP服务的内容,也就是最简单的两种实现:

第一种:实现客户定制的HTTP服务业务服务组件(Business Servie)

创建Business Service类,继承EnsLib.HTTP.Service, 如下面的示例:

0 0
1 287
文章
· 三月 19 阅读大约需 2 分钟
IRIS/Caché SQL优化经验分享

IRIS/Caché查询慢,主要原因有以下几个:

  • 应用是一个事务型的数据库, 数据模型的设计不适合某些复杂的分析查询

这是慢的原因,不是慢的离谱的原因。数据模型是产品设计的范畴, 这里不讨论, 本文只讨论优化。

  • 历史原因,有些表的索引不够优化

虽然还是设计问题,但可以在实施中或者维护中给出优化方案。

  • 产品运行中的问题造成的查询效率下降

IRIS/Caché数据平台的一个特点是允许跳过SQL约束,对底层数据的直接修改。坏的代码或者应用可能破坏表数据和表索引的约束,造成SQL性能的下降。维护人员应该知道怎么避免,和处理这样的问题。

  • 维护工作缺乏造成

比如Tune Table(调整表), 这是必须做的工作,但可惜很有些项目没有执行过。

0 0
0 27