2014-12-05 1 views

답변

2

이것은 행/기본 키 액세스와 유사합니다. docs : "EAVT 인덱스는 주어진 엔터티에 대한 모든 항목에 효율적으로 액세스 할 수 있습니다. 개념적으로 이것은 엔티티가 미리 정의 된 열 집합으로 제한되지 않고 임의의 특성을 가질 수 있다는 점을 제외하면 SQL 데이터베이스의 행 액세스 스타일과 매우 유사합니다. "

Datomic의 불변 시간/이력 측면은 동기를 부여하는 유스 케이스이지만 일반적으로 일반적인 데이터베이스 작업 (예 : 엔티티의 속성과 값을 찾습니다.

업데이트 :

Datomic은 인덱스 트리의 데이터를 세그먼트로 저장합니다. 따라서 트리를 사용하여 특정 E의 세그먼트로 이동 한 다음 세그먼트의 해당 E에 대한 자료를 검색합니다. 세그먼트는 EAVT 자료입니다. 귀하의 의견에서, 나는 당신이이 단계를 더 많은 b-tree와 같은 구조의 네비게이션으로 생각하고 있다고 생각합니다. 이는 틀린 것입니다. E로 이동하면 (정렬 된) 자료의 리프 세그먼트에 액세스하고 있습니다.

+0

하지만 엔티티의 속성 값을 찾는 것이 EAVT의 이점을 누리는 방법을 모르겠다. 내 말은, EA의 부분은 분명하지만 왜 VT가 결국인가? 내가 이해하는 바에 따르면, VT는 하나의 B-TREE에 주어진 속성의 모든 (과거) 값을 가지고 있으며, 하나의 구체적인 값을 선택할 때만,이 값이 언제 설정되었는지를 알 수 있습니다. 이 속성에 대해 새로운 값이 존재하는지 여부를 아십시오.). 이 블로그 게시물 http://tonsky.me/blog/unofficial-guide-to-datomic-internals/이 나타내지 만, 이것은 대부분의 쿼리에서 큰 문제가되지는 않을 것이며, 검색어 중 –

+0

위의 답변을 업데이트했습니다. VT는 b 트리가 아니며, 인덱스 자체는 모든 데이터를 포함하는 커버 인덱스입니다. 엔티티에 대한 모든 데이터를 포함하는 리프 세그먼트를 얻기 위해 인덱스 트리를 탐색 만합니다. 트리를 이동하여 AVT 등을 계속 얻지는 않습니다. –

+0

재미있는 사실이지만, 원래 제기 된 질문에 어떻게 답하는 지 아직 알 수 없습니다. 문제를 설명하려면 다음과 같이하십시오. 1 초마다 속성 값을 새롭고 독창적 인 값으로 변경합니다. 얼마 후 그러한 엄청난 양의 데이터가 있습니다. 특정 시간에 Datomic에 attr 값을 요청하면 엔진은 무엇을 할 수 있습니까? 귀하의 게시물에서 특정 엔터티에 대한 모든 데이터를 가져와야 할 것 같습니다 (빈 칸이 하나의 세그먼트에 맞지 않을 수도 있습니다). 빈 검색이 여기에 적용되지 않기 때문에 반복해야합니다. –