当前位置:  开发笔记 > 编程语言 > 正文

Smalltalk/Seaside中的数据持久性

如何解决《Smalltalk/Seaside中的数据持久性》经验,为你挑选了3个好方法。

我最近花了一些时间熟悉Smalltalk和Seaside.我来自Java EE世界,你可以想象,围绕一些Smalltalk概念进行思考是很困难的.:)

目前,我正在努力了解数据持久性最常见于Smalltalk世界.我作为Java程序员的假设是使用RDMS(即MySQL)和ORM(即Hibernate).据我所知,Smalltalk不是这种情况(至少使用Hibernate).我不一定在寻找与Java EE中的方式最接近的方法.

将数据保存到图像,对象存储或RDMS中是最常见的吗?Smalltalk应用程序使用RDMS甚至是典型的吗?

我知道这里没有一个通用的方法,正确的持久性策略将取决于应用程序的需求(多少数据,并发等).什么是一个好的方法,可以开始简单,但也可以扩展?

我观看过Avi Bryant讨论他用于持久化和扩展DabbleDB的策略的视频.根据我的理解,客户的数据被保存在图像中(每个客户一个图像).这在他的用例中起作用,因为客户不必共享数据.这是一种常见的方法吗?

希望我没有制作这个TLDR.非常感谢Smalltalk人员在我之前的问题中提供的见解.非常感谢.



1> 小智..:

贾斯汀,

不要担心,Smalltalk在这个领域与其他语言并没有太大不同,它只是添加了基于图像的持久性选项.

有像Hibernate for Smalltalk这样的O/R映射器,GLORP及其Pharo端口DBXtalk肯定是目前最受欢迎的.如果您了解Hibernate,这些应该让您感觉很舒服.

然后有像GemStone或Magma DB或VOSS这样的OODB解决方案以及其他许多可以让你抛开所有O/R映射问题的解决方案.其中大部分仅限于存储Smalltalk对象,GemStone是为Ruby和其他语言提供桥梁的例外.

还有一些工具可以在现代NoSQL数据库中存储Smalltalk对象,如CouchDB,Cassandra,GOODS等.这里的技巧只是将Smalltalk对象值转换为JSON流和一些HTTP请求.

最后,您可以选择保存完整的Smalltalk图像.我说你可以在生产环境中做到这一点,但对于很多人来说,这不是标准或首选的方式.你在开发过程中经常做很多事情,因为你可以简单地保存一个图像,并在下次完全恢复你的工作时,就像你保存时所有的对象一样.

所以基线是:您知道的所有存储选项也可以在Smalltalk中使用,另外还有一个.

约阿希姆



2> Bernat Romag..:

我想这主要取决于你的数据库有多大以及它将处理什么样的负载.

就我而言,我写过的所有应用程序都使用磁盘序列化的映像持久性.基本上,您只需要根据请求使用Fuel来序列化您的对象.在我的情况下,我每次处理一个重要的数据时都这样做,加上每24小时序列化一次的常规流程.图像也会每24小时自动保存一次.

我使用这种方法编写的最大的应用程序是处理一个由10名工人组成的小公司的所有业务流程,以及大约50名自由职业者,他们每天使用它一年半.考虑到应用程序一直处理大文件,工作量非常"大",但应用程序保持稳定和快速.切换到新服务器并更新Pharo映像就像从monticello获取项目并实现最新的序列化"数据库"一样简单.

在我看来,ORM是一种不必要的痛苦,我们处于对象世界中,不得不压扁我们的对象感觉是错误的,特别是当我们有很好的面向对象的解决方案时.

因此,如果您的应用处理相当少量的数据,我建议使用我的简单方法或SandstoneDB.如果您的应用处理大量交易和数据,我会去Gemstone.

只是我的两分钱.



3> Sean DeNigri..:

Ramon Leon 在他的博客文章中精美地描述了情况,基本策略及其权衡.

我将从他的基于简单图像的持久性框架开始,我在Pharo 1.3中移植并使用它.马里亚诺马丁内斯佩克最近改编它使用燃料(相同的链接).它非常简单,完成工作,让我更有信心在我的图像中玩,知道即使我永久性地损坏它,我的所有数据都是安全的.我只是将数据文件夹复制到新的图像文件夹,加载我的包,并且我的所有对象在新图像中都是活动的.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有