persistence - 岩浆、商品、GLORP 或其他什么?

标签 persistence smalltalk squeak seaside pharo

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

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

谢谢!

最佳答案

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

但是请注意,GemStone 是 proprietary, commercial product .所以,你将不得不为此付出代价。然而,定价模型通常是这样设计的,如果你需要一个更大的版本,那么你通常也会让用户为那个版本付费。 4 GiByte 磁盘/1 GiByte RAM/1 CPU 版本的价格从 0 $ 开始。

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

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

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

GemStone 还具有数据库特性,因此对全局存储库的访问包含在 ACID 事务中,并且有一种受 SQL 启发但 Smalltalkish 的查询语言。

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

关于persistence - 岩浆、商品、GLORP 或其他什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1090383/

相关文章:

java - 序列化是否适用于未定义为可序列化的其他对象实例?

smalltalk - 在 Pharo smalltalk 中谈论一段字符串

smalltalk - "Metaclass class"真的只是元类吗?

smalltalk - 数据可视化(二维绘图)包,用于smalltalk

pandas - Python Pandas 持久缓存

ios - swift : Error when saving to core data context

smalltalk - 魅力和鹦鹉螺问题

variables - 在 Squeak 中创建新的伪变量

keyboard-shortcuts - 如何在 Pharo/Squeak 中缩进一段代码?

java - 是否可以持久化对象的类?