저는 start와 stop으로 위치 데이터베이스를 만들려고합니다. 기본적으로 1D 축에 선이 있습니다. 주어진 간격과 겹치는 모든 위치를 효율적으로 쿼리하려고합니다. 기존 테이블에서는 쿼리에 두 개의 부등식이 필요하므로 인덱싱 할 수 없습니다. R-Tree 인덱스를 사용할 수도 있지만 다차원 범위 쿼리를 위해 설계된 것처럼 보입니다. 축에 선을 저장하는 더 효율적인 방법이 있습니까?SQLite - 축의 행을 인덱싱하는 데 rtree 대신 사용할 수 있습니까?
호기심이 있다면 데이터베이스는 게놈 간격을 저장하는 것입니다. 여기에 예를 표는 다음과 같습니다
CREATE TABLE lines (id INTEGER PRIMARY KEY, start INTEGER, stop INTEGER);
이 작업을 수행하는 기본적인 방법은 다음과 같습니다
SELECT * FROM lines WHERE start <= <end of interval> AND stop >= <start of interval>;
가 다시 말하지만,이 정말 느린 및 인덱싱 할 수 없습니다. 는 R-나무는 다음과 같이 작동합니다 :
CREATE VIRTUAL TABLE lines_index USING RTREE (id, start, stop);
SELECT * from lines_index WHERE start <= <end of interval> AND stop >= <start of interval>;
R-나무는 우리의 구현에 적합하지 않은, 그래서 어떤 대안이 있는지 궁금 해요 ... 모든
R-Trees가 구현에 적합하지 않은 이유는 무엇입니까? 그들은 다차원 데이터를 처리 할 수 있지만 1 차원 데이터에도 사용할 수 있습니다. – btilly
죄송합니다. 거기서 확장해야합니다. rtree v. traditional indices의 일부 테스트를 작성했으며 rtree는 제대로 수행되지 않았습니다. 우리의 유스 케이스는 몇 가지 이유로 매우 독특합니다 : 1) 변형의 대부분 (~ 90 %)이 단일 포인트입니다. 시작과 중단이 동일합니다. 2) 테이블은 실제로 수 천만 줄에 이릅니다. 3) 위치는 부동 소수점이 아닌 정수입니다. 4) 변이체는 실제로 염색체 AND 위치에 의해 저장되므로 많은 후 처리 작업을 수행합니다. 그래서 간격 트리와 같은 다른 옵션이 있는지 살펴 보려고했습니다. –
이것이 2 년 이상 된 것을 알고 있지만, float 대신 int 값을 저장하는 sqlite의 rtree_i32 R * Tree 변형을 시도한 적이 있는지 궁금합니다. – infogulch