所以我现在已经使用Smalltalk大约6个月了(Squeak和Pharo),主要是做数据分析,我即将开始我的第一个Seaside应用程序。所以你向所有Smalltalkers提出的问题是,你最喜欢的持久性解决方案是什么?我一直在看Magma,GOODS和GLORP。我是一个长期的python黑客,所以我得到了ORM,但看起来像Magma或GOODS会是一个更好的解决方案,因为它们似乎是面向对象的。
快速说明:我想在多个VM上扩展我的应用程序,因此只需将数据保存到图像中就不会有效。
谢谢!
答案 0 :(得分:12)
如果您想跨多个虚拟机进行扩展,可能需要查看GemStone/S。
但请注意,GemStone是proprietary, commercial product。所以,你 必须付钱。但是,定价模式通常以这样的方式设计,如果您需要更大的版本,那么您通常也会让用户支付该版本。 4 GiByte磁盘/ 1 GiByte RAM / 1 CPU版本的价格从0美元开始。
另外需要注意的是GemStone Smalltalk是它自己的方言,所以你的Squeak代码可能不会被修改,但应该很容易移植。 (例如,GemStone工程师创建了一个适配器,允许您将Monticello(Squeak的版本控制系统)软件包加载到GemStone / S中,它们通常也会确保Seaside运行。)
那么,GemStone是什么?基本上,它是具有自动对象持久性的分布式VM。与普通的Smalltalk VM相比,它最容易解释。如果你有两个并行运行的Smalltalk虚拟机,每个虚拟机都有自己的对象内存(即垃圾收集器管理的东西)。那个对象内存在RAM中。在GemStone中,群集中的所有虚拟机共享相同的对象内存和,它位于磁盘上,而不是RAM中。所以,你不需要数据库,甚至不是面向对象的数据库,因为你的对象在任何地方都在“就在那里”。
(这只是一个非常简单的描述。例如,堆不是真正在虚拟机之间共享。这没有意义,你不希望复制你创建的每个临时对象相反,你有一个全局存储库对象(基本上是一个字典),就像垃圾收集器将从一些众所周知的根对象开始,然后保留所有可从那里访问的对象,并删除那些不是,GemStone将从全局存储库对象开始,并仅保留/复制 从那里可以访问的对象。)
GemStone还具有数据库功能,因此访问全局存储库包含在ACID事务中,并且存在一种受SQL启发但是Smalltalkish查询语言。
GemStone有一个很好的设备,他们称之为“GLASS”(对于GemStone,Linux,Apache,Seaside和Smalltalk)类似于众所周知的“LAMP”(Linux,Apache,MySQL和PHP)。 GLASS包括预装了Seaside的GemStone免费版,以及在Xubuntu上运行Apache的所有设置,所有内容都整齐地打包到VMWare磁盘映像中。
答案 1 :(得分:3)
单独使用GLASS并不能帮助您概览数据。 SandstoneDB确实如此。您可以将SandstoneDB与GOODS和GLASS一起使用(或者甚至单独使用),具体取决于您希望花多少钱(砂岩在所有意义上都是免费的,GLASS是商业用途,但免费啤酒用于小型装置)。
结帐the sandstoneDB page。这是the adaptor for GOODS。要将SandstoneDB与GLASS一起使用,只需将商店切换到SDMemoryStore,请参阅SandstoneDB中SDMemoryStore上的类注释。
答案 2 :(得分:1)
如果你可以选择,我也会选择GLASS或Magma(这取决于项目有多大)。
考虑到Squeak中的GLorp仅适用于PostgreSQL。我们开发了SqueakDBX,它是一个与大多数数据库进行通信的数据库驱动程序。我们现在正在修改Glorp,以便您可以将它们全部用于它们(不仅仅是PostgreSQL)。但这不会到今年年底。