在 iTwin.js 中,briefcase 和 checkpoint 都是 IModel 的不同连接类型,但它们的用途和特性不同:
Briefcase
- 用途:用于本地编辑和同步。通常是用户从 iModelHub 检出(Check-out)后在本地生成的可写副本。
- 特性:
- 支持本地修改和增量同步(Push/Pull)。
- 可以合并、提交更改集(ChangeSet)。
- 适合需要离线编辑、协作的场景。
- 典型场景:设计人员本地编辑 BIM 数据,然后同步到云端。
示例:
itwinjs-core\example-code\app\src\backend\test\RobotWorldRpc.test.ts
const roWrite = RobotWorldWriteRpcInterface.getClient();const roRead = RobotWorldReadRpcInterface.getClient();const iModel = await BriefcaseConnection.openFile({ fileName: `${KnownTestLocations.outputDir}/` + `RobotWorldRpc.bim` });assert.isTrue(iModel !== undefined);const iToken = iModel.getRpcProps();let modelId!: Id64String;for (const modelStr of await iModel.queryEntityIds({ from: "bis:element", where: "CodeValue='test'" }))modelId = Id64.fromString(modelStr);// Initial placement: Robot1 is not touching any barrier (or other robot)//// |// |<---barrier1------->// | ^// | |// | barrier2// | |// |R1 V// +-- -- -- -- -- -- --const robot1Id = await roWrite.insertRobot(iToken, modelId, "r1", Point3d.create(0, 0, 0).toJSON());const barrier1Id = await roWrite.insertBarrier(iToken, modelId, Point3d.create(0, 5, 0).toJSON(), Angle.createDegrees(0).toJSON(), 5);const barrier2Id = await roWrite.insertBarrier(iToken, modelId, Point3d.create(5, 0, 0).toJSON(), Angle.createDegrees(90).toJSON(), 5);await iModel.saveChanges();
Checkpoint
- 用途:只读快照。通常用于查看、审阅,不支持本地编辑。
- 特性:
- 只读,不支持本地修改。
- 通常是某个更改集(ChangeSet)在云端生成的快照。
- 适合只读浏览、审查、对比等场景。
- 典型场景:项目成员只需要查看某一时刻的模型数据,无需编辑。
示例:
imodel = await CheckpointConnection.openRemote(iTwinId, iModelId);
standalone db
(独立数据库)指的是本地单机使用的数据库文件,它不依赖于云端服务或协作平台。
常见特征如下:
- 通常是一个本地的
.bim
或.db
文件。 - 只支持单用户访问和操作,不支持多人协作或同步。
- 适合离线、个人测试、数据导入导出等场景。
- 与 iModelHub 的 briefcase(可同步的本地副本)不同,standalone db 不能推送或拉取更改集。
简而言之:
standalone db 就是“独立本地数据库”,只在本地使用,不支持云端协作和同步。