问题 Magma,GOODS,GLORP或其他什么?


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

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

谢谢!


12015
2017-07-07 04:41


起源



答案:


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

但请注意,GemStone是一个 专有的商业产品。那么你  必须付钱。但是,定价模型通常以这样的方式设计,如果您 需要 一个更大的版本,那么你通常也会有用户 工资 那个版本。 4 GiByte磁盘/ 1 GiByte RAM / 1 CPU版本的价格从0美元开始。

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

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

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

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

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


12
2017-07-07 09:01



我完全同意,GemStone / S是要走的路。 - Damien Cassou
有意思......所以,如果我有一个包含1000万个物品的集合,那么就可以了 整个 收藏在我当地的记忆中? - 我只想弄清楚我的数据会在哪里。 - KHWP
整个系列不一定要在 本地 内存...大型对象在内部使用btree实现(基本上),因此部分集合可以加载到本地内存中 - 您的工作集保存在本地内存中,其余部分保存在磁盘上 - Dale Henrichs
它有点糟糕,没有真正好的开源解决方案,但我一直在寻找宝石,它看起来真的很光滑 - Alex
GemStone还有一个Java产品,在Java社区中,有开源竞争对手(例如Terracotta)。我想Smalltalk社区并不是真的很烦,他们只是想要最好的解决方案,如果事实证明最好的解决方案花费了他们一点钱,那么就这样吧。 - Jörg W Mittag


答案:


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

但请注意,GemStone是一个 专有的商业产品。那么你  必须付钱。但是,定价模型通常以这样的方式设计,如果您 需要 一个更大的版本,那么你通常也会有用户 工资 那个版本。 4 GiByte磁盘/ 1 GiByte RAM / 1 CPU版本的价格从0美元开始。

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

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

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

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

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


12
2017-07-07 09:01



我完全同意,GemStone / S是要走的路。 - Damien Cassou
有意思......所以,如果我有一个包含1000万个物品的集合,那么就可以了 整个 收藏在我当地的记忆中? - 我只想弄清楚我的数据会在哪里。 - KHWP
整个系列不一定要在 本地 内存...大型对象在内部使用btree实现(基本上),因此部分集合可以加载到本地内存中 - 您的工作集保存在本地内存中,其余部分保存在磁盘上 - Dale Henrichs
它有点糟糕,没有真正好的开源解决方案,但我一直在寻找宝石,它看起来真的很光滑 - Alex
GemStone还有一个Java产品,在Java社区中,有开源竞争对手(例如Terracotta)。我想Smalltalk社区并不是真的很烦,他们只是想要最好的解决方案,如果事实证明最好的解决方案花费了他们一点钱,那么就这样吧。 - Jörg W Mittag


单独使用GLASS并不能帮助您概览数据。 SandstoneDB确实如此。您可以将SandstoneDB与GOODS和GLASS(或甚至单独使用)一起使用,具体取决于您希望花多少钱(砂岩在所有意义上都是免费的,GLASS是商业用途,但免费啤酒用于小型装置)。

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


3
2017-07-12 10:31





如果你可以选择,我也会选择GLASS或Magma(这取决于项目有多大)。

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


1
2017-07-07 13:53