1 关注者 · 987 帖子

  

InterSystems Caché 是一个多模型 DBMS 和应用服务器。

查看此处提供的更多详细信息

文档

新增
文章 Nicky Zhu · 1 小时 前 2m read

处理文件通常很简单:打开文件,读取并处理。这种方法非常有效,直到文件碰巧是 Excel 文件。

常见假设

起初,Excel 文件(.xlsx)看起来就像另一个数据文件,行、列和值。因此,我们很自然地认为它可以像 .txt 或 .csv 文件一样被读取。但问题就出在这里。

Excel 文件为何表现不同

关键区别在于数据的存储方式:

-> .txt / .csv - 纯文本,逐行存储。

-> .xlsx - 压缩、结构化格式(非纯文本)

excel 文件实际上不是一个简单的可读行流。从内部看,它是一个包含结构化数据的打包文件,标准文件读取命令无法解释这些数据。

如果把它当作文本文件处理,会发生什么情况?

  • 执行过程中出现错误
  • 输出看起来无法阅读

重要事项 --> 这不是限制,而是工具和文件格式不匹配


实用的处理方法

与其只使用基于文本的方法,还有更好的选择、

  • 转换为 CSV
  • 嵌入 Python (pandas 或 openpyxl 等库)
  • IRIS 互操作性工具

如果有人曾在 IRIS 中处理过 Excel 文件,或有其他行之有效的方法,请随时分享。)

下面提到几个例子。

0
0 2
文章 Jeff Liu · 三月 17 1m read

InterSystems 常见问题

如果您尝试从顶级节点删除在子脚本级别映射的全局变量,您将收到一个<SLMSPAN>错误,并且它不会被删除。这是因为用于子脚本级别映射全局变量的kill命令不能跨映射使用。

// Suppose subscript-mapped globals exist in different databases, as shown below:
^TEST(A*~K*) -> database A
^TEST(L*~Z*) -> database B

// Trying to kill from the top level will result in a <SLMSPAN> error.
NAMESPACE>Kill ^TEST
<SLMSPAN> <- This error is output.

要只删除当前命名空间(数据库)中的全局,请使用以下命令:

NAMESPACE>Kill ^["^^."]TEST

在子脚本级别映射的全局变量必须移动到数据库并直接删除。

要切换到数据库,请使用以下命令:

zn "^^c:\intersystems\iris\mgr\user"
or
set $namespace="^^c:\intersystems\iris\mgr\user"

使用 $System.OBJ.

0
0 7
公告 Claire Zheng · 三月 15

InterSystems 定期更新我们的软件发布政策和实践,以适应客户的需求。

为了让客户和合作伙伴更容易预测,我们现在改变了维护版本的发布节奏,并对其他几个方面进行了调整。

本文总结了我们数据平台产品的发布周期和最近的变化,并宣布了一些新的更新。

为什么要改变?

  • 我们的客户更快地接受了我们的新版本。
  • 我们的客户更快地采用新的平台版本(操作系统和协调器)。
  • 安全问题更频繁地出现,尤其是在第三方库中。
  • 我们的客户要求更可预测的交付日期。

有什么相同之处?功能发布节奏提醒

自 2018 年以来,InterSystems 一直在使用 InterSystems IRIS 的双流功能发布节奏(请参阅原始公告)。我们提供

  • 持续交付(Continuous delivery, CD)版本——这些版本可快速访问新功能,非常适合开发和部署持续更新的应用程序,并可立即利用新功能。有时也称为 "快车"。
  • 扩展维护(Extended maintenance, EM)版本——这些版本的发布频率低于持续交付版本,但具有维护版本所具有的更高稳定性。它们是大型企业应用程序的理想选择,在这些应用程序中,在维护版本中轻松获得修复比尽早获得新功能更重要。有时也称为“慢车

EM 发行版的版本号为 YYYY.1(例如 2022.1 或 2023.1),因此很容易识别。 CD 发行版的版本号为 YYYY.2、YYYY.3 等。

0
0 16
文章 Nicky Zhu · 三月 12 2m read

数据库表中索引的力量

在使用数据库时,大多数开发人员都了解索引的概念以及使用索引的原因:加快数据检索速度。但是,索引的真正影响往往只有在比较有索引和没有索引的情况时才会显现出来。

你知道没有索引会发生什么吗?
试想一个有三列的表:姓名、年龄和手机号码。


现在,考虑一下这个查询:

如果年龄列没有索引,数据库引擎会

  • 检查 WHERE 条件字段是否有索引。
  • 如果没有,它将扫描整个表(全表扫描)。
  • 对于每一行,它会检查年龄值并返回匹配结果。

这意味着引擎会遍历整个数据结构,这对于大型表来说非常耗时。

索引会发生什么情况?
现在,如果年龄列有索引,流程就会发生巨大变化:

  • 引擎会直接进入索引结构。
  • 它会找到 Age = 26 的节点。
  • 索引指向主表中相应的记录 ID。
  • 结果几乎是瞬间获取的。

这就是为什么索引是如此强大的优化工具。

现实生活中的一课
最近,我们遇到了一个有趣的情况,凸显了索引的重要性。
我们的表有 5 条记录,而年龄列是有索引的。然后,我们错误地从索引结构(而不是主表)中删除了两个条目。这两个条目对应的是 ID X001 和 X005,它们的年龄都是 26 岁。


当我们运行
SELECT ID, Age, EmpId, Mobile, NameFROM Company.Employee WHERE Age = 26
我们预计会有 3 条记录(因为主表中仍有这些记录),但只出现了 2 条记录。

为什么呢?

0
0 43