你使用过IntersystemsCaché吗?你有什么经历?

时间:2010-04-05 01:19:33

标签: caching rdbms intersystems-cache

我几乎没有声称使用CacheDB而不是经过验证的RDBMS。但我无法理解它比RDBMS更好?如果是这样,为什么它们以Cache为前缀?

是RDBMS还是Caché服务器?您能否在项目中写下关于用例的简要说明?

4 个答案:

答案 0 :(得分:28)

缓存是一种独特的野兽,根据您的使用方式,它可以被描述为无SQL数据库,RDBMS或面向对象的数据库。当然,对所有人来说并非所有事情都是如此,因此了解每种人都需要一些解释。

这一切都建立在一种称为MUMPS的关系前程序语言之上(可怕的营销名称对Google搜索来说也很糟糕,所以现在他们只使用Cache,这对谷歌搜索来说很糟糕)。该语言包括将数据保存为本机命令的操作,因此可以在不影响应用程序代码的情况下优化持久性引擎。

这种语言有一种集合类型,一个带有0个或更多排序键的键/值字典,以及一种数据类型,它们具有操作符来执行字符串操作,而其他操作可以执行大量操作。所有键和值都是该数据类型的实例。

这已经存在了很长时间,并且几十年前编写的应用程序仍在运行。

这种语言早于第一个RDBMS,但后来该语言的实现者添加了RDBMS支持。缓存将SQL(静态或动态)编译为更现代的MUMPS版本,然后驱动存储引擎。如果这听起来很奇怪,那不是真的 - 每个RDBMS都会编译或解释SQL到它的存储引擎的方向。

Cache已经演变成面向对象的语言(就像许多其他语言一样),这意味着现在有2种数据类型,原始数据加上对象类型。对象不能直接作为键或值存储在磁盘上,但可以继承或实现持久性方法。

因此,使用Cache的人可能会使用面向对象的代码,SQL或过程代码,或者根据需要将它们组合起来。

有哪些优点和缺点?

对于运行传统MUMPS应用程序的人来说,他们几乎别无选择,所以我会专注于其他人。

一个很大的缺点是市场份额很小(与其他RDBMS相比,虽然它可以与其他产品相比),并且与商业RDBMS的价格相同(尽管它可能更容易工作)出于某种特殊用途的个别交易),因此需要某种令人信服的理由来购买它。

此外,较小的市场份额意味着开发商的市场较小。此外,它可以使用的不同方式意味着并非所有的Cache开发人员都适合所有项目 - 过去20年中维护遗留(从结构化编程之前)应用程序的人可能不太擅长将Cache用于面向对象的Web应用

另一个问题是,Intersystems(供应商)提供的代码库几乎没有任何代码库,而且这些代码库不可能与.NET或Java这样的东西竞争。

一个很大的优势是缓存对象脚本(现代MUMPS语言)比通常在数据库中获得的语​​言要多得多。这对您在数据库中拥有的业务逻辑更具优势。

实际上,如果你将它用于你的业务逻辑,恕我直言的大多数优点都来自于。将数据库和业务逻辑结合起来更简单,更容易获得高性能,并且在环境支持它时不会特别导致长期维护问题。

在Cache中组合数据库和业务逻辑的缺点是移植要么非常困难,通常您的业务逻辑是用自由语言编写的,并且您不需要任何类型的许可来运行它。在这里你几乎就像你的业务逻辑在TSQL中一样,除了它更难移植。

如果你是O.K.尽管如此,很多事情都很可爱。没有ORM - 商业或手工编码。 SQL被编译成你可以看到的代码(它被生成,因此它针对可读性的速度进行了优化,变量名称可以是'T32'之类的东西,但如果必须的话,它仍然是可读的),甚至是单步执行或断点。编写SQL游标的成本非常低。您实际上可以编写面向对象的代码。它被解释,因此更容易快速发展。如果你想要速度,你可以关闭事务并转到无SQL。

我也发现它很容易管理。在我的大多数经验中,没有DBA这样的东西 - 你只是不需要一个。

答案 1 :(得分:4)

Intersystem的Cache可以定义为面向对象的数据库。

我想到的方式是它是带有面向对象脚本引擎的常规RDBMS数据库。 Oracle存储了procs,Cache有Object脚本。

我们正在迁移到Intersystems Cache以利用他们的BI&报告工具。我还没有遇到过MySQL或Oracle存储过程无法解决的问题。我更喜欢在SQL过程中编写所有内容,以避免任何未来的迁移问题。

具有强大面向对象背景的人可能更喜欢使用ObjectScript。

万一你还没有看到它,这里是their documentation

答案 2 :(得分:1)

它不是RDBMS的设计。它是对象数据库。您可以使用sql接口,并查看来自传统RDBMS的数据。

几年前我尝试过,只是为了爱好项目,主要是学习。

值得注意的是,在所有云端产品之前,他们已经拥有了系统,您可以通过一个节点存储数据,并将其复制到其他几个节点。因此,如果您需要扩展,可以完成。 10年前,当数据库之间的数据复制由内部工具完成时,它就是cca。他们说有一个系统有50k以及一个人在线工作的人。复制可以通过多种方式完成。

数据存储在树中,称为全局数据。你存储的一切都是树。他们有对象访问权限,实际上数据库中的对象是你语言中的对象(Objectscript,我认为他们支持java)。 数据中存在真正的继承(全局变量,称为表格不正确)。所以不需要hibernate / orm / jpa / ......这些东西。

他们的语言很犀利。如果你喜欢Perl one liners,你很好。否则它正在发生变化。

答案 3 :(得分:0)

它不是计划中的 RDBMS。它是对象信息库。可以利用sql接口,查看来自传统RDBMS的信息。

我几年前尝试过,只是为了消遣项目,一般是学习。

值得注意的是,在“所有云的东西”之前,他们以前拥有框架,您可以在其中通过一个集线器存储信息,并且可以为几个不同的集线器复制信息。因此,如果您需要很好地扩展它可能会完成。大约 10 年前,在数据集之间复制信息是由内部设备 afaik 完成的。他们说除了个人在网络上工作的一个基础之外,还有一个 50k 的框架。复制应该可以分别进行。

信息被存放在树中,他们称之为全局变量。更重要的是,您存储的只是树。他们有对象访问,真正的信息库中的对象是你的语言中的对象(Objectscript,我认为他们支持java)。数据中有真正的遗产(globals,称其为表是不正确的)。所以不需要sleep/orm/jpa/...东西。

然而,他们的语言是gee。如果您喜欢 Perl 笑话,那您就可以了。否则它是具有挑战性的。