文章 Louis Lu · 四月 15, 2021 阅读大约需 15 分钟 精华文章--访问IRIS数据平台的四种方式 IRIS 中支持的四种方式: SQL、Objects、REST 和 GraphQL 卡济米尔·马列维奇,《运动员》(1932) > > “你当然无法理解! 习惯了坐马车旅行的人怎么可能理解乘坐火车或者飞机旅行的人的感受和印象?”> > > > 卡济米尔·马列维奇 (1916)> ## 引言 我们已经讨论过为什么在主题领域建模使用对象类型优于使用 SQL。 当时得出的结论和总结的事实如今依然适用。 那么,我们为什么要退后到对象和类型之前的时代,讨论将对象的操作拖回到使用global的技术? 我们又为什么要鼓励面条式代码?难道是为了用它难以跟踪的错误考验开发者的技能熟练度? 目前有几种观点支持通过基于 SQL/REST/GraphQL 的 API 传输数据,而不是将其表示为类型/对象: 这些技术经过深入研究,相当易于部署。 知名度非常高,已在便捷的开源软件中广泛实现。 您通常别无选择,只能使用这些技术,尤其是在网络和数据库中。 最重要的是,API 仍然使用对象,因为它们提供了在代码中实现 API 的最适途径。 在讨论实现 API 之前,我们先来看一下底层的抽象层。 下图显示了数据在永久存储位置与处理并向应用程序用户呈现的位置之间的移动方式。 #API #对象数据模型 #数据模型 #新手 #InterSystems IRIS 0 0 0 527
文章 Louis Lu · 四月 15, 2021 阅读大约需 6 分钟 基于InterSystems IRIS 的数据运维DataOps InterSystems IRIS 下使用 DataOps Gartner 对 DataOps 的定义是:“DataOps 是一种协作式的数据管理方法,侧重于改善整个组织中数据管理者和数据消费者之间数据流的沟通、整合与自动化。 DataOps 的目标是创建可预测的数据、数据模型和相关项目的交付和变更管理,从而更快地交付价值。 DataOps 采取特殊技术手段和相应治理水平自动化数据交付的设计、部署和管理,以元数据提高动态环境中数据的易用性和价值。” #分析 #InterSystems IRIS 0 0 0 189
文章 Louis Lu · 四月 15, 2021 阅读大约需 3 分钟 第 3 天:使用 InterSystems Objects 和 SQL 进行开发 我正在参加 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 文档): #提示和技巧 #InterSystems IRIS 0 0 0 156
文章 Louis Lu · 四月 15, 2021 阅读大约需 3 分钟 第 4 天:使用 InterSystems Objects 和 SQL 进行开发 我正在参加 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 表之间有自动对应关系: #提示和技巧 #InterSystems IRIS 0 0 0 148
文章 Louis Lu · 四月 15, 2021 阅读大约需 3 分钟 第 2 天:使用 InterSystems Objects 和 SQL 进行开发 原文在这里 原作者YURI MARX GOMES 我正在参加 Joel Solon 讲授的“使用 InterSystems Objects 和 SQL 进行开发”课程。 课程非常好,我将在这里分享一些从培训中总结的提示。 第 2 天的提示: 1. 您可以创建持久类(在数据库中具有对应表的类,用于保持类属性)。 2. 持久类示例: #提示和技巧 #InterSystems IRIS 0 0 0 167
文章 姚 鑫 · 四月 14, 2021 阅读大约需 8 分钟 第二章 定义和构建索引(二) 第二章 定义和构建索引(一) 定义索引 使用带有索引的Unique、PrimaryKey和IdKey关键字 与典型的SQL一样,InterSystems IRIS支持惟一键和主键的概念。 InterSystems IRIS还能够定义IdKey,它是类实例(表中的行)的唯一记录ID。 这些特性是通过Unique、PrimaryKey和IdKey关键字实现的: - Unique -在索引的属性列表中列出的属性上定义一个唯一的约束。 也就是说,只有这个属性(字段)的唯一数据值可以被索引。 唯一性是根据属性的排序来确定的。 例如,如果属性排序是精确的,则字母大小写不同的值是唯一的; 如果属性排序是SQLUPPER,则字母大小写不同的值不是唯一的。 但是,请注意,对于未定义的属性,不会检查索引的惟一性。 根据SQL标准,未定义的属性总是被视为唯一的。 #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 137
文章 Michael Lei · 四月 14, 2021 阅读大约需 8 分钟 通过 InterSystems IRIS 实现分布式人工智能 什么是分布式人工智能 (DAI)? 试图找到一个“无懈可击”的定义是徒劳的:这个术语似乎有些“超前”。 但是,我们仍然可以从语义上分析该术语本身,推导出分布式人工智能也是人工智能(请参见我们为提出一个“实用”定义所做的努力),只是它分布在多台没有聚合在一起(既不在数据方面,也不通过应用程序聚合,原则上不提供对特定计算机的访问)的计算机上。 即,在理想情况下,分布式人工智能的安排方式是:参与该“分布”的任何计算机都不能直接访问其他计算机的数据和应用程序,唯一的替代方案是通过“透明的”消息传递来传输数据样本和可执行脚本。 与该理想情况的任何偏差都会导致出现“部分分布式人工智能”- 一个示例是通过中央应用程序服务器分发数据, 或者其反向操作。 不管怎样,我们都会得到一组“联合”模型(即,在各自数据源上训练的模型,或者按自己的算法训练的模型,或者同时以这两种方式训练的模型)。 #Artificial Intelligence (AI) #云 #分布式数据管理 #Machine Learning (ML) #融合分析 #InterSystems IRIS 0 0 0 224
公告 Claire Zheng · 四月 13, 2021 InterSystems IRIS平台入驻AWS Quick Start Hi 社区开发者们,告诉大家一个好消息!InterSystems IRIS®数据平台已入驻AWS Quick Start,今后可在AWS上快速部署高可用的生产环境。 #AWS #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 94
文章 姚 鑫 · 四月 13, 2021 阅读大约需 14 分钟 第二章 定义和构建索引(一) 第二章 定义和构建索引(一) 概述 索引是由持久类维护的结构,InterSystems IRIS®数据平台可以使用它来优化查询和其他操作。 可以在表中的字段值或类中的相应属性上定义索引。(还可以在多个字段/属性的组合值上定义索引。)。无论是使用SQL字段和表语法还是类属性语法定义相同的索引,都会创建相同的索引。当定义了某些类型的字段(属性)时,InterSystems IRIS会自动定义索引。可以在存储数据或可以可靠派生数据的任何字段上定义附加索引。InterSystems IRIS提供了几种类型的索引。可以为同一字段(属性)定义多个索引,为不同的目的提供不同类型的索引。 无论是使用SQL字段和表语法,还是使用类属性语法,只要对数据库执行数据插入、更新或删除操作,InterSystems IRIS就会填充和维护索引(默认情况下)。可以覆盖此默认值(通过使用%NOINDEX关键字)来快速更改数据,然后作为单独的操作生成或重新生成相应的索引。可以在用数据填充表之前定义索引。还可以为已经填充了数据的表定义索引,然后作为单独的操作填充(构建)索引。 #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 213
文章 姚 鑫 · 四月 12, 2021 阅读大约需 3 分钟 第一章 SQL性能优化简介 第一章 SQL性能优化简介 InterSystems SQL支持几个特性来优化InterSystems IRIS®数据平台的SQL性能。 表定义优化 SQL性能从根本上取决于良好的数据架构。 将数据划分为多个表并在这些表之间建立关系对于高效的SQL是必不可少的。 描述了以下优化表定义的操作。 这些操作要求定义表,但不要求用数据填充表: #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 129
文章 姚 鑫 · 四月 11, 2021 阅读大约需 16 分钟 人月神话 人月神话 焦油坑 编程系统产品开发的工作量是供个人使用的,独立开发的构件程序的9倍。我估计软件构件产品化引起了3倍工作量,将软件构件整合成完成系统所需要的设计,集成和测试又强加了3倍工作量,这些高成本的构件在根本上是互相独立的。 编程行业“满足我们内心深处的创造渴望和愉悦所有人的共有情感”,其提供了五种乐趣: 创建事物的快乐 开发对其他人有用的东西的乐趣 将可以活动,相互啮合的零部件组装成类似迷宫的东西,这个过程所体现出令人神魂颠倒的魅力。 面对不重复的任务,不断学习的乐趣。 纯粹的思维活动。 同样,这个行业具有一些内在固有的苦恼: - 将做事方式调正到追求完美是学习编程的最困难的部分。 - 由其他人设定目标,并且必须依靠自己无法控制的事物,权威不等同于责任 - 任何创造性活动都伴随着枯燥艰苦的劳动,编程也不例外 - 人们通常期望项目在接近结束时,软件项目能收敛得快一些,然后,情况却是越接近完成,收敛得越慢。 #InterSystems IRIS 0 1 0 284
文章 Michael Lei · 四月 11, 2021 阅读大约需 1 分钟 一个老外开发的IRIS低代码工具, 希望对大家有帮助。 IRIS RAD Studio 是一个低代码解决方案,使开发更简单。任何人都可以基于一个简单的类定义乃至一个CSV文件来创建CRUD.. https://openexchange.intersystems.com/package/iris-rad-studio #提示和技巧 #InterSystems IRIS Open Exchange app 0 0 0 172
文章 姚 鑫 · 三月 27, 2021 阅读大约需 11 分钟 第十三章 使用动态SQL(五) 第十三章 使用动态SQL(五) 从结果集中返回特定的值 要从查询结果集中返回特定的值,必须一次一行遍历结果集。 要遍历结果集,请使用%Next()实例方法。 (对于单一值,结果对象中没有行,因此%Next()返回0,而不是错误。) 然后,可以使用%Print()方法显示整个当前行的结果,或者检索当前行的指定列的值。 %Next()方法获取查询结果中下一行的数据,并将该数据放入结果集对象的data属性中。 %Next()返回1,表示它位于查询结果中的某一行上。 %Next()返回0,表示它位于最后一行(结果集的末尾)之后。 每次调用%Next()返回1个增量%ROWCOUNT; 如果游标定位在最后一行之后(%Next()返回0),%ROWCOUNT表示结果集中的行数。 #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 1 0 214
文章 姚 鑫 · 四月 9, 2021 阅读大约需 4 分钟 第二十一章 导入和导出SQL数据 第二十一章 导入和导出SQL数据 在InterSystems IRIS®Data Platform Management Portal中,有用于导入和导出数据的工具: - 从文本文件导入数据 - 将数据导出到文本文件 这些工具使用动态SQL,这意味着查询是在运行时准备和执行的。可以导入或导出的行的最大大小为3,641,144个字符。 还可以使用%SQL.Import.Mgr类导入数据,使用%SQL.Export.Mgr类导出数据。 从文本文件导入数据 可以将数据从文本文件导入到合适的InterSystems IRIS类中。执行此操作时,系统将在表中为该类创建并保存新行。该类必须已经存在并且必须编译。要将数据导入到此类中,请执行以下操作: 1. 从管理门户中选择系统资源管理器,然后选择SQL。使用页面顶部的切换选项选择一个命名空间;这将显示可用命名空间的列表。 2. 在页面顶部,单击向导下拉列表,然后选择数据导入。 在向导的第一页上,从指定外部文件的位置开始。对于导入文件所在的位置,请单击要使用的服务器的名称。 #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 187
公告 jieliang liu · 四月 9, 2021 InterSystems公司的IRIS和IRIS for Health 2020.4现已正式发布(GA)! InterSystems IRIS,IRIS for Health和IRIS Studio的2020.4版本现已正式发布。 InterSystems IRIS Data Platform 2020.4使开发、部署和管理增强型应用和业务流程变得更加容易,从而弥合了数据和应用孤岛。它具有许多新功能,包括 增强了应用程序和接口开发人员的能力,包括: 支持Java SE 11 LTS,在使用Oracle OpenJDK和AdoptOpenJDK时均可支持 支持JDBC的连接池 分段式虚拟文档路由规则中新的 "foreach "组件 增强了数据库和系统管理员的能力,包括: #版本 #InterSystems IRIS #InterSystems IRIS for Health 1 0 0 191
问题 Jian Li · 三月 31, 2021 使用ODBC连接IRIS数据库 在linux服务器上如何建立ODBC连接IRIS来进行查询数据库的操作 #InterSystems IRIS 0 4 0 408
文章 姚 鑫 · 四月 7, 2021 阅读大约需 12 分钟 第十九章 存储和使用流数据(BLOBs和CLOBs) 第十九章 存储和使用流数据(BLOBs和CLOBs) Intersystems SQL支持将流数据存储为Intersystems Iris ®DataPlatform数据库中的 BLOBs(二进制大对象)或 CLOBs(字符大对象)的功能。 流字段和SQL Intersystems SQL支持两种流字段: #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 134
文章 姚 鑫 · 四月 6, 2021 阅读大约需 13 分钟 第十八章 定义和使用存储过程 第十八章 定义和使用存储过程 本章介绍如何在IntersystemsIRIS®数据平台上定义和使用Intersystems SQL中的存储过程。它讨论了以下内容: 存储过程类型的概述 如何定义存储过程 如何使用存储过程如 何列出存储过程及其参数。 概述 SQL例程是可执行的代码单元,可以由SQL查询处理器调用。 SQL例程有两种类型:功能和存储过程。从支持FunctionName()语法的任何SQL语句中调用函数。存储过程只能由CALL语句调用。函数接受某些输入定向参数并返回单个结果值。存储过程接受某些输入,输入输出和输出参数。存储过程可以是用户定义的函数,返回单个值。 CALL语句也可以调用函数。 与大多数关系数据库系统一样,Intersystems Iris允许创建SQL存储过程。存储过程(SP)提供存储在数据库中的可调用可调用的程序,并且可以在SQL上下文中调用(例如,通过使用呼叫语句或通过ODBC或JDBC)。 #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 549
文章 姚 鑫 · 四月 5, 2021 阅读大约需 6 分钟 第十七章 使用触发器 第十七章 使用触发器 本章介绍如何在Intersystems SQL中定义触发器。触发器是响应某些SQL事件执行的代码行。本章包括以下主题: 定义触发器 有几种方法可以为特定表定义触发器: #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 320
文章 姚 鑫 · 四月 4, 2021 阅读大约需 3 分钟 第十六章 导入SQL Code 第十六章 导入SQL Code 本章介绍如何将SQL代码从文本文件导入Intersystems SQL。导入SQL代码时,IntersystemsIris®数据平台使用动态SQL准备并执行每行SQL。如果遇到无法解析的代码行,则SQL导入跳过该行代码并继续准备和执行后续行,直到它到达文件的末尾。所有SQL代码导入操作导入到当前名称空间。 SQL导入主要用于导入数据定义语言(DDL)命令(例如Create Table),并使用Insert,Update和Delete命令填充表。 SQL导入确实准备并执行SELECT查询,但不创建结果集。 #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 177
文章 姚 鑫 · 四月 3, 2021 阅读大约需 12 分钟 第十五章 使用管理门户SQL接口(二) 第十五章 使用管理门户SQL接口(二) 过滤模式内容 Management Portal SQL界面的左侧允许查看模式(或匹配筛选器模式的多个模式)的内容 1. 通过单击SQL interface页面顶部的Switch选项,指定希望使用的名称空间。 这将显示可用名称空间的列表,可以从中进行选择。 2. 应用筛选器或从模式下拉列表中选择模式。 可以使用Filter字段通过输入搜索模式来筛选列表。 可以在一个模式或多个模式中筛选模式,或筛选表/视图/过程名(项)。 搜索模式由模式名、点(.)和项目名组成——每个名称由文字和通配符的某种组合组成。字面值不区分大小写。 通配符是: #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 78
文章 姚 鑫 · 四月 2, 2021 阅读大约需 13 分钟 第十五章 使用管理门户SQL接口(一) 第十五章 使用管理门户SQL接口(一) 本章介绍如何在InterSystems IRIS®数据平台管理门户上执行SQL操作。 管理门户界面使用动态SQL,这意味着在运行时准备和执行查询。 Management Portal界面旨在帮助针对小型数据集开发和测试SQL代码。 它不打算用作在生产环境中执行SQL的接口。 管理门户还提供了各种配置SQL的选项。 有关使用管理门户的一般信息,请选择左上角的Help按钮。 通过使用左上角的Contact按钮,可以从管理门户向InterSystems Worldwide Response Center (WRC)报告有关InterSystems软件的问题。 管理门户SQL工具 InterSystems IRIS允许使用SQL工具从InterSystems IRIS管理门户检查和操作数据。 此操作的起点是Management Portal System Explorer选项。 从这里选择SQL选项。 这将显示SQL接口,它允许: #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 156
文章 Qianzhu Liu · 四月 2, 2021 阅读大约需 7 分钟 数据应用方案分享之一:新生儿先天性心脏病筛查 着手书写“数据应用方案分享”系列文章的初衷是,希望从终端用户的视角阐述我们所期待的数据应用方式及其可能为医疗领域带来的获益,为医学信息工作者提供参考。在这个系列中,笔者会以临床常见疾病和流程为例,用真实的数据录入、获取、展现和使用场景说明需求;尤其是如何细致、精准的构建数据源头,以确保现代医学信息技术“有数可用”、“数用必达”。其中肯定有思虑不周全或逻辑不严谨之处,望各位读者按需审阅,取其精华、弃其糟粕。此外,本系列更多在于探讨数据应用的“可能性”,而非“可行性”。文中部分图片尚处于设想模拟阶段,并非真实系统图片,请知悉。 #大数据 #教程 #InterSystems IRIS #InterSystems IRIS for Health #TrakCare 2 0 0 283
文章 姚 鑫 · 四月 1, 2021 阅读大约需 7 分钟 第十四章 使用SQL Shell界面(三) 第十四章 使用SQL Shell界面(三) SQL元数据、查询计划和性能指标 显示元数据 SQL Shell支持M或Metadata命令以显示有关当前查询的元数据信息。 对于每个结果集项目,此命令列出以下元数据:列名称(SQL字段名称),键入(ODBC数据类型整数代码),PRE(精度或最大长度),比例(最大分数数字),NULL(BOOLEAN:1 = NULL允许,0 =不允许空值),标签(标题标签,请参阅列别名),表(SQL表名称),架构(架构名称),CTYPE(客户端数据类型,请参阅%SQL.statementColumn ClientType属性)。 SHOW STATEMENT 可以执行查询,然后发出show语句或显示st以显示准备好的SQL语句。默认情况下,必须执行查询。可以避免通过设置executemode =延迟执行查询,从而发出查询,然后发出show语句sql shell命令。 #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 217
文章 姚 鑫 · 三月 31, 2021 阅读大约需 15 分钟 第十四章 使用SQL Shell界面(二) 第十四章 使用SQL Shell界面(二) 存储和调用SQL语句 通过数据回调 SQL Shell自动将在终端会话期间发出的每个成功的SQL语句存储在本地缓存中,并为其分配一个顺序号。这些数字用于在当前Terminal过程中重新调用以前的SQL语句。 SQL Shell仅将数字分配给成功的SQL语句。如果在准备SQL语句期间发生错误,则不会分配任何编号。这些数字分配不是特定于名称空间的。以下是可用的数字调用命令: #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 110
文章 姚 鑫 · 三月 30, 2021 阅读大约需 9 分钟 第十四章 使用SQL Shell界面(一) 第十四章 使用SQL Shell界面(一) 执行SQL的其他方式 可以使用$SYSTEM.SQL.Execute() 方法从Terminal命令行执行一行SQL代码,而无需调用SQL Shell。以下示例显示如何在终端提示下使用此方法: DHC-APP>SET result=$SYSTEM.SQL.Execute("SELECT TOP 5 name,dob,ssn FROM Sample.Person") DHC-APP>DO result.%Display() Name DOB SSN yaoxin 54536 111-11-1117 xiaoli 111-11-1111 姚鑫 63189 111-11-1112 姚鑫 63189 111-11-1113 姚鑫 50066 111-11-1114 5 Rows(s) Affected 如果SQL语句包含错误,则Execute()方法成功完成;否则,该方法无效。 %Display()方法返回错误信息,例如: #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 750
公告 Nicky Zhu · 三月 30, 2021 提醒:镜像Dejournaling的潜在数据完整性问题 2021年3月23日 – 提醒:镜像Dejournaling的潜在数据完整性问 InterSystems 已经纠正了一个缺陷,该缺陷在极少数情况下会导致非主镜像成员的数据不一致问题。此缺陷影响到InterSystems产品的所有发布版本。 #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 133
公告 Nicky Zhu · 三月 30, 2021 Caché、Ensemble和InterSystems IRIS的维护版本发布 现已推出三套新的维护版本: #Caché #HealthShare #InterSystems IRIS #InterSystems IRIS for Health 1 0 0 289
文章 姚 鑫 · 三月 29, 2021 阅读大约需 16 分钟 第十三章 使用动态SQL(七) 第十三章 使用动态SQL(七) SQL元数据 动态SQL提供以下类型的元数据: - 在“准备”之后,描述查询类型的元数据。 - 在“准备”之后,描述查询中选择项的元数据(“列”和“扩展列信息”)。 - 在准备之后,描述查询参数的元数据:参数,:var参数和常量。 (语句参数,形式参数和对象) - 执行之后,描述查询结果集的元数据。在执行Prepare操作(%Prepare(),%PrepareClassQuery()或%ExecDirect())之后,可以使用%SQL.StatementMetadata属性值。 - 可以直接为最新的%Prepare()返回%SQL.Statement元数据属性。 - 可以返回包含%SQL.StatementMetadata属性的oref的%SQL.Statement%Metadata属性。这使可以返回多个准备操作的元数据。 #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 184
公告 Claire Zheng · 三月 17, 2021 InterSystems编程大赛: 开发者工具 亲爱的社区开发者们,大家好! 我们很高兴地宣布,新一轮InterSystems开发者竞赛开启了! 🏆 InterSystems 编程大赛:开发者工具 🏆 请提交具有如下特性的应用程序——能够加速开发、贡献更多高质量代码、帮助用户测试、部署、支持或监控基于InterSystems IRIS的解决方案。 时间: 2021年3月29日- 4月25日 Total prize: $8,500 #工具 #活动 #竞赛 #InterSystems IRIS #IRIS竞赛 #Open Exchange 2 3 0 270