文章 Nicky Zhu · 四月 1 7m read

面向 SQL 开发人员和 DBA 的 IRIS 简介

您熟悉 SQL 数据库,但不熟悉 IRIS 吗? 请继续阅读...

大约一年前,我加入了 InterSystems,IRIS 就这样进入了我的视线。 我使用数据库已经有 40 多年了,其中大部分时间都是为数据库供应商工作,我以为 IRIS 与我所知道的其他数据库大致相同。 然而,我惊讶地发现,IRIS 在很多方面都与其他数据库截然不同,而且往往要好得多。 这是我在 Dev Community 上发表的第一篇文章,我将为已经熟悉 Oracle、SQL Server、Snowflake、PostgeSQL 等其他数据库的人提供 IRIS 的高级概述。 希望我的介绍能让您更清楚、更简单,并节省您的入门时间。

首先,IRIS 支持 ANSI 标准 SQL 命令和语法。它有表格、列、数据类型、存储过程、函数......所有关系型的东西。 你还可以使用 ODBC、JDBC 和 DBeaver 或任何你喜欢的数据库浏览器。 因此,是的,您在其他数据库中知道和做的大多数事情都可以在 IRIS 上正常运行。 耶!

但我提到的那些不同之处又是怎么回事呢? 好了,系好安全带:

多模型(Multi-Model)IRIS 是一个关系数据库,但同时也是一个面向对象的数据库,还是文档存储,支持向量和立方体/MDX,以及......你知道我要说什么。 最神奇的是,你可以在同一条 SQL 语句中利用所有这些模型! 而且在很多情况下,数据可以存储为多个这些数据结构——不需要存储两次——当然也不需要有一种以上的数据库类型! 当您访问相同的数据时,就像访问不同的数据模型一样,InterSystems 将其称为 CDP(通用数据平面)。 这在数据库行业即使不是独一无二的,也至少是罕见的。 在人工智能革命使多模型支持突然变得重要之前,没有人关注过 CDP。这不是其他数据库可能实现的功能,因为它被直接嵌入了内核。 IRIS 让多模型、NoSQL 和 NewSQL 对 SQL 人员来说变得简单:

对于对象数据库,您可以从 JSON 树中提取 keyvals,这只是普通表中的值。

-- example of Object database query
SELECT JSON_OBJECT('product':Product,'sizes':PopularSizes) FROM Sample.Clothing

-- this will return a list of key-val pairs. If a pair is missing IRIS  -- will, by default, create one with a value of null.

对于向量(Vector),只需将其视为另一种数据类型,但有一些只适用于该数据类型的特殊函数。

-- example of creating a table with a vector column

CREATE TABLE Sample.CustEventV1 (

CustID INTEGER,

EventDt DATE,

Vtest VECTOR(integer,4),

EventValue NUMERIC(12,2),

EventCD VARCHAR(8))

-- You can use functions like VECTOR_DOT_PRODUCT or VECTOR_COSINE on Vtest

分类学(****Taxonomy): 不同数据库供应商使用的数据库、模式、部署、实例等术语并不完全相同。

  • 实例:安装数据库软件时,数据库公司通常称其为 "实例(Instance)"。我在 InterSystems 有时会听到这个词,但更经常听到的是 "部署(deployment)"。 这可能是因为 "实例 "已经用于面向对象的世界。 无论你怎么称呼它,其他数据库的层次结构通常是
    • 实例/部署
      • 数据库
        • 模式
          • 表、视图等。

或者只是

  • 实例/部署(这*是*数据库)
    • 模式
      • 表、视图等。

但 IRIS 有点不同,它有一个称为 "命名空间(namespace)"的附加层:

  • 实例/部署
    • 命名空间
      • 数据库
        • 模式
          • 表、视图等。

命名空间是包含数据库的逻辑实体。然而,多个命名空间可以包含同一个数据库,因此它可能不是一个层次结构。 它主要用于访问控制。它还可以包含来自其他实例/部署的数据库!

高可用性(****HA):高可用性是通过镜像实现的。 这是一种复制类型,包括代码在内的整个数据库都被复制。 你可能会认为你不想复制整个数据库。 但由于命名空间的存在,您可以将数据库视为一种模式,并将数据分割开来,将需要镜像和不需要镜像的数据分别放在不同的数据库中。

**代码存储(**Code Storage):是的,你没听错,当你镜像数据库时,代码也会随之镜像! 这对一些时髦的数据库来说是一项非常新的功能,但 IRIS 一直都有这项功能。你可以把代码和数据放在同一个数据库中,但通常人们会把它们分开。

ECP:好吧,企业缓存协议(Enterprise Cache Protocol)是 IRIS 真正有趣的地方。 虽然我后来才知道有几个不起眼的 NoSQL 数据库可以做到这一点,但我甚至都不知道有这种可能。 有了 ECP,你就可以设置不同的部署共享它们的缓存! 是的,我指的是它们实际的内存缓存,而不是共享表数据。为此,一个部署的缓存会自动与另一个部署的缓存保持同步。 这就是保持同步! 虽然幕后工作很复杂,但设置起来却非常容易。这是一种完全不同的水平扩展方式,可以让应用程序飞起来。

混合事务分析处理(Translytical):"Translytical"一词用于描述既是 OLTP 又是 OLAP 的数据库。也可称为 HTAP 或 HOAP。有时也称作混合型,但这个词在技术领域已经用得太多了,所以我还是用 T 字。 早期,所有数据库都是Translytical的。 但随着列式结构和其他结构的出现,以及新型存储的出现(想想块存储和 blob 存储),它们被分成了 OLTP 和 OLAP。现在,供应商们又开始尝试两者兼顾。 将 OLAP 添加到 OLTP 内核中要比反过来容易得多。当然,专注于 DW 的供应商可以为单行查找添加一些索引,但我怀疑他们很快就会添加对触发器和快速插入/更新等硬性功能的支持。事实上,快速 OLTP 的构建比 OLAP 复杂得多。IRIS 是一个优秀的Translytical数据库(请参阅分析师评级,了解原因)。例如,有些数据库支持行存储和列存储,但存储在不同的表中。 而 IRIS 可以将行存储列与列存储列放在同一个表中。

/* Example of row-store/column-store mix.

All columns are row-store (the default) except for EventValue.

EventValue is explicitly defined as column-store.

If you queried average EventValue for the whole table it would be fAST! */

CREATE TABLE Sample.CustEvent (

CustID INTEGER,

EventDt DATE,

EventValue NUMERIC(12,2) WITH STORAGETYPE = COLUMNAR,

EventCD VARCHAR(8))

安装(Installation)使用其他数据库时,您通常需要像使用 Postgres 或 SQL Server 一样将其安装在某个地方(内部或云中),或者使用 RedShift 或 Snowflake 等云 SAAS。至于 IRIS,这要看情况而定。获取 IRIS 有三种方式:通过许可证、通过托管服务或通过 Cloud SQL。

  1. 通过许可证(****license),您可以自行安装、配置和维护。这可以是在企业内部,也可以是您选择的任何云。我听说它主要在 AWS、Azure、GCP 和 TenCent 上运行。
  2. 通过托管服务,InterSystems 将在公共云上为您安装、配置和维护 IRIS。
  3. 云 SQL是一种 SAAS(或者应该说是 PAAS、DBAAS)。 你不需要安装任何东西。 不过,Cloud SQL 是一个特例。它旨在作为可组合模块集成到更大的系统中,只提供 IRIS 功能的一个子集,如 SQL 和机器学习 (ML) 功能。 本文其余部分涉及许可和管理的 IRIS,而非 Cloud SQL。

嵌入式语言(Embedded Languages)除 SQL 外,IRIS 还一直支持一种名为 ObjectScript 的面向对象语言,它是 MUMPS 医学语言的后代。这是一种非常强大的语言,但知道它的人并不多。别担心,IRIS 还支持嵌入式 Python。

文档(Documentation)由于 IRIS 在历史上一直与 ObjectScript 紧密相连,因此文档往往使用面向对象的术语。 你可能会发现像表格(__tables)这样简单的东西被称为"持久类('persistent classes)"。 但随着时间的推移,这种说法似乎已逐渐从文档中消失,除非你想成为 IRIS 的编码员,否则可以忽略不计。

因此,IRIS 不仅支持你所熟悉和喜爱的 SQL,还支持 Python、跨语言、在预置或云上运行、多模型,并具有 ECP 等一些未来特性。 还有更多,但这些都是我认为重要和有趣的地方。 我认为,它们与其他产品的 SQL 开发人员和 DBA 也很相关。 如果您正在试用 IRIS,我很想听听您对体验的看法。