11

所以我已经使用 Smalltalk 大约 6 个月了(Squeak 和 Pharo),主要是做数据分析,我即将开始我的第一个 Seaside 应用程序。所以我想问你们所有的 Smalltalkers,你们最喜欢的持久性解决方案是什么?我一直在关注 Magma、GOODS 和 GLORP。我是一名长期的 python 黑客,所以我得到了 ORM,但似乎 Magma 或 GOODS 会是一个更好的解决方案,因为它们看起来是面向对象的。

快速说明:我想在多个 VM 上扩展我的应用程序,因此仅将数据保存到映像不会真正起作用。

谢谢!

4

3 回答 3

12

如果您想跨多个虚拟机进行扩展,您可能需要查看GemStone/S

但是请注意,GemStone 是专有的商业产品。所以,你不得不为此付出代价。但是,定价模型通常是这样设计的,如果您需要更大的版本,那么您通常还会让用户为该版本付费。4 GiByte 磁盘 / 1 GiByte RAM / 1 CPU 版本的起价为 0 $。

另一件需要注意的事情是 GemStone Smalltalk 是它自己的方言,所以你的 Squeak 代码可能不会在未经修改的情况下运行,但应该很容易移植。(例如,GemStone 工程师创建了一个适配器,允许您将 Monticello(Squeak 的版本控制系统)包加载到 GemStone/S,他们通常也确保 Seaside 运行。)

那么,什么是宝石?基本上,它是一个具有自动对象持久性的分布式虚拟机。与普通的 Smalltalk VM 相比,它最容易解释。如果你有两个 Smalltalk VM 并排运行,它们每个都有自己的对象内存(即垃圾收集器管理的东西)。该对象内存在 RAM 中。在 GemStone 中,集群中的所有 VM 共享相同的对象内存,并且它位于磁盘上,而不是 RAM 中。因此,您不需要数据库,甚至不需要面向对象的数据库,因为您的对象“就在那里”,无处不在,无时无刻不在。

(这只是一个非常简单的描述。例如,堆并没有真正在 VM 之间共享。这没有意义,您不希望通过网络复制您创建的每个临时对象。相反,您有一个全局存储库对象(基本上是字典),就像垃圾收集器将从某个众所周知的根对象开始,然后保留所有可以从那里访问的对象,并删除那些不能访问的对象,GemStone 将从全局存储库对象开始,并保留/复制可从那里到达的对象。)

GemStone 还具有类似于数据库的功能,因此对全局存储库的访问被包装在 ACID 事务中,并且有一种受 SQL 启发但 Smalltalkish 的查询语言。

GemStone 有一个很好的设备,他们称之为“ GLASS ”(用于 GemStone、Linux、Apache、Seaside 和 Smalltalk),类似于众所周知的“LAMP”(Linux、Apache、MySQL 和 PHP)。GLASS 包括预装 Seaside 的 GemStone 免费版,以及在 Xubuntu 上运行 Apache 的所有设置,所有内容都整齐地打包到 VMWare 磁盘映像中。

于 2009-07-07T09:01:39.250 回答
3

仅 GLASS 并不能真正帮助您全面了解数据。SandstoneDB 可以。您可以将 SandstoneDB 与 GOODS 和 GLASS 一起使用(甚至单独使用),具体取决于您希望花多少钱(Sandstone 在所有意义上都是免费的,GLASS 是商业的,但像小型安装的免费啤酒一样免费)。

查看sandstoneDB 页面。这是 GOODS 的适配器。要将 SandstoneDB 与 GLASS 一起使用,只需将存储切换到 SDMemoryStore,请参阅 SandstoneDB 中 SDMemoryStore 的类注释。

于 2009-07-12T10:31:19.893 回答
1

如果可以选择,我也会选择 GLASS 或 Magma(这取决于项目的规模)。

考虑到 Squeak 中的 GLorp 仅适用于 PostgreSQL。我们开发了 SqueakDBX,它是一个与大多数数据库通信的数据库驱动程序。我们现在正在修改 Glorp,以便您可以将它与所有这些(不仅仅是 PostgreSQL)一起使用。但这要到今年年底。

于 2009-07-07T13:53:22.173 回答