【问题标题】:Magma, GOODS, GLORP, or something else?Magma、GOODS、GLORP 还是其他?
【发布时间】:2010-11-08 14:09:21
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: persistence smalltalk squeak seaside pharo


    【解决方案1】:

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

    但是请注意,GemStone 是 proprietary, commercial product。因此,您必须为此付费。但是,定价模型通常是这样设计的,如果您需要一个更大的版本,那么您通常也会让用户为那个版本付费。 4 GiByte 磁盘 / 1 GiByte RAM / 1 CPU 版本的价格从 0 $ 开始。

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

    那么,什么是宝石?基本上,它是一个具有自动对象持久性的分布式虚拟机。与普通的 Smalltalk VM 相比,它最容易解释。如果你有两个 Smalltalk VM 并排运行,它们每个都有自己的对象内存(即垃圾收集器管理的东西)。该对象内存在 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 磁盘映像中。

    【讨论】:

    • 我完全同意,GemStone/S 是要走的路。
    • 有趣...所以如果我有一个包含 1000 万个对象的集合,那么 whole 集合会在我的本地内存中吗? - 我只是想弄清楚我的数据会在哪里。
    • 整个集合不必在 local 内存中...大对象在内部使用 btrees 实现(基本上),因此可以将部分集合加载到本地内存中 - 您的工作集保存在本地内存中,其余的在磁盘上
    • 没有真正好的开源解决方案真是令人遗憾,但我一直在研究 Gemstone,它看起来真的很漂亮
    • GemStone 也有 Java 产品,在 Java 社区中,也有开源竞争对手(例如 Terracotta)。我猜 Smalltalk 社区并没有真正打扰他们,他们只是想要最好的解决方案,如果结果证明最好的解决方案会花费他们一些钱,那就这样吧。
    【解决方案2】:

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

    查看the sandstoneDB page。这是the adaptor for GOODS。要将 SandstoneDB 与 GLASS 一起使用,只需将存储切换到 SDMemoryStore,请参阅 SandstoneDB 中 SDMemoryStore 上的类 cmets。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 2010-09-11
        • 2022-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多