17个稳定版本 (3个主要)
4.6.2 | 2022年8月2日 |
---|---|
4.6.1 | 2021年11月4日 |
4.6.0 | 2021年10月11日 |
4.2.2 | 2021年6月25日 |
1.0.0 | 2020年2月27日 |
#53 in 数据库实现
63 每月下载量
用于 peermaps-ingest
150KB
4K SLoC
eyros
eyros (εύρος) 是一个多维度区间数据库。
- 高批量写入性能
- 设计用于对等分布和查询驱动的稀疏复制
- 编译为Web Assembly,用于浏览器
- 适用于地理空间和时间序列数据
eyros在每个维度上操作标量(x)或区间(min,max)坐标。有两个操作:批量写入(用于插入和删除)和通过边界框查询。所有与边界框相交的功能都将在查询结果中返回。
示例
此示例插入5000条记录,将数据写入磁盘,然后查询并打印边界框内的记录 ((-120.0,20.0,10_000),(-100.0,35.0,20_000))
。
边界框的形式为 ((min_x,min_y,min_z),(max_x,max_y,max_z))
。
use eyros::{Row,Coord};
use rand::random;
use async_std::prelude::*;
type P = (Coord<f32>,Coord<f32>,Coord<u16>);
type V = u64;
type E = Box<dyn std::error::Error+Sync+Send>;
#[async_std::main]
async fn main() -> Result<(),E> {
let mut db = eyros::open_from_path3(
&std::path::PathBuf::from("/tmp/eyros.db")
).await?;
let batch: Vec<Row<P,V>> = (0..5_000).map(|i| {
let xmin = (random::<f32>()*2.0-1.0)*180.0;
let xmax = xmin + random::<f32>().powf(16.0)*(180.0-xmin);
let ymin = (random::<f32>()*2.0-1.0)*90.0;
let ymax = ymin + random::<f32>().powf(16.0)*(90.0-ymin);
let z = random::<u16>();
let point = (
Coord::Interval(xmin,xmax),
Coord::Interval(ymin,ymax),
Coord::Scalar(z)
);
Row::Insert(point, i)
}).collect();
db.batch(&batch).await?;
db.sync().await?;
let bbox = ((-120.0,20.0,10_000),(-100.0,35.0,20_000));
let mut stream = db.query(&bbox).await?;
while let Some(result) = stream.next().await {
println!("{:?}", result?);
}
Ok(())
}
该程序的输出形式为 (coords, value)
$ cargo run --example polygons -q
((Interval(-100.94689, -100.94689), Interval(20.108843, 20.109331), Scalar(16522)), 4580)
((Interval(-111.62768, -110.40406), Interval(-7.519809, 86.154755), Scalar(12384)), 2603)
((Interval(-114.46505, -31.340988), Interval(-57.901405, 20.235504), Scalar(11360)), 1245)
((Interval(-159.97859, 121.304184), Interval(32.35743, 32.35743), Scalar(10164)), 3294)
((Interval(-150.29192, -35.475517), Interval(-39.97779, 29.163605), Scalar(15333)), 2336)
((Interval(-162.45879, -92.46166), Interval(31.187943, 31.187975), Scalar(12221)), 2826)
((Interval(-160.53441, -88.66396), Interval(10.031784, 21.852394), Scalar(11711)), 2366)
((Interval(-132.39021, -98.14838), Interval(-0.06010294, 53.88453), Scalar(10685)), 3441)
许可
bsd
依赖项
~7–20MB
~252K SLoC