OrbitDB
OrbitDB是一个无服务器、分布式、点对点数据库。OrbitDB使用IPFS作为数据存储,使用Libp2p Pubsub自动与对等节点同步数据库。它是一个最终一致性数据库,使用Merkle-CRDTs实现无冲突的数据库写入和合并,使OrbitDB成为P2P和去中心化应用、区块链应用以及本地优先网络应用的绝佳选择。
OrbitDB提供多种类型的数据库,适用于不同的数据模型和用例:
- events:一个不可变(仅追加)的日志,具有可遍历的历史记录。适用于"最新N条"用例或作为消息队列。
- documents:一个文档数据库,可以存储JSON文档并按指定键进行索引。适用于构建搜索索引或对文档和数据进行版本控制。
- keyvalue:一个键值数据库,就像你喜欢的键值数据库一样。
- keyvalue-indexed:在Level键值数据库中索引的键值数据。
所有数据库都是在OrbitDB的OpLog之上实现的,OpLog是一个不可变的、密码学可验证的、基于操作的无冲突复制数据结构(CRDT),适用于分布式系统。OpLog在Merkle-CRDTs论文中得到了形式化。你还可以通过实现和使用自定义数据模型轻松扩展OrbitDB,从而受益于与底层Merkle-CRDTs提供的默认数据模型相同的特性。
这是JavaScript实现,适用于浏览器和Node.js,支持Linux、OS X和Windows。
Go语言实现由Berty项目开发和维护,位于berty/go-orbit-db。
安装
安装OrbitDB及其依赖项:
npm install @orbitdb/core helia
浏览器
OrbitDB可以通过使用分发的js文件和<script/>
标签在浏览器中加载。OrbitDB是全局命名空间,所有外部函数都可以通过这个命名空间访问:
<script>/path/to/orbitdb.min.js</script>
快速入门
如果你想快速上手OrbitDB,请安装并按照@orbitdb/quickstart模块的说明进行操作。
使用方法
如果你正在使用@orbitdb/core
开发浏览器或Node.js应用程序,请将其作为模块与JavaScript版本的IPFS一起使用。
import { createHelia } from 'helia'
import { createOrbitDB } from '@orbitdb/core'
import { gossipsub } from "@chainsafe/libp2p-gossipsub";
import { identify } from "@libp2p/identify";
import { createLibp2p } from 'libp2p'
const Libp2pOptions = {
services: {
pubsub: gossipsub({
// 运行单个对等节点所必需的
allowPublishToZeroTopicPeers: true
}),
identify: identify()
}
}
;(async function () {
const libp2p = await createLibp2p({ ...Libp2pOptions })
const ipfs = await createHelia({libp2p})
const orbitdb = await createOrbitDB({ ipfs })
// 创建/打开数据库。默认数据库类型为"events"。
const db = await orbitdb.open("hello")
const address = db.address
console.log(address)
// "/orbitdb/zdpuAkstgbTVGHQmMi5TC84auhJ8rL5qoaNEtXo2d5PHXs2To"
// 上述地址可以在另一个节点上用于打开相同的数据库
// 监听来自对等节点的更新
db.events.on("update", async entry => {
console.log(entry)
const all = await db.all()
console.log(all)
})
// 添加一条记录
const hash = await db.add("world")
console.log(hash)
// 查询
for await (const record of db.iterator()) {
console.log(record)
}
await db.close()
await orbitdb.stop()
await ipfs.stop()
})()
要为持久性配置您的IPFS实例并Libp2p连接到对等节点,请参阅@orbitdb/quickstart中的创建Helia实例和默认Libp2p配置示例。
文档
使用**入门指南**作为OrbitDB的初步介绍。
您可以在我们的文档中找到更高级的主题,包括:
API
完整的API文档请参见https://api.orbitdb.org。
开发
运行测试
npm run test
构建
npm run build
基准测试
node benchmarks/orbitdb-events.js
更多基准测试请参见benchmarks/。
API
要构建API文档,请运行:
npm run build:docs
文档将输出到./docs/api。
其他实现
- Golang: berty/go-orbit-db
- Python: orbitdb/py-orbit-db-http-client
如果您知道任何其他应该包含在此部分的仓库,请开启PR并添加它们。
贡献
**请查看我们组织范围的贡献指南。**您会在那里找到大多数问题的答案。
如果您想编码但不知道从哪里开始,请查看标记为"help wanted"的问题。
赞助商
OrbitDB的开发得到了以下机构的赞助:
如果您想赞助开发者为OrbitDB工作,请捐赠给我们的OrbitDB Open Collective或联系@haadcode。
许可证
MIT © 2015-2023 Protocol Labs Inc., Haja Networks Oy, OrbitDB社区