SandstoneDb: Squeak 中的简易持久化存储
文章目录
前言
如 Seaside 文档所言, 不同的情况下,有不同的存储需求:
- 如果你在编写小型演示程序,并希望在系统中填充一些典型数据。使用类实例变量来存储数据,然后简单地保存 image 就行了。这种情况下,直接存储 image 是最简单的。
- 如果你有一个包含几十万个对象的小型系统,并且不想依赖于外部系统. SandstoneDB 可能是一个完美选择。对象将保存在文件系统里, 并保留了一些旧版本的数据,因此备份或恢复很容易。
- 如果你有一个遗留的关系数据库,需要为其编写了大量报表。可使用 ORM。
- 如果你有一个复杂且大型的对象模型,它必须支持在开发时更改对象模型。解决方案是 OODB。Gemstone 是经过验证的大型商业产品。
SandstoneDB 足以覆盖多数人的多数用例,SandstoneDb, Simple ActiveRecord Style Persistence in Squeak 对此有精彩论述。
使用 SandstoneDB 的场景
以下是我自己可能会用到 SandstoneDB 的场景:
- 使用 Seaside 构建小型 Web 应用
- 数据类型的应用(如爬虫)
- 将 Squeak 作为日常工作环境使用时,需要 SandstoneDB 实时持久化一些实例数据(诸如备忘录),避免图像意外崩溃造成的数据丢失
使用
SandstoneDb 文档匮乏,而且一些过时的信息已经不再适用(如这个视频演示)。以下是我的使用笔记,供其他新用户参考 (Squeak/Pharo 中应该都能使用).
安装
|
|
SandstoneDb 支持多种不同的存储后端, 在此我们使用基于文件系统的存储后端。
打开 Monticello,加载我们需要的存储后端: SandstoneDbFileDirectoryStore
, 其中包含 SDFileStore
类。SandstoneDbFileDirectoryStore
依赖于SandstoneDbTests
,所以先加载SandstoneDbTests
。如果你跟我一样在使用 Squeak,建议也顺便加载 SandstoneDbSqueak
。
完成后,你应该能够在 browser 里看到这几个包:
测试一下
在Test Runner
运行测试看看是否一切正常
如果一切正常,你应该会在 Squeak 目录里看到 SandstoneDb 的数据目录:
.
开始使用
结下来就可以开始创建我们的第一个数据类:
开始创建我们的第一个数据存储类: Person
|
|
实例方法:
|
|
类方法:
|
|
创建完成后,保存并退出 image。再次加载 image,你就能在 Squeak 目录里(跟 image 在同一层级)看到:
每次创建完新的数据类,需要保存并退出 image, 来创建本地数据仓库。
现在就可以开始使用 SandstoneDb 持久化的能力了。
在 Workspace 里创建 3 条数据:
|
|
直接退出 image.
再次进入镜像, 运行 Person findAll size.
发现存在 3 条数据,说明这些数据已经在镜像之外持久化了.
版本信息
在次列出我的系统和软件包信息:
Squeak: Squeak6.1alpha-22143-64bit
SandstoneDb:
- SandstoneDb-tcj.152
- SandstoneDbFileDirectoryStore-RamonLeon.2
- SandstoneDbSqueak-RamonLeon.1
- SandstoneDbTests-RamonLeon.13
参考
文章作者 种瓜
上次更新 2022-09-08