Rust数据库插件nostr-database的使用:高效存储与查询Nostr协议数据的Rust库
Rust数据库插件nostr-database的使用:高效存储与查询Nostr协议数据的Rust库
Nostr (Events) Database是一个为nostr应用提供的事件数据库抽象和内存实现的库。
Nostr Database Trait
该库包含NostrDatabase
和NostrDatabaseExt
trait。您可以使用默认后端或实现自己的后端(如PostgreSQL等)。
默认后端
- Memory (RAM,原生和Web版本),包含在本库中
- LMDB (原生),通过
nostr-lmdb
提供 - nostrdb (原生),通过
nostr-ndb
提供 - IndexedDB (Web),通过
nostr-indexeddb
提供
Crate Feature Flags
以下是可用的crate feature flags:
Feature | Default | Description |
---|---|---|
flatbuf |
No | 为nostr事件启用flatbuffers 序列化/反序列化 |
状态
该库处于ALPHA状态,已实现的功能通常可以工作,但API会以不兼容的方式更改。
捐赠
rust-nostr
是免费开源的。这意味着我们不会通过销售它来获得任何收入。相反,我们依赖于您的经济支持。如果您积极使用任何rust-nostr
库/软件/服务,请捐赠。
许可证
该项目采用MIT软件许可证分发 - 详情请见LICENSE文件
示例代码
use nostr_database::{MemoryDatabase, NostrDatabase, NostrDatabaseExt};
use nostr::{Event, Filter};
// 创建内存数据库实例
let db = MemoryDatabase::default();
// 创建一个示例事件
let event = Event::new_text_note("Hello Nostr", &[]);
// 存储事件
db.save_event(event.clone()).await?;
// 查询事件
let filter = Filter::new().author(event.author());
let events = db.query(vec![filter]).await?;
// 打印查询结果
println!("Found events: {:?}", events);
完整示例
以下是一个更完整的示例,展示如何使用nostr-database进行基本操作:
use nostr_database::{MemoryDatabase, NostrDatabase, NostrDatabaseExt};
use nostr::{Event, Filter, Keys};
use std::time::SystemTime;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 初始化数据库
let db = MemoryDatabase::default();
// 生成用户密钥
let keys = Keys::generate();
// 创建事件
let event = Event::new_text_note(
"This is my first Nostr note!",
&[],
&keys,
)?;
// 保存事件到数据库
db.save_event(event.clone()).await?;
// 创建查询过滤器
let filter = Filter::new()
.author(keys.public_key())
.since(SystemTime::now());
// 查询事件
let events = db.query(vec![filter]).await?;
// 输出结果
println!("Found {} events:", events.len());
for event in events {
println!("- {}: {}", event.id, event.content);
}
Ok(())
}
该示例展示了如何:
- 初始化内存数据库
- 创建Nostr事件
- 将事件保存到数据库
- 使用过滤器查询事件
- 处理查询结果
您可以根据需要修改此示例,例如使用不同的数据库后端或更复杂的查询过滤器。
1 回复