#多维度 #区间 #时间序列 #地理空间 #数据库 #边界框 #wasm

nightly eyros

多维度区间数据库

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 数据库实现

Download history 8/week @ 2024-03-09 1/week @ 2024-03-16 18/week @ 2024-03-30 4/week @ 2024-04-06

63 每月下载量
用于 peermaps-ingest

自定义许可

150KB
4K SLoC

Rust 3K SLoC // 0.0% comments JavaScript 629 SLoC

eyros

eyros (εύρος) 是一个多维度区间数据库。

eyros logo

数据库基于 bkd区间树

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