OrbitDB初体验
1.项目分析
1.1 项目分析
为去中心化网络设计的点对点(P2P)数据库,下面是关于 OrbitDB 的一些关键点和如何部署及与之交互的概述:
1.2 主要功能
- 无服务器(Serverless):不需要中心化的服务器来运行。
- 分布式(Distributed):数据分布在网络中的各个节点上。
- 点对点(Peer-to-Peer):直接在用户之间同步数据,不需要通过中介。
- 使用 IPFS 作为数据存储:IPFS(InterPlanetary File System)是一个分布式文件系统,用于存储和访问文件、网站、应用程序等。
- 使用 Libp2p Pubsub 进行数据库同步:Libp2p 是一个模块化的网络栈,Pubsub 是它的一个模块,用于发布和订阅消息,以实现数据库的自动同步。
- 最终一致性(Eventually Consistent):数据库保证了在没有冲突的情况下,最终所有副本都将达到一致的状态。
- 使用 Merkle-CRDTs 进行冲突自由的数据库写入和合并:CRDTs(Conflict-free Replicated Data Types)是一种特殊类型的数据结构,允许在没有中心协调者的情况下进行数据的并发更新。
1.3 数据库类型
OrbitDB 提供了不同类型的数据库以适应不同的数据模型和用例:
- events:不可变的(仅追加)日志,具有可遍历的历史记录。
- documents:可以存储和按指定键索引 JSON 文档的文档数据库。
- keyvalue:类似于传统的键值数据库。
- keyvalue-indexed:在 LevelDB 中索引的键值数据。
1.4 部署和交互
安装:可以通过 npm 安装 OrbitDB 及其依赖:
1
npm install @orbitdb/core helia
浏览器中使用:OrbitDB 可以通过在 HTML 文件中使用
<script>
标签来加载:1
<script src="/path/to/orbitdb.min.js"></script>
快速开始:可以使用
@orbitdb/quickstart
模块快速开始使用 OrbitDB。使用:在浏览器或 Node.js 应用中,可以将
@orbitdb/core
作为一个模块与 IPFS 的 JavaScript 实例一起使用。以下是创建和使用数据库的示例代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31import { createHelia } from 'helia';
import { createOrbitDB } from '@orbitdb/core';
import { gossipsub } from "@chainsafe/libp2p-gossipsub";
import { identify } from "@libp2p/identify";
import { createLibp2p } from 'libp2p';
// 创建 Libp2p 实例和 IPFS 实例
const libp2p = await createLibp2p({ /* options */ });
const ipfs = await createHelia({ libp2p });
const orbitdb = await createOrbitDB({ ipfs });
// 创建/打开数据库
const db = await orbitdb.open("my-database-name");
// 监听来自其他节点的更新
db.events.on("update", async (entry) => {
// 处理更新
});
// 添加条目到数据库
const hash = await db.add({ content: "Hello, OrbitDB!" });
// 查询数据库
for await (const record of db.iterator()) {
// 处理记录
}
// 关闭数据库和 IPFS 实例
await db.close();
await orbitdb.stop();
await ipfs.stop();持久化和连接:为了配置 IPFS 实例的持久化和 Libp2p 连接到其他节点,可以参考
@orbitdb/quickstart
中的 Helia 实例创建和默认的 Libp2p 配置。文档和开发:项目的 README 中提供了更多关于如何运行测试、构建项目、基准测试和构建 API 文档的指导。