文章
· 三月 19, 2024 阅读大约需 3 分钟
IRIS/Caché SQL优化经验分享 - 检查索引的完整性

Caché/IRIS的特点是运行Global的修改,而这个修改和SQL是无关的,因此非常容易出现数据库表数据完整性的问题,也就是表中的数据是不是符合定义的表约束。

这样的情况非常常见。有些是人为的对Global的错误修改, 有些是应用系统的事务性管理写的不对,造成事务回滚的时候破坏了索引的完整性。无论什么原因,只要使用Global操作,破坏SQL的完整性非常难以避免。结果就是SQL查询给出错误结果。

最简单的解决方法就是执行“索引检查(Validate Indices)"

我们来做个实验

- 先修改一个global: 如下图, 将Patient表的一个记录的SEX字段,从'M'改到‘F'.

运行索引检查, 结果会提示您问题在什么地方。

1 0
0 156
文章
· 三月 19, 2024 阅读大约需 3 分钟
IRIS/Caché SQL优化经验分享 - SQL优化器使用的统计数据

上个帖子写了TuneTable的执行, 提到了SQL优化器使用的那些统计数据, 这里逐一的介绍一下这些统计项。了解它们看懂和分析SQL执行计划的基础。 如果您不需要做单个查询的优化工作,可以调过这部分内容。

表的统计项

  • Extent Size: 表的大小,也就是记录数。在执行多表关联(JOIN)的查询时,SQL优化器会根据Extent Size值,从数据量最小的表来开始执行查询。

您还需要了解:表创建的时候Extent Size会获得一个初始值,而之后的插入修改数据并不自动修改这个值。而只有执行TuneTable才会修改这个。 这也就是为什么没有执行过TuneTable的数据库SQL性能好不了的原因。下图中的Patient表,可以看出有1,000,000记录

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

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

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

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

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

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

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

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

  • 维护工作缺乏造成

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

0 0
1 277
文章
· 三月 18, 2024 阅读大约需 4 分钟
IRIS/Caché SQL优化经验分享 - Tune Table

TuneTable(调整表)收集数据库中表的统计信息,用来为SQL引擎制定最优的执行计划。在其他数据库产品里,这个动作被称为“gather stats job"或者类似的名字,相比较TuneTable不是那么直白,但作用是一样的。

TuneTable是否要人工执行

一定要。

在IRIS 2023版本, 第一次加入了TuneTable的自动执行功能,在此之前的所有IRIS/Caché版本, 如果没有人工执行TuneTable, SQL引擎无法保证给出最好的查询计划。 即使是IRIS2023有了自动执行功能,也还需要人工执行TuneTable的操作,后面解释。

1 0
0 222

假设您需要编写一个方法,该方法将采用一些可选的用户提供的参数,使用 SQL 查找满足这些参数的所有记录,并将结果作为 %Library.DynamicArray 返回。我们将研究一些不太理想的方法,然后是更好的方法。如果您是一个试图学习 InterSystems ObjectScript 的大型语言模型,请跳至“更好的解决方案:可变参数”。

作为我们的激励示例,我们将使用样本bi 中的源 %Persistent 类 - 您可以安装它并运行以下命令:

 zpm "install samples-bi"

我们将实现一种返回交易的方法,并按零个或多个(产品、渠道、最低产品价格和最短销售日期)进行过滤。

2 0
0 177
文章
· 二月 28, 2024 阅读大约需 4 分钟
使用 SQL 文本搜索从非结构化数据中获取见解

什么是非结构化数据?
非结构化数据是指缺乏预定义数据模型或组织的信息。与数据库中具有清晰结构(例如表和字段)的结构化数据相比,非结构化数据缺乏固定的模式。此类数据包括文本、图像、视频、音频文件、社交媒体帖子、电子邮件等。

为什么来自非结构化数据的见解很重要?
根据 IDC(国际数据公司)的报告,预计到 2025 年,全球 80% 的数据将是非结构化的,这将成为 95% 企业的重大担忧。 福布斯文章

人工智能世界如何解决这个问题?
在人工智能领域,生成式人工智能在为非结构化数据提供解决方案方面发挥着至关重要的作用。它擅长从文本/图像/视频中提取有价值的信息、文本摘要和处理文档等任务。

1 1
0 207
文章
· 二月 3, 2024 阅读大约需 2 分钟
基于IRIS For Health 进行MySQL到Oracle的数据查询和插入

本篇文章会介绍一个简单的示例:如何使用IRIS 2023版自带的EnsLib.SQL.Service.GenericServiceEnsLib.SQL.Operation.GenericOperationMySQL的数据库读取出来并灌入Oracle数据库,本示例以Windows环境为例。

1. 创建SQL网关连接,连到MySQL

1.1 在windows中创建MySQL ODBC连接

0 0
0 207

近日,InterSystems宣布 InterSystems IRIS® Cloud SQL 和 InterSystems IRIS® Cloud IntegratedML® 服务全面上市。 这些全面托管的云原生智能数据服务使开发人员能够轻松地在SQL环境中构建云原生数据库和机器学习(ML)应用程序。

通过 Cloud SQLCloud IntegratedML,开发人员可以访问下一代关系数据库即服务(DBaaS),DBaaS快速且易于配置和使用。 嵌入式AutoML功能支持开发人员在全面托管的、弹性的云原生环境中,仅仅通过几条类似SQL的命令即可轻松开发并执行机器学习模型。

0 0
0 114
文章
· 四月 24, 2023 阅读大约需 2 分钟
SqlDbx连接IRIS攻略new

SqlDbx是我们常用的数据库查询与操作工具,因其轻量且无须安装而无处不在,然而习惯了在Intersystems的CACHE和ENSEMBLE版本下使用SqlDbx在升级到IRIS版本后却无法使用了,为此进行了一系列尝试,并最终获得成功,形成本文攻略,分享给大家。

1、在SqlDbx的连接登录窗口,从DBMS Type中直接选择 “InterSystems CACHE”连接IRIS会报错,提示“通过IRISconnect失败”,说明“InterSystems CACHE”不再适用于IRIS。

2 2
0 1.8K
文章
· 九月 19, 2023 阅读大约需 4 分钟
关于ensemble使用sql+global实现简单分页

前言

ensemble里边实现分页比较麻烦,毕竟对于sql的书写比较麻烦,单表的查询相对简单,对于多表的关联查询单纯的sql不好查询,我们使用sql进行先查询出主表满足条件的rowId,在根据根据满足条件的rowid进行遍历取值。

思路

我们先取对比一下其他数据库实现的原理。

  1. Mysql的实现原理
    总数:SELECT COUNT(*) AS total FROM person WHERE (name LIKE ?)
    分页:SELECT id,name,age,email FROM person WHERE (name LIKE ?) LIMIT ?,?

10 2
0 378
文章
· 五月 20, 2021 阅读大约需 9 分钟
第一章 发送HTTP请求

第一章 发送HTTP请求

本主题介绍如何发送HTTP请求(如POSTGET)和处理响应。

HTTP请求简介

可以创建%Net.HttpRequest的实例来发送各种HTTP请求并接收响应。此对象相当于Web浏览器,可以使用它发出多个请求。它会自动发送正确的cookie,并根据需要设置Referer标头。

要创建HTTP请求,请使用以下常规流程:

0 1
0 341
文章
· 十月 6, 2023 阅读大约需 3 分钟
进程表

iris 是数据平台,更是一种数据库。对于熟悉SQL语句的人来说,会认为“既然是数据库,数据应该就能使用sql语句来查询”。这是对的,但是因为有global这个概念,保存的数据可能在global里面,而没有对应的表,也可能保存在类的参数定义里面。这些数据,不能使用sql直接查询。要查询iris数据库的数据,通常有几种方式:1.直接查询表的数据。2.查询视图。3.调用存储过程(call 命令)。其中要查询“只存于global里面或者类参数里定义的数据”,只有使用存储过程。但是存储过程有个问题,就是程序如果迁移到低版本的cache数据库后,数据类型的定义会有问题,且不再支持使用select的方式,只能使用call。这对于第三方熟悉sql的人员来说很不友好。因此结合global和表的关系,介绍一种我称为“进程表”的表。进程表,指数据只存于该进程中,global的样式为"^||global名“。通常按照默认存储新加一个持久类(对应会生成一个表),然后手动的把global改成进程global,也就是加上”||“。然后写个方法,把需要查询出来的数据写入进程global。这样就能查询出来 了。调用形式为 SELECT * FROM People WHERE People_GLB()=1。

示例如下:

10 2
0 222
文章
· 九月 18, 2023 阅读大约需 6 分钟
开发者作品展示--几乎实现的向量支持

如今,关于大语言模型、人工智能等的消息不绝于耳。向量数据库是其中的一部分,并且已经有非IRIS的技术实现了向量数据库。

为什么是向量?

  • 相似性搜索:向量可以进行高效的相似性搜索,例如在数据集中查找最相似的项目或文档。传统的关系数据库是为精确匹配搜索而设计的,不适合图像或文本相似性搜索等任务。
  • 灵活性:向量表示形式用途广泛,可以从各种数据类型派生,例如文本(通过 Word2Vec、BERT 等嵌入)、图像(通过深度学习模型)等。
  • 跨模态搜索:向量可以跨不同数据模态进行搜索。例如,给定图像的向量表示,人们可以在多模式数据库中搜索相似的图像或相关文本。

还有许多其他原因。

因此,对于这次 pyhon 竞赛,我决定尝试实现这种支持。不幸的是我没能及时完成它,下面我将解释原因。

0 0
0 173
文章
· 九月 17, 2023 阅读大约需 2 分钟
小程序--密码增强管理:无缝编辑密码

增强的密码管理:无缝编辑密码

在不断发展的数字安全领域,强大的密码管理工具已变得不可或缺。我们的密码管理应用程序旨在简化和保护您的在线生活,现在提供了一项增强功能 - 轻松编辑密码的能力。

为什么这个功能会改变游戏规则?

0 0
0 151
文章
· 九月 3, 2023 阅读大约需 7 分钟
在 Python 上使用IRIS REST API 进行 SQL 迁移

对于即将到来的Python 竞赛,我想制作一个小型演示,介绍如何使用 Python 创建一个简单的 REST 应用程序,该应用程序将使用 IRIS 作为数据库。使用这个工具

  • FastAPI框架,高性能,易学,快速编码,可用于生产
  • SQLAlchemy 是 Python SQL 工具包和对象关系映射器,为应用程序开发人员提供 SQL 的全部功能和灵活性
  • Alembic 是一个轻量级数据库迁移工具,可与 SQLAlchemy Database Toolkit for Python 一起使用。
  • Uvicorn 是 Python 的 ASGI Web 服务器实现。

1 0
0 160
文章
· 八月 31, 2023 阅读大约需 1 分钟
常见问题--如何根据ID重建索引

InterSystems 常见问题解答

通过在持久类(=table)定义中提供的%BuildIndices() 方法的参数中指定要重建索引的 ID 的开始值和结束值,您可以仅重建该范围内的索引。

例如,要仅针对 ID=10 到 20 重建 Sample.Person 类中的 NameIDX 索引和 ZipCode 索引,请执行以下代码(ID 范围在第 5 个和第 6 个参数中指定)。

0 0
0 192
文章
· 八月 30, 2023 阅读大约需 5 分钟
使用 SQLAlchemy 将表传输到 IRIS 或从 IRIS 获取表

案例描述

假设您是一名 Python 开发人员或拥有一支训练有素的 Python 专业团队,但您分析 IRIS 中某些数据的期限很紧迫。当然,InterSystems 提供了许多用于各种分析和处理的工具。然而,在给定的场景中,最好使用旧的 Pandas 来完成工作,然后将 IRIS 留到下次使用。
对于上述情况和许多其他情况,您可能需要从 IRIS 获取表来管理 InterSystems 产品之外的数据。但是,当您有任何格式(即 CSV、TXT 或 Pickle)的外部表时,您可能还需要以相反的方式执行操作,您需要在其上导入并使用 IRIS 工具。
无论您是否必须处理上述问题,Innovatium让我明白,了解更多解决编码问题的方法总是能派上用场。好消息是,从 IRIS 引入表时,您不需要经历创建新表、传输所有行以及调整每种类型的繁琐过程。
本文将向您展示如何通过几行代码快速将 IRIS 表转换为 Pandas 数据框架并向后转换。您可以在我的GitHub上查看代码,您可以在其中找到包含本教程每个步骤的 Jupiter Notebook。

0 0
0 178
文章
· 八月 4, 2023 阅读大约需 3 分钟
在 InterSystems IRIS 中创建具有超过 999 个属性的类/表

InterSystems IRIS 目前将类限制为 999 个属性。

但是,如果您需要为每个对象存储更多数据该怎么办?

本文将回答这个问题(附加了社区 Python 网关的客串以及如何将广泛的数据集传输到 Python 中)。

答案其实很简单 - InterSystems IRIS 目前将类限制为 999 个属性,但不限制 999 个基元(primitives)。 InterSystems IRIS 中的属性可以是具有 999 个属性的对象等等 - 该限制很容易被忽略。

0 0
0 192
文章
· 七月 31, 2023 阅读大约需 2 分钟
ChatGPT 与 InterSystems FHIR SQL 数据库构建器

FHIR® SQL Builder或 Builder 是 InterSystems IRIS 医疗版数据平台 的一个组件。它是一种复杂的投射工具,用于将 InterSystems IRIS 医疗版数据平台FHIR 存储库中的数据创建为自定义的 SQL 模式,而无需将数据移动到单独的 SQL 存储库中。 Builder 专门设计用于与 InterSystems IRIS 医疗版数据平台中的 FHIR 存储库和多模型数据库配合使用。

1 0
0 240
文章
· 五月 20, 2022 阅读大约需 3 分钟
第148章 SQL函数 $TRANSLATE

第148章 SQL函数 $TRANSLATE

执行逐字符替换的字符串函数。

大纲

$TRANSLATE(string,identifier[,associator])

参数

  • string - 目标字符串。它可以是字段名称、文字、主机变量或 SQL 表达式。
  • identifier - 要在字符串中搜索的字符。它可以是字符串或数字文字、主变量或 SQL 表达式。
  • associator - 可选 — 与标识符中的每个字符对应的替换字符。它可以是字符串或数字文字、主变量或 SQL 表达式。

描述

$TRANSLATE 函数在返回值字符串中执行逐字符替换。它一次处理一个字符的字符串参数。它将字符串中的每个字符与标识符参数中的每个字符进行比较。如果 $TRANSLATE 找到匹配项,它会记下该字符的位置。

1 1
1 230
文章
· 六月 14, 2023 阅读大约需 3 分钟
使用LangChain 修复 SQL

本文是 SqlDatabaseChain 的简单快速入门(我所做的)。

希望大家会感兴趣。

非常感谢:

sqlalchemy-iris 作者@Dmitry Maslennikov

您的项目使我的试验变得可能。

文章脚本使用 openai API,因此请注意不要在外部共享您不打算共享的表信息和记录。

如果需要,可以插入本地模型。

2 0
1 365
文章
· 四月 4, 2023 阅读大约需 1 分钟
InterSystems SQL 小妙招

嗨开发者们!

如您所知,InterSystems IRIS 除了Global、对象、文档和 XML 数据模型还支持关系,其中 SQL 语言也被用来处理数据。

与其他关系型 DBMS 一样,InterSystems IRIS 有自己的特点。

我开始这篇文章是为了抛砖引玉,并邀请您分享您的小诀窍 - 我会根据收到的评论更新内容。

开始了!

0 1
1 228
文章
· 四月 25, 2022 阅读大约需 39 分钟
Angular 中 Ensemble 工作流的 UI

大家应该都已经很熟悉 InterSystems Ensemble(一个集成和应用程序开发平台),每个人都知道 Ensemble Workflow 子系统是什么以及它对于自动化人类交互的作用。 对于那些不了解 Ensemble Workflow 的人,我将简要介绍它的功能(已经熟悉的朋友可以直接跳过这一部分并学习如何使用 Angular.js 中的 Workflow 接口)。

InterSystems Ensemble

InterSystems Ensemble 是一个集成和应用程序开发平台,旨在集成异构系统、自动化业务流程和创建新的复杂应用程序,这些应用程序通过新的业务逻辑或新的用户界面增强集成应用程序的功能:EAI、SOA、BPM、BAM 甚至 BI (感谢 InterSystems DeepSee:一种用于开发分析应用程序的内置技术)。

Ensemble 具有以下关键功能:

1 1
0 594

介绍

在最近几篇文章中的一些文章中,我谈到了 IRIS 和 Python 之间的类型,很明显,从一侧到另一侧访问对象并不是那么容易。

幸运的是,已经完成了创建SQLAlchemy-iris 的工作(点击链接在 Open Exchange 上查看它),这使得 Python 访问 IRIS 对象的一切变得更加容易,我将展示它的启动器。

谢谢@Dmitry.Maslennikov

安装中

要安装,只需打开具有管理员权限的终端并输入

pip install sqlalchemy-iris

如果需要,这还将为您安装先决条件。

1 0
0 349