eyros
1.0.0
eyros(εύρος)는 다차원 간격 데이터베이스입니다.
데이터베이스는 bkd 및 간격 트리를 기반으로 합니다.
eyros는 각 차원에 대한 스칼라(x) 또는 간격(최소, 최대) 좌표에서 작동합니다. 일괄 쓰기(삽입 및 삭제용)와 경계 상자별 쿼리라는 두 가지 작업이 있습니다. 경계 상자와 교차하는 모든 기능이 쿼리 결과에 반환됩니다.
이 예에서는 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)
라이센스 제로 패리티 7.0.0 및 Apache 2.0(기여)